@pawover/kit 0.0.0-alpha.21 → 0.0.0-alpha.23

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/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
+ import { BigNumber, MathExpression, MathJsInstance, Matrix } from "mathjs";
1
2
  import { Class, NonEmptyObject, Replace, SetOptional, UnionToTuple, ValueOf } from "type-fest";
2
3
  import { assign } from "radashi";
3
4
 
4
5
  //#region src/utils/array/arrayCast.d.ts
5
-
6
6
  /**
7
7
  * 构造数组
8
8
  * @param candidate 待构造项
@@ -128,6 +128,38 @@ declare function arraySplit<T>(initialList: readonly T[], size?: number): T[][];
128
128
  */
129
129
  declare function to<T, U = Error>(promise: Readonly<Promise<T>>, errorExt?: UnknownObject): Promise<[U, undefined] | [null, T]>;
130
130
  //#endregion
131
+ //#region src/utils/math/toMathBignumber.d.ts
132
+ /**
133
+ * 将任意类型的值转换为 `math.bignumber`
134
+ *
135
+ * @param mathJsInstance mathJs 实例
136
+ * @param value 任意类型的值
137
+ * @param saveValue 安全值
138
+ */
139
+ declare function toMathBignumber(mathJsInstance: MathJsInstance, value: unknown, saveValue?: BigNumber | undefined): BigNumber;
140
+ //#endregion
141
+ //#region src/utils/math/toMathDecimal.d.ts
142
+ /**
143
+ * 将任意类型的值转换为十进制数字字符串
144
+ *
145
+ * @param mathJsInstance mathJs 实例
146
+ * @param value 任意类型的值
147
+ * @param precision 精度
148
+ * @param isFormat 是否格式化为字符串
149
+ */
150
+ declare function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: number, isFormat?: true): string;
151
+ declare function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: undefined, isFormat?: false): BigNumber;
152
+ //#endregion
153
+ //#region src/utils/math/toMathEvaluate.d.ts
154
+ /**
155
+ * 数学表达式求值
156
+ *
157
+ * @param mathJsInstance mathJs 实例
158
+ * @param expr 表达式
159
+ * @param scope 键值映射
160
+ */
161
+ declare function toMathEvaluate(mathJsInstance: MathJsInstance, expr: MathExpression | Matrix, scope?: Record<string, BigNumber>): string;
162
+ //#endregion
131
163
  //#region src/utils/object/cloneDeep.d.ts
132
164
  interface CloningStrategy {
133
165
  cloneMap: <K, V>(parent: Map<K, V>, track: (newParent: Map<K, V>) => Map<K, V>, clone: <T>(value: T) => T) => Map<K, V> | null;
@@ -224,6 +256,12 @@ declare function stringReplace<I extends string, S extends string, R extends str
224
256
  //#region src/utils/string/stringToJson.d.ts
225
257
  declare function stringToJson<R extends AnyObject = AnyObject, D extends R = R>(data: string | null | undefined, safeValue: D): R;
226
258
  //#endregion
259
+ //#region src/utils/string/stringToNumber.d.ts
260
+ /**
261
+ * 从字符串中提取数字
262
+ */
263
+ declare function stringToNumber(value: string): string;
264
+ //#endregion
227
265
  //#region src/utils/string/stringToValues.d.ts
228
266
  declare function stringToValues<T extends number | string = number>(data: string | null | undefined, valueType?: "number" | "string", splitSymbol?: string): T[];
229
267
  //#endregion
@@ -316,6 +354,10 @@ declare function isEqual<T>(x: T, y: T): boolean;
316
354
  //#region src/utils/typeof/isError.d.ts
317
355
  declare function isError<T extends Error>(value: unknown): value is T;
318
356
  //#endregion
357
+ //#region src/utils/typeof/isFalsy.d.ts
358
+ declare function isFalsy(value: unknown): boolean;
359
+ declare function isFalsyLike(value: unknown): boolean;
360
+ //#endregion
319
361
  //#region src/utils/typeof/isFile.d.ts
320
362
  declare function isFile<T extends File>(value: unknown): value is T;
321
363
  //#endregion
@@ -325,6 +367,10 @@ declare function isFunction<T extends Func>(value: unknown): value is T;
325
367
  //#region src/utils/typeof/isGeneratorFunction.d.ts
326
368
  declare function isGeneratorFunction<T extends Func>(value: unknown): value is T;
327
369
  //#endregion
370
+ //#region src/utils/typeof/isInfinity.d.ts
371
+ declare function isInfinity(value: unknown): boolean;
372
+ declare function isInfinityLike(value: unknown): boolean;
373
+ //#endregion
328
374
  //#region src/utils/typeof/isInteger.d.ts
329
375
  declare function isInteger<T extends number>(value: unknown): value is T;
330
376
  //#endregion
@@ -334,6 +380,9 @@ declare function isIterable<T extends Iterable<unknown>>(value: unknown): value
334
380
  //#region src/utils/typeof/isMap.d.ts
335
381
  declare function isMap<T extends Map<unknown, unknown>>(value: unknown): value is T;
336
382
  //#endregion
383
+ //#region src/utils/typeof/isNaN.d.ts
384
+ declare function isNaN<T extends number>(value: unknown): value is T;
385
+ //#endregion
337
386
  //#region src/utils/typeof/isNull.d.ts
338
387
  declare function isNull<T extends null>(value: unknown): value is T;
339
388
  //#endregion
@@ -379,5 +428,5 @@ declare function isWebSocket<T extends WebSocket>(value: unknown): value is T;
379
428
  //#region src/utils/typeof/isWindow.d.ts
380
429
  declare function isWindow<T extends Window>(value: unknown): value is T;
381
430
  //#endregion
382
- export { arrayCast, arrayCompete, arrayCounting, arrayDifference, arrayFirst, arrayFork, arrayIntersection, arrayLast, arrayMerge, arrayPick, arrayReplace, arraySplit, cloneDeep, enumEntries, enumKeys, enumTypeCheck, enumValues, isArray, isAsyncFunction, isBigInt, isBoolean, isClass, isDate, isEqual, isError, isFile, isFunction, isGeneratorFunction, isInteger, isIterable, isMap, isNull, isNumber, isObject, isPromise, isPromiseLike, isRegExp, isSet, isString, isSymbol, isURLSearchParams, isUndefined, isWeakMap, isWeakSet, isWebSocket, isWindow, mapEntries, objectAssign, objectEntries, objectKeys, objectPick, objectSwitch, objectValues, rowsToTree, stringInitialCase, stringReplace, stringToJson, stringToValues, to, treeFilter, treeFind, treeForEach, treeMap, treeToRows };
431
+ export { arrayCast, arrayCompete, arrayCounting, arrayDifference, arrayFirst, arrayFork, arrayIntersection, arrayLast, arrayMerge, arrayPick, arrayReplace, arraySplit, cloneDeep, enumEntries, enumKeys, enumTypeCheck, enumValues, isArray, isAsyncFunction, isBigInt, isBoolean, isClass, isDate, isEqual, isError, isFalsy, isFalsyLike, isFile, isFunction, isGeneratorFunction, isInfinity, isInfinityLike, isInteger, isIterable, isMap, isNaN, isNull, isNumber, isObject, isPromise, isPromiseLike, isRegExp, isSet, isString, isSymbol, isURLSearchParams, isUndefined, isWeakMap, isWeakSet, isWebSocket, isWindow, mapEntries, objectAssign, objectEntries, objectKeys, objectPick, objectSwitch, objectValues, rowsToTree, stringInitialCase, stringReplace, stringToJson, stringToNumber, stringToValues, to, toMathBignumber, toMathDecimal, toMathEvaluate, treeFilter, treeFind, treeForEach, treeMap, treeToRows };
383
432
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/array/arrayCast.ts","../src/utils/array/arrayCompete.ts","../src/utils/array/arrayCounting.ts","../src/utils/array/arrayDifference.ts","../src/utils/array/arrayFirst.ts","../src/utils/array/arrayFork.ts","../src/utils/array/arrayIntersection.ts","../src/utils/array/arrayLast.ts","../src/utils/array/arrayMerge.ts","../src/utils/array/arrayPick.ts","../src/utils/array/arrayReplace.ts","../src/utils/array/arraySplit.ts","../src/utils/function/to.ts","../src/utils/object/cloneDeep.ts","../src/utils/object/enumEntries.ts","../src/utils/object/enumKeys.ts","../src/utils/object/enumTypeCheck.ts","../src/utils/object/enumValues.ts","../src/utils/object/mapEntries.ts","../src/utils/object/objectAssign.ts","../src/utils/object/objectEntries.ts","../src/utils/object/objectKeys.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectSwitch.ts","../src/utils/object/objectValues.ts","../src/utils/string/stringInitialCase.ts","../src/utils/string/stringReplace.ts","../src/utils/string/stringToJson.ts","../src/utils/string/stringToValues.ts","../src/utils/tree/types.ts","../src/utils/tree/treeFilter.ts","../src/utils/tree/treeFind.ts","../src/utils/tree/treeForEach.ts","../src/utils/tree/treeMap.ts","../src/utils/tree/rowsToTree.ts","../src/utils/tree/treeToRows.ts","../src/utils/typeof/isArray.ts","../src/utils/typeof/isAsyncFunction.ts","../src/utils/typeof/isBigInt.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isDate.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isError.ts","../src/utils/typeof/isFile.ts","../src/utils/typeof/isFunction.ts","../src/utils/typeof/isGeneratorFunction.ts","../src/utils/typeof/isInteger.ts","../src/utils/typeof/isIterable.ts","../src/utils/typeof/isMap.ts","../src/utils/typeof/isNull.ts","../src/utils/typeof/isNumber.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isPromiseLike.ts","../src/utils/typeof/isRegExp.ts","../src/utils/typeof/isSet.ts","../src/utils/typeof/isString.ts","../src/utils/typeof/isSymbol.ts","../src/utils/typeof/isUndefined.ts","../src/utils/typeof/isURLSearchParams.ts","../src/utils/typeof/isWeakMap.ts","../src/utils/typeof/isWeakSet.ts","../src/utils/typeof/isWebSocket.ts","../src/utils/typeof/isWindow.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/array/arrayCast.ts","../src/utils/array/arrayCompete.ts","../src/utils/array/arrayCounting.ts","../src/utils/array/arrayDifference.ts","../src/utils/array/arrayFirst.ts","../src/utils/array/arrayFork.ts","../src/utils/array/arrayIntersection.ts","../src/utils/array/arrayLast.ts","../src/utils/array/arrayMerge.ts","../src/utils/array/arrayPick.ts","../src/utils/array/arrayReplace.ts","../src/utils/array/arraySplit.ts","../src/utils/function/to.ts","../src/utils/math/toMathBignumber.ts","../src/utils/math/toMathDecimal.ts","../src/utils/math/toMathEvaluate.ts","../src/utils/object/cloneDeep.ts","../src/utils/object/enumEntries.ts","../src/utils/object/enumKeys.ts","../src/utils/object/enumTypeCheck.ts","../src/utils/object/enumValues.ts","../src/utils/object/mapEntries.ts","../src/utils/object/objectAssign.ts","../src/utils/object/objectEntries.ts","../src/utils/object/objectKeys.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectSwitch.ts","../src/utils/object/objectValues.ts","../src/utils/string/stringInitialCase.ts","../src/utils/string/stringReplace.ts","../src/utils/string/stringToJson.ts","../src/utils/string/stringToNumber.ts","../src/utils/string/stringToValues.ts","../src/utils/tree/types.ts","../src/utils/tree/treeFilter.ts","../src/utils/tree/treeFind.ts","../src/utils/tree/treeForEach.ts","../src/utils/tree/treeMap.ts","../src/utils/tree/rowsToTree.ts","../src/utils/tree/treeToRows.ts","../src/utils/typeof/isArray.ts","../src/utils/typeof/isAsyncFunction.ts","../src/utils/typeof/isBigInt.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isDate.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isError.ts","../src/utils/typeof/isFalsy.ts","../src/utils/typeof/isFile.ts","../src/utils/typeof/isFunction.ts","../src/utils/typeof/isGeneratorFunction.ts","../src/utils/typeof/isInfinity.ts","../src/utils/typeof/isInteger.ts","../src/utils/typeof/isIterable.ts","../src/utils/typeof/isMap.ts","../src/utils/typeof/isNaN.ts","../src/utils/typeof/isNull.ts","../src/utils/typeof/isNumber.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isPromiseLike.ts","../src/utils/typeof/isRegExp.ts","../src/utils/typeof/isSet.ts","../src/utils/typeof/isString.ts","../src/utils/typeof/isSymbol.ts","../src/utils/typeof/isUndefined.ts","../src/utils/typeof/isURLSearchParams.ts","../src/utils/typeof/isWeakMap.ts","../src/utils/typeof/isWeakSet.ts","../src/utils/typeof/isWebSocket.ts","../src/utils/typeof/isWindow.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -95,6 +95,34 @@ function isError(value) {
95
95
  return resolvePrototypeString(value) === prototypeStrings.error;
96
96
  }
97
97
 
98
+ //#endregion
99
+ //#region src/utils/typeof/isNaN.ts
100
+ function isNaN(value) {
101
+ return Number.isNaN(value);
102
+ }
103
+
104
+ //#endregion
105
+ //#region src/utils/typeof/isFalsy.ts
106
+ function isFalsy(value) {
107
+ if (isNaN(value)) return true;
108
+ return [
109
+ null,
110
+ void 0,
111
+ false,
112
+ 0,
113
+ 0n,
114
+ ""
115
+ ].includes(value);
116
+ }
117
+ function isFalsyLike(value) {
118
+ return [
119
+ "null",
120
+ "undefined",
121
+ "false",
122
+ "NaN"
123
+ ].includes(value);
124
+ }
125
+
98
126
  //#endregion
99
127
  //#region src/utils/typeof/isFile.ts
100
128
  function isFile(value) {
@@ -117,6 +145,20 @@ function isGeneratorFunction(value) {
117
145
  return resolvePrototypeString(value) === prototypeStrings.generatorFunction;
118
146
  }
119
147
 
148
+ //#endregion
149
+ //#region src/utils/typeof/isInfinity.ts
150
+ function isInfinity(value) {
151
+ if (isNaN(value)) return true;
152
+ return [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY].includes(value);
153
+ }
154
+ function isInfinityLike(value) {
155
+ return [
156
+ "Infinity",
157
+ "-Infinity",
158
+ "NaN"
159
+ ].includes(value);
160
+ }
161
+
120
162
  //#endregion
121
163
  //#region src/utils/typeof/isInteger.ts
122
164
  function isInteger(value) {
@@ -459,6 +501,80 @@ function to(promise, errorExt) {
459
501
  });
460
502
  }
461
503
 
504
+ //#endregion
505
+ //#region src/utils/string/stringToNumber.ts
506
+ /**
507
+ * 从字符串中提取数字
508
+ */
509
+ function stringToNumber(value) {
510
+ const cleaned = value.replace(/[^0-9.-]/g, "");
511
+ let isDecimal = false;
512
+ let signCount = 0;
513
+ let firstIndex = -1;
514
+ const stringList = cleaned.split("").map((s, i) => {
515
+ if (s === ".") {
516
+ if (isDecimal) return "";
517
+ isDecimal = true;
518
+ return ".";
519
+ }
520
+ if (s === "-") {
521
+ firstIndex === -1 && signCount++;
522
+ return "";
523
+ }
524
+ firstIndex === -1 && (firstIndex = i);
525
+ return s;
526
+ });
527
+ const sign = signCount % 2 === 1 ? "-" : "";
528
+ if (firstIndex === -1) return sign + "0";
529
+ let result = stringList.join("");
530
+ if (result.startsWith(".")) result = "0" + result;
531
+ if (result.endsWith(".")) result = result.slice(0, -1);
532
+ return sign + result;
533
+ }
534
+
535
+ //#endregion
536
+ //#region src/utils/math/toMathBignumber.ts
537
+ /**
538
+ * 将任意类型的值转换为 `math.bignumber`
539
+ *
540
+ * @param mathJsInstance mathJs 实例
541
+ * @param value 任意类型的值
542
+ * @param saveValue 安全值
543
+ */
544
+ function toMathBignumber(mathJsInstance, value, saveValue) {
545
+ const errorValue = saveValue ?? mathJsInstance.bignumber(0);
546
+ if (isFalsy(value) || isFalsyLike(value) || isInfinity(value) || isInfinityLike(value)) return errorValue;
547
+ try {
548
+ return mathJsInstance.bignumber(stringToNumber(`${value}`));
549
+ } catch (error) {
550
+ return errorValue;
551
+ }
552
+ }
553
+
554
+ //#endregion
555
+ //#region src/utils/math/toMathDecimal.ts
556
+ function toMathDecimal(mathJsInstance, value, precision, isFormat = true) {
557
+ const bigNumber = toMathBignumber(mathJsInstance, value);
558
+ return isFormat ? mathJsInstance.format(bigNumber, {
559
+ notation: "fixed",
560
+ precision
561
+ }) : bigNumber;
562
+ }
563
+
564
+ //#endregion
565
+ //#region src/utils/math/toMathEvaluate.ts
566
+ /**
567
+ * 数学表达式求值
568
+ *
569
+ * @param mathJsInstance mathJs 实例
570
+ * @param expr 表达式
571
+ * @param scope 键值映射
572
+ */
573
+ function toMathEvaluate(mathJsInstance, expr, scope) {
574
+ const evaluateValue = `${mathJsInstance.evaluate(expr, scope || {})}`;
575
+ return mathJsInstance.format(toMathBignumber(mathJsInstance, evaluateValue), { notation: "fixed" });
576
+ }
577
+
462
578
  //#endregion
463
579
  //#region src/utils/object/cloneDeep.ts
464
580
  const DefaultCloningStrategy = {
@@ -1120,5 +1236,5 @@ function treeToRows(tree, options = {}) {
1120
1236
  }
1121
1237
 
1122
1238
  //#endregion
1123
- export { arrayCast, arrayCompete, arrayCounting, arrayDifference, arrayFirst, arrayFork, arrayIntersection, arrayLast, arrayMerge, arrayPick, arrayReplace, arraySplit, cloneDeep, enumEntries, enumKeys, enumTypeCheck, enumValues, isArray, isAsyncFunction, isBigInt, isBoolean, isClass, isDate, isEqual, isError, isFile, isFunction, isGeneratorFunction, isInteger, isIterable, isMap, isNull, isNumber, isObject, isPromise, isPromiseLike, isRegExp, isSet, isString, isSymbol, isURLSearchParams, isUndefined, isWeakMap, isWeakSet, isWebSocket, isWindow, mapEntries, objectAssign, objectEntries, objectKeys, objectPick, objectSwitch, objectValues, rowsToTree, stringInitialCase, stringReplace, stringToJson, stringToValues, to, treeFilter, treeFind, treeForEach, treeMap, treeToRows };
1239
+ export { arrayCast, arrayCompete, arrayCounting, arrayDifference, arrayFirst, arrayFork, arrayIntersection, arrayLast, arrayMerge, arrayPick, arrayReplace, arraySplit, cloneDeep, enumEntries, enumKeys, enumTypeCheck, enumValues, isArray, isAsyncFunction, isBigInt, isBoolean, isClass, isDate, isEqual, isError, isFalsy, isFalsyLike, isFile, isFunction, isGeneratorFunction, isInfinity, isInfinityLike, isInteger, isIterable, isMap, isNaN, isNull, isNumber, isObject, isPromise, isPromiseLike, isRegExp, isSet, isString, isSymbol, isURLSearchParams, isUndefined, isWeakMap, isWeakSet, isWebSocket, isWindow, mapEntries, objectAssign, objectEntries, objectKeys, objectPick, objectSwitch, objectValues, rowsToTree, stringInitialCase, stringReplace, stringToJson, stringToNumber, stringToValues, to, toMathBignumber, toMathDecimal, toMathEvaluate, treeFilter, treeFind, treeForEach, treeMap, treeToRows };
1124
1240
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["forked: [T[], T[]]","DefaultCloningStrategy: CloningStrategy","cloneDeep","strategy","preImpl","newChildren: T[] | undefined","postImpl","breadthImpl","queue: QueueItem<T, CK>[]","result: T","strategies","strategies","preImpl","postImpl","breadthImpl","queue: QueueItem<T, CK>[]","strategies","preImpl","postImpl","breadthImpl","queue: QueueItem<T, CK>[]","newChildren: TreeLike<R, CK>[] | undefined","queue: QueueItem<T, CK>[]","result: TreeLike<R, CK>","result: R[]","result: R[]"],"sources":["../src/utils/typeof/types.ts","../src/utils/typeof/isArray.ts","../src/utils/typeof/isAsyncFunction.ts","../src/utils/typeof/isBigInt.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isDate.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isError.ts","../src/utils/typeof/isFile.ts","../src/utils/typeof/isFunction.ts","../src/utils/typeof/isGeneratorFunction.ts","../src/utils/typeof/isInteger.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isIterable.ts","../src/utils/typeof/isMap.ts","../src/utils/typeof/isNull.ts","../src/utils/typeof/isNumber.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isPromiseLike.ts","../src/utils/typeof/isRegExp.ts","../src/utils/typeof/isSet.ts","../src/utils/typeof/isString.ts","../src/utils/typeof/isSymbol.ts","../src/utils/typeof/isUndefined.ts","../src/utils/typeof/isURLSearchParams.ts","../src/utils/typeof/isWeakMap.ts","../src/utils/typeof/isWeakSet.ts","../src/utils/typeof/isWebSocket.ts","../src/utils/typeof/isWindow.ts","../src/utils/array/arrayCast.ts","../src/utils/array/arrayCompete.ts","../src/utils/array/arrayCounting.ts","../src/utils/array/arrayDifference.ts","../src/utils/array/arrayFirst.ts","../src/utils/array/arrayFork.ts","../src/utils/array/arrayIntersection.ts","../src/utils/array/arrayLast.ts","../src/utils/array/arrayMerge.ts","../src/utils/array/arrayPick.ts","../src/utils/array/arrayReplace.ts","../src/utils/array/arraySplit.ts","../src/utils/function/to.ts","../src/utils/object/cloneDeep.ts","../src/utils/object/objectKeys.ts","../src/utils/object/enumTypeCheck.ts","../src/utils/object/objectEntries.ts","../src/utils/object/objectValues.ts","../src/utils/object/enumEntries.ts","../src/utils/object/enumKeys.ts","../src/utils/object/enumValues.ts","../src/utils/object/mapEntries.ts","../node_modules/.pnpm/radashi@12.7.1/node_modules/radashi/dist/radashi.js","../src/utils/object/objectAssign.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectSwitch.ts","../src/utils/string/stringInitialCase.ts","../src/utils/string/stringReplace.ts","../src/utils/string/stringToJson.ts","../src/utils/string/stringToValues.ts","../src/utils/tree/types.ts","../src/utils/tree/treeFilter.ts","../src/utils/tree/treeFind.ts","../src/utils/tree/treeForEach.ts","../src/utils/tree/treeMap.ts","../src/utils/tree/rowsToTree.ts","../src/utils/tree/treeToRows.ts"],"sourcesContent":["export const prototypeStrings = {\n string: \"[object String]\",\n number: \"[object Number]\",\n boolean: \"[object Boolean]\",\n object: \"[object Object]\",\n array: \"[object Array]\",\n bigInt: \"[object BigInt]\",\n symbol: \"[object Symbol]\",\n function: \"[object Function]\",\n generatorFunction: \"[object GeneratorFunction]\",\n asyncFunction: \"[object AsyncFunction]\",\n promise: \"[object Promise]\",\n null: \"[object Null]\",\n undefined: \"[object Undefined]\",\n date: \"[object Date]\",\n regExp: \"[object RegExp]\",\n error: \"[object Error]\",\n file: \"[object File]\",\n map: \"[object Map]\",\n weakMap: \"[object WeakMap]\",\n set: \"[object Set]\",\n weakSet: \"[object WeakSet]\",\n window: \"[object Window]\",\n webSocket: \"[object WebSocket]\",\n URLSearchParams: \"[object URLSearchParams]\",\n} as const;\n\nexport function resolvePrototypeString(value: unknown) {\n return Object.prototype.toString.call(value);\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isArray<T extends unknown[]>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.array;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isAsyncFunction<T extends AsyncFunc>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.asyncFunction;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isBigInt<T extends bigint>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.bigInt;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isBoolean<T extends boolean>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.boolean;\n}\n","import type { Class } from \"type-fest\";\nimport { resolvePrototypeString } from \"./types\";\n\nexport function isClass<T extends Class<AnyObject>>(value: unknown): value is T {\n return resolvePrototypeString(value).startsWith(\"class \");\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isDate<T extends Date>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.date;\n}\n","/**\n * 判断给定的值是否相等\n * @reference https://github.com/radashi-org/radashi/blob/main/src/typed/isEqual.ts\n *\n * @param {T} x\n * @param {T} y\n */\nexport function isEqual<T>(x: T, y: T): boolean {\n if (Object.is(x, y)) {\n return true;\n }\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n if (typeof x !== \"object\" || x === null || typeof y !== \"object\" || y === null) {\n return false;\n }\n\n const keysX = Reflect.ownKeys(x) as (keyof typeof x)[];\n const keysY = Reflect.ownKeys(y);\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (const key of keysX) {\n if (!Reflect.has(y, key)) {\n return false;\n }\n if (!isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isError<T extends Error>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.error;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isFile<T extends File>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.file;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isFunction<T extends Func>(value: unknown): value is T {\n const prototypeList: string[] = [prototypeStrings.function, prototypeStrings.generatorFunction, prototypeStrings.asyncFunction];\n\n return prototypeList.includes(resolvePrototypeString(value));\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isGeneratorFunction<T extends Func>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.generatorFunction;\n}\n","export function isInteger<T extends number>(value: unknown): value is T {\n return Number.isInteger(value);\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isObject<T extends Record<PropertyKey, unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.object;\n}\n","import { isObject } from \"./isObject\";\n\nexport function isIterable<T extends Iterable<unknown>>(value: unknown): value is T {\n return isObject(value) && Symbol.iterator in value;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isMap<T extends Map<unknown, unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.map;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isNull<T extends null>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.null;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isNumber<T extends number>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.number;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isPromise<T extends Promise<unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.promise;\n}\n","import { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\nimport { isPromise } from \"./isPromise\";\n\nexport function isPromiseLike<T extends PromiseLike<unknown>>(value: unknown): value is T {\n return isPromise(value) || (isObject(value) && isFunction(value[\"then\"]));\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isRegExp<T extends RegExp>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.regExp;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isSet<T extends Set<unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.set;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isString<T extends string>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.string;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isSymbol<T extends symbol>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.symbol;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isUndefined<T extends undefined>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.undefined;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isURLSearchParams<T extends Window>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.URLSearchParams;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWeakMap<T extends WeakMap<AnyObject, unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.weakMap;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWeakSet<T extends WeakSet<AnyObject>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.weakSet;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWebSocket<T extends WebSocket>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.webSocket;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWindow<T extends Window>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.window;\n}\n","import { isArray, isNull, isUndefined } from \"../typeof\";\n\n/**\n * 构造数组\n * @param candidate 待构造项\n * @param checkEmpty 是否检查 `undefined` 和 `null`\n */\nexport function arrayCast<T>(candidate: T | T[], checkEmpty = true): T[] {\n if (checkEmpty && (isUndefined(candidate) || isNull(candidate))) {\n return [];\n }\n\n return isArray(candidate) ? [...candidate] : [candidate];\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组竞争\n * - 返回在匹配函数的比较条件中获胜的最终项目,适用于更复杂的最小值/最大值计算\n *\n * @param initialList 数组\n * @param match 匹配函数\n */\nexport function arrayCompete<T>(initialList: readonly T[], match: (a: T, b: T) => T): T | null {\n if (!isArray(initialList) || initialList.length === 0 || !isFunction(match)) {\n return null;\n }\n\n return initialList.reduce(match);\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 统计数组的项目出现次数\n * - 通过给定的标识符匹配函数,返回一个对象,其中键是回调函数返回的 key 值,每个值是一个整数,表示该 key 出现的次数\n *\n * @param initialList 初始数组\n * @param match 匹配函数\n */\nexport function arrayCounting<T, K extends PropertyKey>(initialList: readonly T[], match: (row: T) => K): Record<string, number> {\n if (!isArray(initialList) || !isFunction(match)) {\n return {};\n }\n\n return initialList.reduce<Record<string, number>>((prev, curr) => {\n const id = match(curr).toString();\n prev[id] = (prev[id] ?? 0) + 1;\n\n return prev;\n }, {});\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 求数组差集\n *\n * @param initialList 初始数组\n * @param diffList 对比数组\n * @param match 匹配函数\n */\nexport function arrayDifference<T>(initialList: readonly T[], diffList: readonly T[], match?: (row: T) => unknown): T[] {\n if (!isArray(initialList) && !isArray(diffList)) {\n return [];\n }\n if (!isArray(initialList) || !initialList.length) {\n return [...diffList];\n }\n if (!isArray(diffList) || !diffList.length) {\n return [...initialList];\n }\n if (!isFunction(match)) {\n const arraySet = new Set(diffList);\n\n return Array.from(new Set(initialList.filter((item) => !arraySet.has(item))));\n }\n\n const map = new Map<unknown, boolean>();\n\n diffList.forEach((item) => {\n map.set(match(item), true);\n });\n\n return initialList.filter((a) => !map.get(match(a)));\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 获取数组第一项\n *\n * @param initialList 初始数组\n * @param saveValue 安全值\n */\nexport function arrayFirst<T>(initialList: readonly T[], saveValue?: T): T | undefined {\n if (!isArray(initialList) || initialList.length === 0) {\n return saveValue;\n }\n\n return initialList[0];\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 数组分组过滤\n * - 给定一个数组和一个条件,返回一个由两个数组组成的元组,其中第一个数组包含所有满足条件的项,第二个数组包含所有不满足条件的项\n *\n * @param initialList 初始数组\n * @param match 条件匹配函数\n */\nexport function arrayFork<T>(initialList: readonly T[], match: (item: T) => boolean): [T[], T[]] {\n const forked: [T[], T[]] = [[], []];\n\n if (isArray(initialList)) {\n for (const item of initialList) {\n forked[match(item) ? 0 : 1].push(item);\n }\n }\n\n return forked;\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 求数组交集\n *\n * @param initialList 初始数组\n * @param diffList 对比数组\n * @param match 匹配函数\n */\nexport function arrayIntersection<T>(initialList: readonly T[], diffList: readonly T[], match?: (row: T) => unknown): T[] {\n if (!isArray(initialList) && !isArray(diffList)) {\n return [];\n }\n if (!isArray(initialList) || !initialList.length) {\n return [...diffList];\n }\n if (!isArray(diffList) || !diffList.length) {\n return [...initialList];\n }\n if (!isFunction(match)) {\n const arraySet = new Set(diffList);\n\n return Array.from(new Set(initialList.filter((item) => arraySet.has(item))));\n }\n\n const map = new Map<unknown, boolean>();\n\n diffList.forEach((item) => {\n map.set(match(item), true);\n });\n\n return initialList.filter((a) => map.get(match(a)));\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 获取数组最后一项\n *\n * @param initialList 初始数组\n * @param saveValue 安全值\n */\nexport function arrayLast<T>(initialList: readonly T[], saveValue?: T): T | undefined {\n if (!isArray(initialList) || initialList.length === 0) {\n return saveValue;\n }\n\n return initialList[initialList.length - 1];\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组合并\n * - 通过给定的标识符匹配函数,用第二个数组中的匹配项替换第一个数组中匹配项的所有内容\n *\n * @param initialList 初始数组\n * @param mergeList 待合并数组\n * @param match 匹配函数\n */\nexport function arrayMerge<T>(initialList: readonly T[], mergeList: readonly T[], match?: (item: T) => unknown): T[] {\n if (!isArray(initialList)) {\n return [];\n }\n if (!isArray(mergeList)) {\n return [...initialList];\n }\n if (!isFunction(match)) {\n return Array.from(new Set([...initialList, ...mergeList]));\n }\n\n const keys = new Map();\n for (const item of mergeList) {\n keys.set(match(item), item);\n }\n\n return initialList.map((prevItem) => {\n const key = match(prevItem);\n\n return keys.has(key) ? keys.get(key)! : prevItem;\n });\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组选择\n * - 一次性应用 `filter` 和 `map` 操作\n *\n * @param initialList 初始数组\n * @param filter filter 函数\n * @param mapper map 函数\n */\nexport function arrayPick<T, K = T>(initialList: readonly T[], filter: (row: T, index: number) => boolean, mapper?: ((row: T, index: number) => K) | undefined) {\n if (!isArray(initialList)) {\n return [];\n }\n if (!isFunction(filter)) {\n return [...initialList];\n }\n\n const hasMapper = isFunction(mapper);\n\n return initialList.reduce<K[]>((prev, curr, index) => {\n if (!filter(curr, index)) {\n return prev;\n }\n if (hasMapper) {\n prev.push(mapper(curr, index));\n } else {\n prev.push(curr as unknown as K);\n }\n\n return prev;\n }, []);\n}\n","import { isFunction } from \"../typeof\";\n\n/**\n * 数组项替换\n * - 在给定的数组中,替换符合匹配函数结果的项目。只替换第一个匹配项。始终返回原始数组的副本。\n *\n * @param initialList 初始数组\n * @param newItem 替换项\n * @param match 匹配函数\n */\nexport function arrayReplace<T>(initialList: readonly T[], newItem: T, match: (row: T, index: number) => boolean): T[] {\n if (!initialList) {\n return [];\n }\n if (newItem === undefined || !isFunction(match)) {\n return [...initialList];\n }\n\n for (let i = 0; i < initialList.length; i++) {\n const item = initialList[i];\n\n if (item !== undefined && match(item, i)) {\n return [...initialList.slice(0, i), newItem, ...initialList.slice(i + 1, initialList.length)];\n }\n }\n\n return [...initialList];\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 数组切分\n * - 将数组以指定的长度切分后,组合在高维数组中\n *\n * @param initialList 初始数组\n * @param size 分割尺寸,默认 `10`\n */\nexport function arraySplit<T>(initialList: readonly T[], size = 10): T[][] {\n if (!isArray(initialList)) {\n return [];\n }\n\n const count = Math.ceil(initialList.length / size);\n\n return Array.from({ length: count })\n .fill(null)\n .map((_c, i) => {\n return initialList.slice(i * size, i * size + size);\n });\n}\n","/**\n * @param promise\n * @param errorExt - 可以传递给err对象的其他信息\n */\nexport function to<T, U = Error>(\n promise: Readonly<Promise<T>>,\n errorExt?: UnknownObject,\n): Promise<[U, undefined] | [null, T]> {\n return promise\n .then<[null, T]>((data: T) => [null, data])\n .catch<[U, undefined]>((err: U) => {\n if (errorExt) {\n const parsedError = { ...err, ...errorExt };\n\n return [parsedError, undefined];\n }\n\n const defaultError = err ? err : new Error(\"defaultError\");\n\n return [defaultError as U, undefined];\n });\n}\n","import { isArray, isMap, isObject, isSet } from \"../typeof\";\n\ninterface CloningStrategy {\n cloneMap: <K, V>(parent: Map<K, V>, track: (newParent: Map<K, V>) => Map<K, V>, clone: <T>(value: T) => T) => Map<K, V> | null;\n cloneSet: <T>(parent: Set<T>, track: (newParent: Set<T>) => Set<T>, clone: <T>(value: T) => T) => Set<T> | null;\n cloneArray: <T>(parent: readonly T[], track: (newParent: T[]) => T[], clone: <T>(value: T) => T) => T[] | null;\n cloneObject: <T extends AnyObject>(parent: T, track: (newParent: T) => T, clone: <T>(value: T) => T) => T | null;\n cloneOther: <T>(parent: T, track: (newParent: T) => T, clone: <T>(value: T) => T) => T | null;\n}\n\nconst DefaultCloningStrategy: CloningStrategy = {\n cloneMap<K, V>(input: Map<K, V>, track: (newParent: Map<K, V>) => Map<K, V>, clone: <T>(value: T) => T): Map<K, V> {\n const output = track(new Map());\n for (const [key, value] of input) {\n output.set(key, clone(value));\n }\n\n return output;\n },\n cloneSet<T>(input: Set<T>, track: (newParent: Set<T>) => Set<T>, clone: <T>(value: T) => T): Set<T> {\n const output = track(new Set());\n for (const value of input) {\n output.add(clone(value));\n }\n\n return output;\n },\n cloneArray<T>(input: readonly T[], track: (newParent: T[]) => T[], clone: <T>(value: T) => T): T[] {\n // Use .forEach for correct handling of sparse arrays\n const output = track(new Array(input.length));\n input.forEach((value, index) => {\n output[index] = clone(value);\n });\n\n return output;\n },\n cloneObject<T extends AnyObject>(input: T, track: (newParent: T) => T, clone: <T>(value: T) => T): T {\n const output = track(Object.create(Object.getPrototypeOf(input)));\n for (const key of Reflect.ownKeys(input)) {\n // By copying the property descriptors, we preserve computed\n // properties and non-enumerable properties.\n const descriptor = Object.getOwnPropertyDescriptor(input, key)!;\n if (\"value\" in descriptor) {\n descriptor.value = clone(descriptor.value);\n }\n Object.defineProperty(output, key, descriptor);\n }\n\n return output;\n },\n cloneOther<T>(input: T, track: (newParent: T) => T): T {\n return track(input);\n },\n};\n\n\n/**\n * cloneDeep\n * @reference https://github.com/radashi-org/radashi/blob/main/src/object/cloneDeep.ts\n */\nexport function cloneDeep<T extends AnyObject>(root: T, customStrategy?: Partial<CloningStrategy>): T {\n const strategy = { ...DefaultCloningStrategy, ...customStrategy };\n\n const tracked = new Map<unknown, unknown>();\n const track = (parent: unknown, newParent: unknown) => {\n tracked.set(parent, newParent);\n\n return newParent;\n };\n\n const clone = <T>(value: T): T => {\n return value && typeof value === \"object\" ? ((tracked.get(value) ?? cloneDeep(value, strategy)) as T) : value;\n };\n\n const cloneDeep = (parent: unknown, strategy: CloningStrategy): unknown => {\n const cloneParent = (\n isObject(parent)\n ? strategy.cloneObject\n : isArray(parent)\n ? strategy.cloneArray\n : isMap(parent)\n ? strategy.cloneMap\n : isSet(parent)\n ? strategy.cloneSet\n : strategy.cloneOther\n ) as (newParent: unknown, track: (newParent: unknown) => unknown, clone: (value: unknown) => unknown) => unknown;\n\n const newParent = cloneParent(parent, track.bind(null, parent), clone);\n if (!newParent) {\n // Use the default strategy if null is returned.\n return cloneDeep(parent, DefaultCloningStrategy);\n }\n\n tracked.set(parent, newParent);\n\n return newParent;\n };\n\n return cloneDeep(root, strategy) as T;\n}\n","/**\n * 返回对象的可枚举属性和方法的名称\n * - `Object.keys` 始终返回 `string[]` 类型,此函数可以返回具体类型\n *\n * @param obj 对象\n */\nexport function objectKeys<O extends AnyObject>(obj: O): (keyof O)[] {\n return Object.keys(obj);\n}\n","import { isObject } from \"../typeof\";\nimport { objectKeys } from \"./objectKeys\";\n\nexport function enumTypeCheck<E extends AnyObject>(enumeration: E) {\n if (!isObject(enumeration)) {\n throw Error(`function enumKeys expected parameter is a enum, but got ${typeof enumeration}`);\n }\n\n if (!objectKeys(enumeration).length) {\n throw Error(\"Enum requires at least one member\");\n }\n\n return enumeration;\n}\n","/**\n * 返回对象的可枚举属性的键/值数组\n *\n * @param obj 对象\n */\nexport function objectEntries<O extends AnyObject>(obj: O): [string & keyof O, O[keyof O]][] {\n return Object.entries(obj);\n}\n","import type { UnionToTuple, ValueOf } from \"type-fest\";\n\n/**\n * 返回对象的可枚举属性的值数组\n *\n * @param obj 对象\n */\nexport function objectValues<O extends AnyObject>(obj: O): UnionToTuple<ValueOf<O>> {\n return Object.values(obj) as UnionToTuple<ValueOf<O>>;\n}\n","import type { NonEmptyObject } from \"type-fest\";\nimport { enumTypeCheck } from \"./enumTypeCheck\";\nimport { objectEntries } from \"./objectEntries\";\nimport { objectKeys } from \"./objectKeys\";\nimport { objectValues } from \"./objectValues\";\n\n/**\n * 返回枚举的属性的键/值数组\n *\n * @param enumeration 枚举\n */\nexport function enumEntries<E extends AnyObject>(enumeration: NonEmptyObject<E>): [keyof E, E[keyof E]][] {\n const e = enumTypeCheck(enumeration);\n const keys = objectKeys(e) as [keyof E, ...(keyof E)[]];\n const values = objectValues(e);\n const entries = objectEntries(e);\n const isTwoWayEnum = keys.every((k) => values.some((v) => `${v}` === k));\n\n if (isTwoWayEnum) {\n return entries.splice(keys.length / 2, keys.length / 2);\n }\n\n return entries;\n}\n","import type { NonEmptyObject } from \"type-fest\";\nimport { enumTypeCheck } from \"./enumTypeCheck\";\nimport { objectKeys } from \"./objectKeys\";\nimport { objectValues } from \"./objectValues\";\n\n/**\n * 获取枚举所有属性的键\n *\n * @param enumeration 枚举\n */\nexport function enumKeys<E extends AnyObject>(enumeration: NonEmptyObject<E>): [keyof E, ...(keyof E)[]] {\n const e = enumTypeCheck(enumeration);\n const keys = objectKeys(e) as [keyof E, ...(keyof E)[]];\n const values = objectValues(e);\n const isTwoWayEnum = keys.every((k) => values.some((v) => `${v}` === k));\n\n if (isTwoWayEnum) {\n return keys.splice(keys.length / 2, keys.length / 2) as [keyof E, ...(keyof E)[]];\n }\n\n return keys;\n}\n","import type { NonEmptyObject, UnionToTuple, ValueOf } from \"type-fest\";\nimport { enumTypeCheck } from \"./enumTypeCheck\";\nimport { objectKeys } from \"./objectKeys\";\nimport { objectValues } from \"./objectValues\";\n\n/**\n * 获取枚举所有属性的值\n *\n * @param enumeration 枚举\n */\nexport function enumValues<E extends AnyObject>(enumeration: NonEmptyObject<E>): UnionToTuple<ValueOf<E>> {\n const e = enumTypeCheck(enumeration);\n const keys = objectKeys(e) as [keyof E, ...(keyof E)[]];\n const values = objectValues(e);\n const isTwoWayEnum = keys.every((k) => values.some((v) => `${v}` === k));\n\n if (isTwoWayEnum) {\n return values.splice(keys.length / 2, keys.length / 2) as UnionToTuple<ValueOf<E>>;\n }\n\n return values;\n}\n","import { objectEntries } from \"./objectEntries\";\n\nexport function mapEntries<TKey extends PropertyKey, TValue, TNewKey extends PropertyKey, TNewValue>(\n obj: UnknownObject<TKey, TValue>,\n toEntry: (key: TKey, value: TValue) => [TNewKey, TNewValue],\n): UnknownObject<TNewKey, TNewValue> {\n const defaultResult = {} as UnknownObject<TNewKey, TNewValue>;\n\n if (!obj) {\n return defaultResult;\n }\n\n return objectEntries(obj).reduce((acc, [key, value]) => {\n const [newKey, newValue] = toEntry(key, value);\n acc[newKey] = newValue;\n\n return acc;\n }, defaultResult);\n}\n","// src/array/alphabetical.ts\nfunction alphabetical(array, getter, direction = \"asc\") {\n if (!array) {\n return [];\n }\n const asc = (a, b) => `${getter(a)}`.localeCompare(getter(b));\n const dsc = (a, b) => `${getter(b)}`.localeCompare(getter(a));\n return array.slice().sort(direction === \"desc\" ? dsc : asc);\n}\n\n// src/array/boil.ts\nfunction boil(array, compareFunc) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n return array.reduce(compareFunc);\n}\n\n// src/array/cartesianProduct.ts\nfunction cartesianProduct(...arrays) {\n let out = [[]];\n for (const array of arrays) {\n const result = [];\n for (const currentArray of out) {\n for (const item of array) {\n const currentArrayCopy = currentArray.slice();\n currentArrayCopy.push(item);\n result.push(currentArrayCopy);\n }\n }\n out = result;\n }\n return out;\n}\n\n// src/array/castArray.ts\nfunction castArray(value) {\n return Array.isArray(value) ? value.slice() : [value];\n}\n\n// src/array/castArrayIfExists.ts\nfunction castArrayIfExists(value) {\n return Array.isArray(value) ? value.slice() : value != null ? [value] : value;\n}\n\n// src/array/cluster.ts\nfunction cluster(array, size = 2) {\n const clusters = [];\n if (size > 0) {\n for (let i = 0; i < array.length; i += size) {\n clusters.push(array.slice(i, i + size));\n }\n }\n return clusters;\n}\n\n// src/array/concat.ts\nfunction concat(...values) {\n const result = [];\n const append = (value) => value != null && result.push(value);\n for (const value of values) {\n if (Array.isArray(value)) {\n value.forEach(append);\n } else {\n append(value);\n }\n }\n return result;\n}\n\n// src/array/counting.ts\nfunction counting(array, identity2) {\n if (!array) {\n return {};\n }\n return array.reduce(\n (acc, item) => {\n const id = identity2(item);\n acc[id] = (acc[id] ?? 0) + 1;\n return acc;\n },\n {}\n );\n}\n\n// src/array/diff.ts\nfunction diff(root, other, identity2 = (t) => t) {\n if (!(root == null ? void 0 : root.length) && !(other == null ? void 0 : other.length)) {\n return [];\n }\n if ((root == null ? void 0 : root.length) === void 0) {\n return [...other];\n }\n if (!(other == null ? void 0 : other.length)) {\n return [...root];\n }\n const bKeys = other.reduce(\n (acc, item) => {\n acc[identity2(item)] = true;\n return acc;\n },\n {}\n );\n return root.filter((a) => !bKeys[identity2(a)]);\n}\n\n// src/array/first.ts\nfunction first(array, defaultValue) {\n return (array == null ? void 0 : array.length) > 0 ? array[0] : defaultValue;\n}\n\n// src/array/flat.ts\nfunction flat(lists) {\n return lists.reduce((acc, list2) => {\n acc.push(...list2);\n return acc;\n }, []);\n}\n\n// src/array/fork.ts\nfunction fork(array, condition) {\n const forked = [[], []];\n if (array) {\n for (const item of array) {\n forked[condition(item) ? 0 : 1].push(item);\n }\n }\n return forked;\n}\n\n// src/array/group.ts\nfunction group(array, getGroupId) {\n const groups = /* @__PURE__ */ Object.create(null);\n array.forEach((item, index) => {\n const groupId = getGroupId(item, index);\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n groups[groupId].push(item);\n });\n return groups;\n}\n\n// src/array/intersects.ts\nfunction intersects(listA, listB, identity2) {\n if (!listA || !listB) {\n return false;\n }\n if (identity2) {\n const known = new Set(listA.map(identity2));\n return listB.some((item) => known.has(identity2(item)));\n }\n return listB.some((item) => listA.includes(item));\n}\n\n// src/array/isArrayEqual.ts\nfunction isArrayEqual(array1, array2) {\n if (array1 !== array2) {\n if (array1.length !== array2.length) {\n return false;\n }\n for (let i = 0; i < array1.length; i++) {\n if (!Object.is(array1[i], array2[i])) {\n return false;\n }\n }\n }\n return true;\n}\n\n// src/array/iterate.ts\nfunction iterate(count, func, initValue) {\n let value = initValue;\n for (let i = 1; i <= count; i++) {\n value = func(value, i);\n }\n return value;\n}\n\n// src/array/last.ts\nfunction last(array, defaultValue) {\n return (array == null ? void 0 : array.length) > 0 ? array[array.length - 1] : defaultValue;\n}\n\n// src/array/list.ts\nfunction list(startOrLength, end, valueOrMapper, step) {\n return Array.from(range(startOrLength, end, valueOrMapper, step));\n}\n\n// src/array/mapify.ts\nfunction mapify(array, getKey, getValue = (item) => item) {\n const map2 = /* @__PURE__ */ new Map();\n for (const [index, item] of array.entries()) {\n map2.set(getKey(item, index), getValue(item, index));\n }\n return map2;\n}\n\n// src/array/merge.ts\nfunction merge(prev, array, toKey) {\n if (!array && !prev) {\n return [];\n }\n if (!array) {\n return [...prev];\n }\n if (!prev) {\n return [];\n }\n if (!toKey) {\n return [...prev];\n }\n const keys2 = /* @__PURE__ */ new Map();\n for (const item of array) {\n keys2.set(toKey(item), item);\n }\n return prev.map((prevItem) => {\n const key = toKey(prevItem);\n return keys2.has(key) ? keys2.get(key) : prevItem;\n });\n}\n\n// src/array/objectify.ts\nfunction objectify(array, getKey, getValue = (item) => item) {\n return array.reduce(\n (acc, item, i) => {\n acc[getKey(item, i)] = getValue(item, i);\n return acc;\n },\n {}\n );\n}\n\n// src/array/pluck.ts\nfunction pluck(array, mappings) {\n return array.map(\n mappings ? (item) => mappings.map(\n (mapping) => isFunction(mapping) ? mapping(item) : item[mapping]\n ) : Object.values\n );\n}\n\n// src/array/remove.ts\nfunction remove(array, predicate) {\n return array.filter((item) => !predicate(item));\n}\n\n// src/array/replace.ts\nfunction replace(array, newItem, match) {\n if (!array) {\n return [];\n }\n if (newItem === void 0) {\n return [...array];\n }\n const out = array.slice();\n for (let index = 0; index < array.length; index++) {\n if (match(array[index], index)) {\n out[index] = newItem;\n break;\n }\n }\n return out;\n}\n\n// src/array/replaceOrAppend.ts\nfunction replaceOrAppend(array, newItem, match) {\n if (!array && !newItem) {\n return [];\n }\n if (!newItem) {\n return [...array];\n }\n if (!array) {\n return [newItem];\n }\n const out = array.slice();\n for (let index = 0; index < array.length; index++) {\n if (match(array[index], index)) {\n out[index] = newItem;\n return out;\n }\n }\n out.push(newItem);\n return out;\n}\n\n// src/array/select.ts\nfunction select(array, mapper, condition) {\n if (!array) {\n return [];\n }\n let mapped;\n return array.reduce((acc, item, index) => {\n if (condition) {\n condition(item, index) && acc.push(mapper(item, index));\n } else if ((mapped = mapper(item, index)) != null) {\n acc.push(mapped);\n }\n return acc;\n }, []);\n}\n\n// src/array/selectFirst.ts\nfunction selectFirst(array, mapper, condition) {\n if (!array) {\n return void 0;\n }\n let foundIndex = -1;\n const found = array.find((item, index) => {\n foundIndex = index;\n return condition ? condition(item, index) : mapper(item, index) != null;\n });\n return found === void 0 ? void 0 : mapper(found, foundIndex);\n}\n\n// src/array/shift.ts\nfunction shift(arr, n) {\n if (arr.length === 0) {\n return [...arr];\n }\n const shiftNumber = n % arr.length;\n if (shiftNumber === 0) {\n return [...arr];\n }\n return [...arr.slice(-shiftNumber, arr.length), ...arr.slice(0, -shiftNumber)];\n}\n\n// src/array/sift.ts\nfunction sift(array) {\n return (array == null ? void 0 : array.filter((x) => !!x)) ?? [];\n}\n\n// src/array/sort.ts\nfunction sort(array, getter = identity, desc = false) {\n if (!array) {\n return [];\n }\n const asc = (a, b) => getter(a) - getter(b);\n const dsc = (a, b) => getter(b) - getter(a);\n return array.slice().sort(desc === true ? dsc : asc);\n}\n\n// src/array/toggle.ts\nfunction toggle(array, item, toKey, options) {\n if (!array) {\n return item !== void 0 ? [item] : [];\n }\n if (item === void 0) {\n return [...array];\n }\n let matcher;\n if (toKey) {\n const key = toKey(item, -1);\n matcher = (x, idx) => toKey(x, idx) === key;\n } else {\n matcher = (x) => x === item;\n }\n const existing = array.find(matcher);\n if (existing !== void 0) {\n return array.filter((x, idx) => !matcher(x, idx));\n }\n return (options == null ? void 0 : options.strategy) === \"prepend\" ? [item, ...array] : [...array, item];\n}\n\n// src/array/unique.ts\nfunction unique(array, toKey) {\n if (toKey) {\n const keys2 = /* @__PURE__ */ new Set();\n return array.reduce((acc, item) => {\n const key = toKey(item);\n if (!keys2.has(key)) {\n keys2.add(key);\n acc.push(item);\n }\n return acc;\n }, []);\n }\n return [...new Set(array)];\n}\n\n// src/array/unzip.ts\nfunction unzip(arrays) {\n if (!arrays || !arrays.length) {\n return [];\n }\n const out = new Array(\n arrays.reduce((max2, arr) => Math.max(max2, arr.length), 0)\n );\n let index = 0;\n const get2 = (array) => array[index];\n for (; index < out.length; index++) {\n out[index] = Array.from(arrays, get2);\n }\n return out;\n}\n\n// src/array/zip.ts\nfunction zip(...arrays) {\n return unzip(arrays);\n}\n\n// src/array/zipToObject.ts\nfunction zipToObject(keys2, values) {\n if (!keys2 || !keys2.length) {\n return {};\n }\n const getValue = isFunction(values) ? values : isArray(values) ? (_k, i) => values[i] : (_k, _i) => values;\n return keys2.reduce(\n (acc, key, idx) => {\n acc[key] = getValue(key, idx);\n return acc;\n },\n {}\n );\n}\n\n// src/async/all.ts\nasync function all(input) {\n const errors = [];\n const onError = (err) => {\n errors.push(err);\n };\n let output;\n if (isArray(input)) {\n output = await Promise.all(\n input.map((value) => Promise.resolve(value).catch(onError))\n );\n } else {\n output = { ...input };\n await Promise.all(\n Object.keys(output).map(async (key) => {\n output[key] = await Promise.resolve(output[key]).catch(onError);\n })\n );\n }\n if (errors.length > 0) {\n throw new AggregateErrorOrPolyfill(errors);\n }\n return output;\n}\n\n// src/async/defer.ts\nasync function defer(func) {\n const callbacks = [];\n const register = (fn, options) => callbacks.push({\n fn,\n rethrow: (options == null ? void 0 : options.rethrow) ?? false\n });\n const [err, response] = await tryit(func)(register);\n for (const { fn, rethrow } of callbacks) {\n const [rethrown] = await tryit(fn)(err);\n if (rethrown && rethrow) {\n throw rethrown;\n }\n }\n if (err) {\n throw err;\n }\n return response;\n}\n\n// src/async/guard.ts\nfunction guard(func, shouldGuard) {\n const onError = (err) => {\n if (shouldGuard && !shouldGuard(err)) {\n throw err;\n }\n };\n try {\n const result = func();\n return result instanceof Promise ? result.catch(onError) : result;\n } catch (err) {\n return onError(err);\n }\n}\n\n// src/async/map.ts\nasync function map(array, asyncMapFunc) {\n if (!array) {\n return [];\n }\n const result = [];\n let index = 0;\n for (const value of array) {\n const newValue = await asyncMapFunc(value, index++);\n result.push(newValue);\n }\n return result;\n}\n\n// src/async/parallel.ts\nasync function parallel(options, array, func) {\n if (!array.length) {\n return [];\n }\n const work = array.map((item, index) => ({\n index,\n item\n }));\n let signal;\n if (isNumber(options)) {\n options = {\n limit: options\n };\n } else {\n signal = options.signal;\n signal == null ? void 0 : signal.throwIfAborted();\n }\n const processor = async (resolve) => {\n const results2 = [];\n while (!(signal == null ? void 0 : signal.aborted)) {\n const next = work.pop();\n if (!next) {\n break;\n }\n const [error, result] = await tryit(func)(next.item);\n results2.push({\n error,\n result,\n index: next.index\n });\n }\n return resolve(results2);\n };\n const queues = Promise.all(\n list(1, clamp(options.limit, 1, array.length)).map(\n () => new Promise(processor)\n )\n );\n let signalPromise;\n if (signal) {\n signalPromise = new Promise((_, reject) => {\n const onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort);\n queues.then(() => signal.removeEventListener(\"abort\", onAbort));\n });\n }\n const itemResults = await (signalPromise ? Promise.race([queues, signalPromise]) : queues);\n const [errors, results] = fork(\n sort(flat(itemResults), (r) => r.index),\n (x) => !!x.error\n );\n if (errors.length > 0) {\n throw new AggregateErrorOrPolyfill(errors.map((error) => error.error));\n }\n return results.map((r) => r.result);\n}\n\n// src/async/queueByKey.ts\nfunction queueByKey(asyncFn, keyFn) {\n const queues = /* @__PURE__ */ new Map();\n return async (...args) => {\n const key = keyFn(...args);\n const next = () => asyncFn(...args);\n const queue = (queues.get(key) || Promise.resolve()).then(next, next);\n queues.set(key, queue);\n const cleanup = () => queues.get(key) === queue && queues.delete(key);\n queue.then(cleanup, cleanup);\n return queue;\n };\n}\n\n// src/async/reduce.ts\nasync function reduce(array, reducer, initialValue) {\n if (!array) {\n array = [];\n }\n let index = 0;\n let acc = initialValue;\n if (acc === void 0 && arguments.length < 3) {\n if (!array.length) {\n throw new TypeError(\"Reduce of empty array with no initial value\");\n }\n acc = array[index++];\n }\n while (index < array.length) {\n acc = await reducer(acc, array[index], index++);\n }\n return acc;\n}\n\n// src/async/retry.ts\nasync function retry(options, func) {\n const times = (options == null ? void 0 : options.times) ?? 3;\n const delay = options == null ? void 0 : options.delay;\n const backoff = (options == null ? void 0 : options.backoff) ?? null;\n const signal = options == null ? void 0 : options.signal;\n let i = 0;\n while (true) {\n const [err, result] = await tryit(func)((err2) => {\n throw { _exited: err2 };\n });\n signal == null ? void 0 : signal.throwIfAborted();\n if (!err) {\n return result;\n }\n if (err._exited) {\n throw err._exited;\n }\n if (++i >= times) {\n throw err;\n }\n if (delay) {\n await sleep(delay);\n }\n if (backoff) {\n await sleep(backoff(i));\n }\n }\n}\n\n// src/async/sleep.ts\nfunction sleep(milliseconds) {\n return new Promise((res) => setTimeout(res, milliseconds));\n}\n\n// src/async/timeout.ts\nfunction timeout(ms, error) {\n return new Promise(\n (_, reject) => setTimeout(\n () => reject(isFunction(error) ? error() : new TimeoutError(error)),\n ms\n )\n );\n}\n\n// src/async/toResult.ts\nasync function toResult(promise) {\n try {\n const result = await promise;\n return [void 0, result];\n } catch (error) {\n if (isError(error)) {\n return [error, void 0];\n }\n throw error;\n }\n}\n\n// src/async/tryit.ts\nfunction tryit(func) {\n return (...args) => {\n try {\n const result = func(...args);\n return isPromise(result) ? result.then(\n (value) => [void 0, value],\n (err) => [err, void 0]\n ) : [void 0, result];\n } catch (err) {\n return [err, void 0];\n }\n };\n}\n\n// src/async/withResolvers.ts\nfunction withResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { resolve, reject, promise };\n}\n\n// src/curry/callable.ts\nfunction callable(obj, fn) {\n return new Proxy(Object.assign(fn.bind(null), obj), {\n get: (target, key) => target[key],\n set: (target, key, value) => {\n target[key] = value;\n return true;\n },\n apply: (target, _, args) => fn(Object.assign({}, target))(...args)\n });\n}\n\n// src/curry/chain.ts\nfunction chain(...funcs) {\n return (...args) => {\n return funcs.slice(1).reduce((acc, fn) => fn(acc), funcs[0](...args));\n };\n}\n\n// src/curry/compose.ts\nfunction compose(...funcs) {\n return funcs.reverse().reduce((acc, fn) => fn(acc));\n}\n\n// src/curry/debounce.ts\nfunction debounce({ delay, leading }, func) {\n let timer = void 0;\n let active = true;\n const debounced = (...args) => {\n if (active) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n active && func(...args);\n timer = void 0;\n }, delay);\n if (leading) {\n func(...args);\n leading = false;\n }\n } else {\n func(...args);\n }\n };\n debounced.isPending = () => {\n return timer !== void 0;\n };\n debounced.cancel = () => {\n active = false;\n };\n debounced.flush = (...args) => func(...args);\n return debounced;\n}\n\n// src/curry/flip.ts\nfunction flip(fn) {\n return (arg2, arg1, ...args) => fn(arg1, arg2, ...args);\n}\n\n// src/curry/memo.ts\nfunction memoize(cache, func, keyFunc, ttl) {\n return function callWithMemo(...args) {\n const key = keyFunc ? keyFunc(...args) : JSON.stringify({ args });\n const existing = cache[key];\n if (existing !== void 0) {\n if (!existing.exp) {\n return existing.value;\n }\n if (existing.exp > (/* @__PURE__ */ new Date()).getTime()) {\n return existing.value;\n }\n }\n const result = func(...args);\n cache[key] = {\n exp: ttl ? (/* @__PURE__ */ new Date()).getTime() + ttl : null,\n value: result\n };\n return result;\n };\n}\nfunction memo(func, options = {}) {\n return memoize({}, func, options.key ?? null, options.ttl ?? null);\n}\n\n// src/curry/memoLastCall.ts\nfunction memoLastCall(fn) {\n let lastArgs = null;\n let lastResult = null;\n return (...args) => {\n if (lastArgs && lastArgs.length === args.length && lastArgs.every((arg, i) => Object.is(arg, args[i]))) {\n return lastResult;\n }\n const result = fn(...args);\n lastArgs = args;\n lastResult = result;\n return result;\n };\n}\n\n// src/curry/once.ts\nvar once = /* @__PURE__ */ (() => {\n const onceSymbol = /* @__PURE__ */ Symbol();\n const once2 = (fn) => {\n const onceFn = function(...args) {\n if (onceFn[onceSymbol] === onceSymbol) {\n onceFn[onceSymbol] = fn.apply(this, args);\n }\n return onceFn[onceSymbol];\n };\n onceFn[onceSymbol] = onceSymbol;\n return onceFn;\n };\n once2.reset = (fn) => {\n fn[onceSymbol] = onceSymbol;\n };\n return once2;\n})();\n\n// src/curry/partial.ts\nfunction partial(fn, ...args) {\n return (...rest) => fn(...[...args, ...rest]);\n}\n\n// src/curry/partob.ts\nfunction partob(fn, argObj) {\n return (restObj) => fn({ ...argObj, ...restObj });\n}\n\n// src/curry/promiseChain.ts\nfunction promiseChain(...funcs) {\n return async (...args) => {\n let result = await funcs[0](...args);\n for (let i = 1; i < funcs.length; i++) {\n result = await funcs[i](result);\n }\n return result;\n };\n}\n\n// src/curry/proxied.ts\nfunction proxied(handler) {\n return new Proxy(\n {},\n {\n get: (target, propertyName) => handler(propertyName)\n }\n );\n}\n\n// src/curry/throttle.ts\nfunction throttle({ interval, trailing }, func) {\n let timer;\n let lastCalled = 0;\n let trailingArgs;\n const throttled = (...args) => {\n if (!isThrottled()) {\n trigger(...args);\n } else if (trailing) {\n trailingArgs = args;\n }\n };\n const isThrottled = () => Date.now() - lastCalled < interval;\n throttled.isThrottled = isThrottled;\n const trigger = throttled.trigger = (...args) => {\n func(...args);\n lastCalled = Date.now();\n if (trailing) {\n trailingArgs = void 0;\n clearTimeout(timer);\n timer = setTimeout(\n () => trailingArgs && trigger(...trailingArgs),\n interval\n );\n }\n };\n return throttled;\n}\n\n// src/function/always.ts\nfunction always(value) {\n return () => value;\n}\n\n// src/function/castComparator.ts\nfunction castComparator(mapping, compare, reverse) {\n const map2 = isFunction(mapping) ? mapping : (obj) => obj[mapping];\n const comparator = (left, right) => {\n const mappedLeft = map2(left);\n const mappedRight = map2(right);\n if (compare) {\n return compare(mappedLeft, mappedRight);\n }\n return mappedLeft > mappedRight ? 1 : mappedLeft < mappedRight ? -1 : 0;\n };\n return reverse ? flip(comparator) : comparator;\n}\n\n// src/function/castMapping.ts\nfunction castMapping(mapping) {\n return isFunction(mapping) ? mapping : mapping != null ? (input) => input[mapping] : (input) => input;\n}\n\n// src/function/identity.ts\nfunction identity(value) {\n return value;\n}\n\n// src/function/noop.ts\nfunction noop() {\n}\n\n// src/number/clamp.ts\nfunction clamp(n, min2, max2) {\n if (max2 != null && min2 != null && min2 > max2) {\n throw new Error(\"invalid clamp range\");\n }\n return max2 != null && n > max2 ? max2 : min2 != null && n < min2 ? min2 : n;\n}\n\n// src/number/inRange.ts\nfunction inRange(number, start, end) {\n const isTypeSafe = typeof number === \"number\" && typeof start === \"number\" && (typeof end === \"undefined\" || typeof end === \"number\");\n if (!isTypeSafe) {\n return false;\n }\n if (typeof end === \"undefined\") {\n end = start;\n start = 0;\n }\n return number >= Math.min(start, end) && number < Math.max(start, end);\n}\n\n// src/number/lerp.ts\nfunction lerp(from, to, amount) {\n return from + (to - from) * amount;\n}\n\n// src/number/max.ts\nfunction max(array, getter) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n const get2 = getter ?? ((v) => v);\n return array.reduce((a, b) => get2(a) > get2(b) ? a : b);\n}\n\n// src/number/min.ts\nfunction min(array, getter) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n const get2 = getter ?? ((v) => v);\n return array.reduce((a, b) => get2(a) < get2(b) ? a : b);\n}\n\n// src/number/parseDuration.ts\nfunction parseDuration(duration, options) {\n return new DurationParser(options).parse(duration);\n}\n\n// src/number/parseQuantity.ts\nfunction parseQuantity(quantity, options) {\n return new QuantityParser(options).parse(quantity);\n}\n\n// src/number/range.ts\nfunction* range(startOrLength, end, valueOrMapper = (i) => i, step = 1) {\n const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper;\n const start = end !== void 0 ? startOrLength : 0;\n const final = end ?? startOrLength;\n for (let i = start; i <= final; i += step) {\n yield mapper(i);\n }\n}\n\n// src/number/round.ts\nfunction round(value, precision, toInteger = Math.round) {\n if (precision) {\n const p = precision > 0 ? Math.min(precision, 292) : Math.max(precision, -323);\n let [q, e] = `${value}e`.split(\"e\");\n [q, e] = `${toInteger(+`${q}e${+e + p}`)}e`.split(\"e\");\n return +`${q}e${+e - p}`;\n }\n return toInteger(value);\n}\n\n// src/number/sum.ts\nfunction sum(array, fn) {\n return (array || []).reduce((acc, item) => acc + (fn ? fn(item) : item), 0);\n}\n\n// src/number/toFloat.ts\nfunction toFloat(value, defaultValue) {\n const parsedValue = isSymbol(value) ? Number.NaN : Number.parseFloat(value);\n return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;\n}\n\n// src/number/toInt.ts\nfunction toInt(value, defaultValue) {\n const parsedValue = isSymbol(value) ? Number.NaN : Number.parseInt(value);\n return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;\n}\n\n// src/object/assign.ts\nfunction assign(initial, override) {\n if (!initial || !override) {\n return initial ?? override ?? {};\n }\n const proto = Object.getPrototypeOf(initial);\n const merged = proto ? { ...initial } : Object.assign(Object.create(proto), initial);\n for (const key of Object.keys(override)) {\n merged[key] = isPlainObject(initial[key]) && isPlainObject(override[key]) ? assign(initial[key], override[key]) : override[key];\n }\n return merged;\n}\n\n// src/object/clone.ts\nfunction clone(obj) {\n if (isPrimitive(obj)) {\n return obj;\n }\n if (typeof obj === \"function\") {\n return obj.bind({});\n }\n const proto = Object.getPrototypeOf(obj);\n const newObj = typeof (proto == null ? void 0 : proto.constructor) === \"function\" ? new proto.constructor() : Object.create(proto);\n for (const key of Object.getOwnPropertyNames(obj)) {\n newObj[key] = obj[key];\n }\n return newObj;\n}\n\n// src/object/cloneDeep.ts\nvar DefaultCloningStrategy = {\n cloneMap(input, track, clone2) {\n const output = track(/* @__PURE__ */ new Map());\n for (const [key, value] of input) {\n output.set(key, clone2(value));\n }\n return output;\n },\n cloneSet(input, track, clone2) {\n const output = track(/* @__PURE__ */ new Set());\n for (const value of input) {\n output.add(clone2(value));\n }\n return output;\n },\n cloneArray(input, track, clone2) {\n const output = track(new Array(input.length));\n input.forEach((value, index) => {\n output[index] = clone2(value);\n });\n return output;\n },\n cloneObject(input, track, clone2) {\n const output = track(Object.create(Object.getPrototypeOf(input)));\n for (const key of Reflect.ownKeys(input)) {\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (\"value\" in descriptor) {\n descriptor.value = clone2(descriptor.value);\n }\n Object.defineProperty(output, key, descriptor);\n }\n return output;\n },\n cloneOther(input, track) {\n return track(input);\n }\n};\nvar FastCloningStrategy = {\n cloneObject: (input, track, clone2) => {\n const output = track({ ...input });\n for (const key of Object.keys(input)) {\n output[key] = clone2(input[key]);\n }\n return output;\n }\n};\nfunction cloneDeep(root, customStrategy) {\n const strategy = { ...DefaultCloningStrategy, ...customStrategy };\n const tracked = /* @__PURE__ */ new Map();\n const track = (parent, newParent) => {\n tracked.set(parent, newParent);\n return newParent;\n };\n const clone2 = (value) => value && typeof value === \"object\" ? tracked.get(value) ?? cloneDeep2(value, strategy) : value;\n const cloneDeep2 = (parent, strategy2) => {\n const cloneParent = isObject(parent) ? strategy2.cloneObject : isArray(parent) ? strategy2.cloneArray : isMap(parent) ? strategy2.cloneMap : isSet(parent) ? strategy2.cloneSet : strategy2.cloneOther;\n const newParent = cloneParent(parent, track.bind(null, parent), clone2);\n if (!newParent) {\n return cloneDeep2(parent, DefaultCloningStrategy);\n }\n tracked.set(parent, newParent);\n return newParent;\n };\n return cloneDeep2(root, strategy);\n}\n\n// src/object/construct.ts\nfunction construct(obj) {\n if (!obj) {\n return {};\n }\n return Object.keys(obj).reduce((acc, path) => {\n return set(acc, path, obj[path]);\n }, {});\n}\n\n// src/object/crush.ts\nfunction crush(value) {\n if (!value) {\n return {};\n }\n return function crushReducer(crushed, value2, path) {\n if (isObject(value2) || isArray(value2)) {\n for (const [prop, propValue] of Object.entries(value2)) {\n crushReducer(crushed, propValue, path ? `${path}.${prop}` : prop);\n }\n } else {\n crushed[path] = value2;\n }\n return crushed;\n }({}, value, \"\");\n}\n\n// src/object/filterKey.ts\nfunction filterKey(obj, key, filter) {\n return Object.prototype.hasOwnProperty.call(obj, key) && (filter == null || (isArray(filter) ? filter.includes(key) : filter(obj[key], key, obj)));\n}\n\n// src/object/get.ts\nfunction get(value, path, defaultValue) {\n const segments = path.split(/[\\.\\[\\]]/g);\n let current = value;\n for (const key of segments) {\n if (current === null) {\n return defaultValue;\n }\n if (current === void 0) {\n return defaultValue;\n }\n const unquotedKey = key.replace(/['\"]/g, \"\");\n if (unquotedKey.trim() === \"\") {\n continue;\n }\n current = current[unquotedKey];\n }\n if (current === void 0) {\n return defaultValue;\n }\n return current;\n}\n\n// src/object/getOrInsert.ts\nfunction getOrInsert(map2, key, value) {\n if (map2.has(key)) {\n return map2.get(key);\n }\n map2.set(key, value);\n return value;\n}\n\n// src/object/getOrInsertComputed.ts\nfunction getOrInsertComputed(map2, key, compute) {\n if (map2.has(key)) {\n return map2.get(key);\n }\n const newValue = compute();\n map2.set(key, newValue);\n return newValue;\n}\n\n// src/object/invert.ts\nfunction invert(obj) {\n if (!obj) {\n return {};\n }\n const keys2 = Object.keys(obj);\n return keys2.reduce(\n (acc, key) => {\n acc[obj[key]] = key;\n return acc;\n },\n {}\n );\n}\n\n// src/object/isDangerousKey.ts\nfunction isDangerousKey(key, object) {\n return !(object && !Object.getPrototypeOf(object)) && (key === \"__proto__\" || key === \"prototype\" || key === \"constructor\");\n}\n\n// src/object/keys.ts\nfunction keys(value) {\n if (!value) {\n return [];\n }\n const keys2 = [];\n const keyPath = [];\n const recurse = (value2) => {\n if (isPlainObject(value2)) {\n for (const [prop, propValue] of Object.entries(value2)) {\n keyPath.push(prop);\n recurse(propValue);\n keyPath.pop();\n }\n } else if (isArray(value2)) {\n value2.forEach((item, index) => {\n keyPath.push(index);\n recurse(item);\n keyPath.pop();\n });\n } else {\n keys2.push(keyPath.join(\".\"));\n }\n };\n recurse(value);\n return keys2;\n}\n\n// src/object/listify.ts\nfunction listify(obj, toItem) {\n if (!obj) {\n return [];\n }\n const entries = Object.entries(obj);\n if (entries.length === 0) {\n return [];\n }\n return entries.reduce((acc, entry) => {\n acc.push(toItem(entry[0], entry[1]));\n return acc;\n }, []);\n}\n\n// src/object/lowerize.ts\nfunction lowerize(obj) {\n return mapKeys(obj, (k) => k.toLowerCase());\n}\n\n// src/object/mapEntries.ts\nfunction mapEntries(obj, toEntry) {\n if (!obj) {\n return {};\n }\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n const [newKey, newValue] = toEntry(key, value);\n acc[newKey] = newValue;\n return acc;\n },\n {}\n );\n}\n\n// src/object/mapKeys.ts\nfunction mapKeys(obj, mapFunc) {\n const keys2 = Object.keys(obj);\n return keys2.reduce(\n (acc, key) => {\n acc[mapFunc(key, obj[key])] = obj[key];\n return acc;\n },\n {}\n );\n}\n\n// src/object/mapValues.ts\nfunction mapValues(obj, mapFunc) {\n return Object.keys(obj).reduce(\n (acc, key) => {\n acc[key] = mapFunc(obj[key], key);\n return acc;\n },\n {}\n );\n}\n\n// src/object/omit.ts\nfunction omit(obj, keys2) {\n if (!obj) {\n return {};\n }\n if (!keys2 || keys2.length === 0) {\n return obj;\n }\n return keys2.reduce(\n (acc, key) => {\n delete acc[key];\n return acc;\n },\n { ...obj }\n );\n}\n\n// src/object/pick.ts\nfunction pick(obj, filter) {\n if (!obj) {\n return {};\n }\n let keys2 = filter;\n if (isArray(filter)) {\n filter = null;\n } else {\n keys2 = Reflect.ownKeys(obj);\n }\n return keys2.reduce((acc, key) => {\n if (filterKey(obj, key, filter)) {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n}\n\n// src/object/set.ts\nfunction set(initial, path, value) {\n if (!initial) {\n return {};\n }\n if (!path || value === void 0) {\n return initial;\n }\n return function recurse(object, keys2, index) {\n const key = keys2[index];\n object ??= isIntString(key) ? [] : {};\n if (isDangerousKey(key, object)) {\n throw new Error(\"Unsafe key in path: \" + key);\n }\n if (index < keys2.length - 1) {\n value = recurse(object[key], keys2, index + 1);\n }\n if (!Object.is(object[key], value)) {\n object = clone(object);\n object[key] = value;\n }\n return object;\n }(initial, path.match(/[^.[\\]]+/g), 0);\n}\n\n// src/object/shake.ts\nfunction shake(obj, filter = (value) => value === void 0) {\n if (!obj) {\n return {};\n }\n return Object.keys(obj).reduce((acc, key) => {\n if (!filter(obj[key])) {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n}\n\n// src/object/traverse.ts\nfunction traverse(root, visitor, options, outerContext) {\n const context = outerContext ?? {\n value: null,\n key: null,\n parent: null,\n parents: [],\n path: [],\n skipped: /* @__PURE__ */ new Set(),\n skip(obj) {\n context.skipped.add(obj ?? context.value);\n }\n };\n const { rootNeedsVisit } = options ??= {};\n const ownKeys = options.ownKeys ?? Object.keys;\n const nestedOptions = {\n ...options,\n rootNeedsVisit: null\n };\n let ok = true;\n const visit = (value, key) => {\n if (context.parent.constructor === Map) {\n [key, value] = value;\n }\n context.path.push(key);\n const result = visitor(\n context.value = value,\n context.key = key,\n context.parent,\n context,\n nestedOptions\n );\n if (result === false) {\n return ok = false;\n }\n if (value !== null && typeof value === \"object\" && (isArray(value) || isPlainObject(value)) && !context.skipped.has(value) && !context.parents.includes(value)) {\n traverse2(value, result);\n }\n context.path.pop();\n return ok;\n };\n const traverse2 = (parent, parentResult) => {\n context.parents.push(parent);\n context.parent = parent;\n if (rootNeedsVisit && parent === root) {\n parentResult = visitor(\n context.value = parent,\n context.key = null,\n context.parent,\n context,\n nestedOptions\n );\n if (parentResult === false) {\n return ok;\n }\n }\n if (isArray(parent)) {\n parent.slice().forEach((value, index, values) => {\n if (visit(value, index) === false) {\n values.length = 0;\n }\n });\n } else if (parent === root && isIterable(parent)) {\n let index = 0;\n for (const value of parent) {\n if (visit(value, index) === false) {\n return ok;\n }\n index++;\n }\n } else {\n for (const key of ownKeys(parent)) {\n if (visit(parent[key], key) === false) {\n return ok;\n }\n }\n }\n context.parents.pop();\n context.parent = last(context.parents);\n if (ok && isFunction(parentResult)) {\n ok = parentResult() !== false;\n }\n return ok;\n };\n if (outerContext) {\n if (outerContext.skipped.has(root)) {\n return true;\n }\n const { value, key } = context;\n traverse2(root);\n context.value = value;\n context.key = key;\n return ok;\n }\n return traverse2(root);\n}\n\n// src/object/upperize.ts\nfunction upperize(obj) {\n return mapKeys(obj, (k) => k.toUpperCase());\n}\n\n// src/oop/AggregateError.ts\nvar AggregateErrorOrPolyfill = /* @__PURE__ */ (() => globalThis.AggregateError ?? class AggregateError extends Error {\n constructor(errors = []) {\n var _a, _b;\n super();\n const name = ((_a = errors.find((e) => e.name)) == null ? void 0 : _a.name) ?? \"\";\n this.name = `AggregateError(${name}...)`;\n this.message = `AggregateError with ${errors.length} errors`;\n this.stack = ((_b = errors.find((e) => e.stack)) == null ? void 0 : _b.stack) ?? this.stack;\n this.errors = errors;\n }\n})();\n\n// src/oop/QuantityParser.ts\nvar QuantityParser = class {\n constructor({ units, short }) {\n this.units = units;\n this.short = short;\n }\n /**\n * Parse a quantity string into its numeric value\n *\n * @throws {Error} If the quantity string is invalid or contains an unknown unit\n */\n parse(quantity) {\n var _a;\n const match = quantity.match(/^(-?\\d+(?:\\.\\d+)?) ?(\\w+)?s?$/);\n if (!match) {\n throw new Error(`Invalid quantity, cannot parse: ${quantity}`);\n }\n let unit = match[2];\n unit = ((_a = this.short) == null ? void 0 : _a[unit]) || unit;\n const count = Number.parseFloat(match[1]);\n if (Math.abs(count) > 1 && unit.endsWith(\"s\")) {\n unit = unit.substring(0, unit.length - 1);\n }\n if (!this.units[unit]) {\n throw new Error(\n `Invalid unit: ${unit}, makes sure it is one of: ${Object.keys(this.units).join(\", \")}`\n );\n }\n return count * this.units[unit];\n }\n};\n\n// src/oop/DurationParser.ts\nvar DURATION_UNITS = {\n week: 6048e5,\n day: 864e5,\n hour: 36e5,\n minute: 6e4,\n second: 1e3,\n millisecond: 1\n};\nvar DURATION_SHORT_UNITS = {\n w: \"week\",\n d: \"day\",\n h: \"hour\",\n m: \"minute\",\n s: \"second\",\n ms: \"millisecond\"\n};\nvar DurationParser = class _DurationParser extends QuantityParser {\n constructor(options) {\n super({\n units: {\n ..._DurationParser.units,\n ...options == null ? void 0 : options.units\n },\n short: {\n ..._DurationParser.shortUnits,\n ...options == null ? void 0 : options.short\n }\n });\n }\n static get units() {\n return DURATION_UNITS;\n }\n static get shortUnits() {\n return DURATION_SHORT_UNITS;\n }\n};\n\n// src/oop/Semaphore.ts\nvar SemaphorePermit = class {\n constructor(semaphore, request, weight) {\n this.semaphore = semaphore;\n this.request = request;\n this.weight = weight;\n }\n /**\n * Releases this permit back to the semaphore, allowing another\n * operation to acquire it.\n */\n release() {\n this.semaphore.release(this);\n this.release = noop;\n }\n};\nvar Semaphore = class {\n /**\n * Creates a new semaphore with the specified capacity.\n * @param maxCapacity Maximum number of permits that can be issued simultaneously\n */\n constructor(maxCapacity) {\n this.maxCapacity = maxCapacity;\n this.queue = [];\n if (maxCapacity <= 0) {\n throw new Error(\"maxCapacity must be > 0\");\n }\n this.capacity = maxCapacity;\n }\n /**\n * Number of pending acquisition requests.\n */\n get queueLength() {\n return this.queue.length;\n }\n /**\n * Acquires a permit from this semaphore, waiting if necessary until\n * one becomes available.\n * @param options.signal - The signal to abort the acquisition\n * @param options.weight - The weight of the permit to acquire\n * @returns A promise that resolves to a permit when one is\n * available\n */\n async acquire({\n signal,\n weight = 1\n } = {}) {\n if (weight <= 0) {\n throw new Error(\"weight must be > 0\");\n }\n if (weight > this.maxCapacity) {\n throw new Error(\"weight must be \\u2264 maxCapacity\");\n }\n const request = withResolvers();\n const permit = new SemaphorePermit(this, request, weight);\n if (signal) {\n const abort = () => {\n const index = this.queue.indexOf(permit);\n if (index >= 0) {\n this.queue.splice(index, 1);\n request.reject(signal.reason);\n }\n };\n signal.addEventListener(\"abort\", abort);\n const cleanup = () => {\n signal.removeEventListener(\"abort\", abort);\n };\n request.promise.then(cleanup, cleanup);\n }\n if (this.capacity < weight) {\n this.queue.push(permit);\n await request.promise;\n } else {\n this.capacity -= weight;\n }\n return permit;\n }\n /**\n * Rejects all pending acquisition requests.\n */\n reject(error) {\n this.acquire = () => Promise.reject(error);\n this.queue.forEach((permit) => permit.request.reject(error));\n this.queue = [];\n }\n /**\n * Releases a permit back to the semaphore, increasing capacity and\n * potentially fulfilling a pending acquisition request.\n */\n release(permit) {\n this.capacity += permit.weight;\n const nextPermit = this.queue[0];\n if (nextPermit && this.capacity >= nextPermit.weight) {\n this.capacity -= nextPermit.weight;\n this.queue.shift();\n nextPermit.request.resolve();\n }\n }\n};\n\n// src/oop/TimeoutError.ts\nvar TimeoutError = class extends Error {\n constructor(message) {\n super(message ?? \"Operation timed out\");\n this.name = \"TimeoutError\";\n }\n};\n\n// src/random/absoluteJitter.ts\nfunction absoluteJitter(base, offset) {\n return base + offset * (2 * Math.random() - 1);\n}\n\n// src/random/draw.ts\nfunction draw(array) {\n const max2 = array.length;\n if (max2 === 0) {\n return null;\n }\n const index = random(0, max2 - 1);\n return array[index];\n}\n\n// src/random/proportionalJitter.ts\nfunction proportionalJitter(base, factor) {\n return base * (1 - factor * (2 * Math.random() - 1));\n}\n\n// src/random/random.ts\nfunction random(min2, max2) {\n return Math.floor(Math.random() * (max2 - min2 + 1) + min2);\n}\n\n// src/random/shuffle.ts\nfunction shuffle(array, random2 = random) {\n const newArray = array.slice();\n for (let idx = array.length - 1, randomIdx, item; idx > 0; idx--) {\n randomIdx = random2(0, idx);\n item = newArray[idx];\n newArray[idx] = newArray[randomIdx];\n newArray[randomIdx] = item;\n }\n return newArray;\n}\n\n// src/random/uid.ts\nfunction uid(length, specials = \"\") {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" + specials;\n return iterate(\n length,\n (acc) => {\n return acc + characters.charAt(random(0, characters.length - 1));\n },\n \"\"\n );\n}\n\n// src/series/series.ts\nvar series = (items, toKey = (item) => `${item}`) => {\n const indexesByKey = {};\n const itemsByIndex = {};\n for (const idx of range(items.length - 1)) {\n const item = items[idx];\n indexesByKey[toKey(item)] = idx;\n itemsByIndex[idx] = item;\n }\n const first2 = () => itemsByIndex[0];\n const last2 = () => itemsByIndex[items.length - 1];\n const next = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] + 1] ?? defaultValue ?? first2();\n const previous = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] - 1] ?? defaultValue ?? last2();\n return {\n /**\n * Given two values in the series, returns the value that occurs\n * earlier in the series.\n */\n min(a, b) {\n return indexesByKey[toKey(a)] < indexesByKey[toKey(b)] ? a : b;\n },\n /**\n * Given two values in the series, returns the value that occurs\n * later in the series.\n */\n max(a, b) {\n return indexesByKey[toKey(a)] > indexesByKey[toKey(b)] ? a : b;\n },\n first: first2,\n last: last2,\n next,\n previous,\n /**\n * A more dynamic method than `next` and `previous` that lets you move\n * many times in either direction.\n *\n * ```ts\n * series(weekdays).spin('wednesday', 3) // => 'monday'\n * series(weekdays).spin('wednesday', -3) // => 'friday'\n * ```\n */\n spin(current, num) {\n if (num === 0) {\n return current;\n }\n const abs = Math.abs(num);\n const rel = abs > items.length ? abs % items.length : abs;\n return list(0, rel - 1).reduce(\n (acc) => num > 0 ? next(acc) : previous(acc),\n current\n );\n }\n };\n};\n\n// src/string/camel.ts\nfunction camel(str) {\n var _a;\n const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts.reduce((acc, part) => {\n return `${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}`;\n });\n}\n\n// src/string/capitalize.ts\nfunction capitalize(str) {\n if (!str || str.length === 0) {\n return \"\";\n }\n const lower = str.toLowerCase();\n return lower.substring(0, 1).toUpperCase() + lower.substring(1, lower.length);\n}\n\n// src/string/dash.ts\nfunction dash(str) {\n var _a;\n const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts.reduce((acc, part) => {\n return `${acc}-${part.toLowerCase()}`;\n });\n}\n\n// src/string/dedent.ts\nfunction dedent(text, ...values) {\n var _a;\n if (isArray(text)) {\n if (values.length > 0) {\n return dedent(\n text.reduce((acc, input, i) => {\n var _a2;\n let value = String(values[i] ?? \"\");\n const indent2 = value.includes(\"\\n\") && ((_a2 = input.match(/[ \\t]*(?=[^\\n]*$)/)) == null ? void 0 : _a2[0]);\n if (indent2) {\n value = value.replace(/\\n(?=[^\\n]*?\\S)/g, \"\\n\" + indent2);\n }\n return acc + input + value;\n }, \"\")\n );\n }\n text = text[0];\n }\n const indent = values[0] ?? ((_a = text.match(/^[ \\t]*(?=\\S)/m)) == null ? void 0 : _a[0]);\n const output = indent ? text.replace(new RegExp(`^${indent}`, \"gm\"), \"\") : text;\n return output.replace(/^[ \\t]*\\n|\\n[ \\t]*$/g, \"\");\n}\n\n// src/string/escapeHTML.ts\nvar htmlCharacters = /[&<>\"']/g;\nvar replacements = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#39;\"\n};\nfunction escapeHTML(input) {\n return input.replace(htmlCharacters, (char) => replacements[char]);\n}\n\n// src/string/pascal.ts\nfunction pascal(str) {\n if (!str) {\n return \"\";\n }\n const result = str.replace(\n /(?:[^\\w\\d]|_|\\s)+(\\w)([A-Z]+)?/g,\n (_, firstCharacter, capitalizedLetters) => {\n if (capitalizedLetters) {\n return firstCharacter.toUpperCase() + capitalizedLetters.toLowerCase();\n }\n return firstCharacter.toUpperCase();\n }\n );\n return result[0].toUpperCase() + result.substring(1);\n}\n\n// src/string/similarity.ts\nfunction similarity(str1, str2) {\n if (str1 === str2) {\n return 0;\n }\n let start = 0;\n let end1 = str1.length - 1;\n let end2 = str2.length - 1;\n while (start <= end1 && start <= end2 && str1[start] === str2[start]) {\n start++;\n }\n while (end1 >= start && end2 >= start && str1[end1] === str2[end2]) {\n end1--;\n end2--;\n }\n const length1 = end1 - start + 1;\n const length2 = end2 - start + 1;\n if (length1 === 0) {\n return length2;\n }\n if (length2 === 0) {\n return length1;\n }\n const numRows = length1 + 1;\n const numColumns = length2 + 1;\n const distances = new Array(numRows * numColumns).fill(0);\n for (let x = 1; x < numColumns; x++) {\n distances[x] = x;\n }\n for (let y = 1; y < numRows; y++) {\n distances[y * numColumns] = y;\n }\n for (let x = 1; x < numColumns; x++) {\n for (let y = 1; y < numRows; y++) {\n const i = y * numColumns + x;\n distances[i] = Math.min(\n // Cost of a deletion.\n distances[i - numColumns] + 1,\n // Cost of an insertion.\n distances[i - 1] + 1,\n // Cost of a substitution.\n distances[i - numColumns - 1] + (str1[start + y - 1] === str2[start + x - 1] ? 0 : 1)\n );\n }\n }\n return distances[length1 * numColumns + length2];\n}\n\n// src/string/snake.ts\nfunction snake(str, options) {\n const parts = (str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize).split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n const result = parts.reduce((acc, part) => {\n return `${acc}_${part.toLowerCase()}`;\n });\n return (options == null ? void 0 : options.splitOnNumber) === false ? result : result.replace(/([A-Za-z]{1}[0-9]{1})/, (val) => `${val[0]}_${val[1]}`);\n}\n\n// src/string/template.ts\nfunction template(str, data, regex = /\\{\\{(.+?)\\}\\}/g) {\n let result = \"\";\n let from = 0;\n let match;\n while (match = regex.exec(str)) {\n result += str.slice(from, match.index) + data[match[1]];\n from = regex.lastIndex;\n }\n return result + str.slice(from);\n}\n\n// src/string/title.ts\nfunction title(str) {\n if (!str) {\n return \"\";\n }\n return str.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((s) => s.trim()).filter((s) => !!s).map((s) => capitalize(s.toLowerCase())).join(\" \");\n}\n\n// src/string/trim.ts\nfunction trim(str, charsToTrim = \" \") {\n if (!str) {\n return \"\";\n }\n const toTrim = charsToTrim.replace(/[\\W]{1}/g, \"\\\\$&\");\n const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, \"g\");\n return str.replace(regex, \"\");\n}\n\n// src/typed/assert.ts\nfunction assert(condition, message) {\n if (!condition) {\n throw message instanceof Error ? message : new Error(message ?? \"Assertion failed\");\n }\n}\n\n// src/typed/isArray.ts\nvar isArray = /* @__PURE__ */ (() => Array.isArray)();\n\n// src/typed/isAsyncIterable.ts\nvar asyncIteratorSymbol = (\n /* c8 ignore next */\n Symbol.asyncIterator || /* @__PURE__ */ Symbol.for(\"Symbol.asyncIterator\")\n);\nfunction isAsyncIterable(value) {\n return !!value && typeof value === \"object\" && typeof value[asyncIteratorSymbol] === \"function\";\n}\n\n// src/typed/isBigInt.ts\nfunction isBigInt(value) {\n return typeof value === \"bigint\";\n}\n\n// src/typed/isBoolean.ts\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\n\n// src/typed/isClass.ts\nfunction isClass(value) {\n return isFunction(value) && Function.prototype.toString.call(value).startsWith(\"class \");\n}\n\n// src/typed/isDate.ts\nfunction isDate(value) {\n return isTagged(value, \"[object Date]\");\n}\n\n// src/typed/isEmpty.ts\nfunction isEmpty(value) {\n if (typeof value !== \"object\" || value === null) {\n return !value || value === true;\n }\n if (isDate(value)) {\n return Number.isNaN(value.getTime());\n }\n const length = value.length;\n if (isNumber(length)) {\n return length === 0;\n }\n const size = value.size;\n if (isNumber(size)) {\n return size === 0;\n }\n const keys2 = Object.keys(value).length;\n return keys2 === 0;\n}\n\n// src/typed/isEqual.ts\nfunction isEqual(x, y) {\n if (Object.is(x, y)) {\n return true;\n }\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n if (typeof x !== \"object\" || x === null || typeof y !== \"object\" || y === null) {\n return false;\n }\n const keysX = Reflect.ownKeys(x);\n const keysY = Reflect.ownKeys(y);\n if (keysX.length !== keysY.length) {\n return false;\n }\n for (let i = 0; i < keysX.length; i++) {\n if (!Reflect.has(y, keysX[i])) {\n return false;\n }\n if (!isEqual(x[keysX[i]], y[keysX[i]])) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isError.ts\nfunction isError(value) {\n return isTagged(value, \"[object Error]\");\n}\n\n// src/typed/isFloat.ts\nfunction isFloat(value) {\n return isNumber(value) && value % 1 !== 0;\n}\n\n// src/typed/isFunction.ts\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/typed/isInt.ts\nvar isInt = /* @__PURE__ */ (() => Number.isInteger)();\n\n// src/typed/isIntString.ts\nfunction isIntString(value) {\n if (!isString(value)) {\n return false;\n }\n const num = +value;\n return Number.isInteger(num) && `${num}` === value;\n}\n\n// src/typed/isIterable.ts\nfunction isIterable(value) {\n return typeof value === \"object\" && value !== null && Symbol.iterator in value;\n}\n\n// src/typed/isMap.ts\nfunction isMap(value) {\n return isTagged(value, \"[object Map]\");\n}\n\n// src/typed/isMapEqual.ts\nfunction isMapEqual(x, y) {\n if (x.size !== y.size) {\n return false;\n }\n for (const [key, value] of x) {\n if (!isEqual(value, y.get(key))) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isNullish.ts\nfunction isNullish(value) {\n return value === null || value === void 0;\n}\n\n// src/typed/isNumber.ts\nfunction isNumber(value) {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n\n// src/typed/isObject.ts\nfunction isObject(value) {\n return isTagged(value, \"[object Object]\");\n}\n\n// src/typed/isPlainObject.ts\nfunction isPlainObject(value) {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return (\n // Fast path for most common objects.\n prototype === Object.prototype || // Support objects created without a prototype.\n prototype === null || // Support plain objects from other realms.\n Object.getPrototypeOf(prototype) === null\n );\n}\n\n// src/typed/isPrimitive.ts\nfunction isPrimitive(value) {\n return value === void 0 || value === null || typeof value !== \"object\" && typeof value !== \"function\";\n}\n\n// src/typed/isPromise.ts\nfunction isPromise(value) {\n return !!value && isFunction(value.then);\n}\n\n// src/typed/isRegExp.ts\nfunction isRegExp(value) {\n return isTagged(value, \"[object RegExp]\");\n}\n\n// src/typed/isResult.ts\nfunction isResult(value) {\n return isArray(value) && value.length === 2 && (isError(value[0]) ? value[1] : value[0]) === void 0;\n}\n\n// src/typed/isResultErr.ts\nfunction isResultErr(value) {\n return isResult(value) && value[0] !== void 0;\n}\n\n// src/typed/isResultOk.ts\nfunction isResultOk(value) {\n return isResult(value) && value[0] === void 0;\n}\n\n// src/typed/isSet.ts\nfunction isSet(value) {\n return isTagged(value, \"[object Set]\");\n}\n\n// src/typed/isSetEqual.ts\nfunction isSetEqual(x, y) {\n if (x.size !== y.size) {\n return false;\n }\n for (const item of x) {\n if (!y.has(item)) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isString.ts\nfunction isString(value) {\n return typeof value === \"string\";\n}\n\n// src/typed/isSymbol.ts\nfunction isSymbol(value) {\n return typeof value === \"symbol\";\n}\n\n// src/typed/isTagged.ts\nfunction isTagged(value, tag) {\n return Object.prototype.toString.call(value) === tag;\n}\n\n// src/typed/isUndefined.ts\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\n\n// src/typed/isWeakMap.ts\nfunction isWeakMap(value) {\n return isTagged(value, \"[object WeakMap]\");\n}\n\n// src/typed/isWeakSet.ts\nfunction isWeakSet(value) {\n return isTagged(value, \"[object WeakSet]\");\n}\n\nexport { AggregateErrorOrPolyfill as AggregateError, DefaultCloningStrategy, DurationParser, FastCloningStrategy, QuantityParser, Semaphore, SemaphorePermit, TimeoutError, absoluteJitter, all, alphabetical, always, assert, assign, boil, callable, camel, capitalize, cartesianProduct, castArray, castArrayIfExists, castComparator, castMapping, chain, clamp, clone, cloneDeep, cluster, compose, concat, construct, counting, crush, dash, debounce, dedent, defer, diff, draw, escapeHTML, filterKey, first, flat, flip, fork, get, getOrInsert, getOrInsertComputed, group, guard, identity, inRange, intersects, invert, isArray, isArrayEqual, isAsyncIterable, isBigInt, isBoolean, isClass, isDangerousKey, isDate, isEmpty, isEqual, isError, isFloat, isFunction, isInt, isIntString, isIterable, isMap, isMapEqual, isNullish, isNumber, isObject, isPlainObject, isPrimitive, isPromise, isRegExp, isResult, isResultErr, isResultOk, isSet, isSetEqual, isString, isSymbol, isTagged, isUndefined, isWeakMap, isWeakSet, iterate, keys, last, lerp, list, listify, lowerize, map, mapEntries, mapKeys, mapValues, mapify, max, memo, memoLastCall, merge, min, noop, objectify, omit, once, parallel, parseDuration, parseQuantity, partial, partob, pascal, pick, pluck, promiseChain, proportionalJitter, proxied, queueByKey, random, range, reduce, remove, replace, replaceOrAppend, retry, round, select, selectFirst, series, set, shake, shift, shuffle, sift, similarity, sleep, snake, sort, sum, template, throttle, timeout, title, toFloat, toInt, toResult, toggle, traverse, trim, tryit as try, tryit, uid, unique, unzip, upperize, withResolvers, zip, zipToObject };\n","import { assign } from \"radashi\";\n\nexport const objectAssign = assign;\n","import { isArray, isObject } from \"../typeof\";\n\nexport function objectPick<O extends AnyObject, K extends keyof O>(obj: O, keys: readonly K[]): Pick<O, K> {\n const result = {} as unknown as Pick<O, K>;\n\n if (!isObject(obj)) {\n return result;\n }\n if (!isArray(keys)) {\n return obj;\n }\n\n return keys.reduce((acc, curr) => {\n if (curr in obj) {\n acc[curr] = obj[curr];\n }\n\n return acc;\n }, result);\n}\n","import type { NonEmptyObject } from \"type-fest\";\nimport { isObject } from \"../typeof\";\nimport { objectEntries } from \"./objectEntries\";\n\n/**\n * 对象反转\n * - 返回交换了对象的可枚举属性的值/键对象\n *\n * @param obj 对象\n */\nexport function objectSwitch<O extends AnyObject>(obj: NonEmptyObject<O>): Record<O[keyof O], keyof O> {\n const result = {} as unknown as Record<O[keyof O], keyof O>;\n\n if (!isObject(obj)) {\n return result;\n }\n\n for (const [k, v] of objectEntries(obj)) {\n result[v] = k;\n }\n\n return result;\n}\n","import { isString } from \"../typeof\";\n\nconst m1 = /\\S+/g;\nconst m2 = /[^a-zA-Z\\u00C0-\\u017F]/;\n\n/**\n * 首字母大小写\n */\nexport function stringInitialCase(value: string, type: \"lower\" | \"upper\") {\n if (!isString(value) || value.length === 0) {\n return value;\n }\n\n return value.replace(m1, (word) => {\n // 单词含非字母字符(如.,'-等)→ 原样保留\n if (m2.test(word)) {\n return word;\n }\n // 纯字母且全大写 → 保留\n if (word === word.toLocaleUpperCase()) {\n return word;\n }\n // 纯字母且非全大写 → 首字母小写,其余保留\n if (type === \"lower\" && word[0]) {\n return word[0].toLocaleLowerCase() + word.slice(1);\n }\n // 纯字母且非全大写 → 首字母大写写,其余保留\n if (type === \"upper\" && word[0]) {\n return word[0].toLocaleUpperCase() + word.slice(1);\n }\n\n return word;\n });\n}\n","import type { Replace } from \"type-fest\";\n\nexport function stringReplace<I extends string, S extends string, R extends string>(input: I, search: S, replacement: R) {\n return input.replace(search, replacement) as Replace<I, S, R>;\n}\n","import { isString } from \"../typeof\";\n\nexport function stringToJson<R extends AnyObject = AnyObject, D extends R = R>(data: string | null | undefined, safeValue: D): R {\n if (isString(data) && data) {\n try {\n const value = JSON.parse(data);\n\n return value;\n } catch (error) {\n return safeValue;\n }\n } else {\n return safeValue;\n }\n}\n","import { isString } from \"../typeof\";\n\nexport function stringToValues<T extends number | string = number>(data: string | null | undefined, valueType: \"number\" | \"string\" = \"number\", splitSymbol = \",\"): T[] {\n if (isString(data) && data) {\n try {\n const values = data.split(splitSymbol);\n\n if (valueType === \"number\") {\n return values.map((d) => Number(d)) as unknown as T[];\n }\n\n return values as unknown as T[];\n } catch (error) {\n return [];\n }\n } else {\n return [];\n }\n}\n","import { isFunction } from \"../typeof\";\n\nexport type RowKey = \"id\";\nexport type ParentIdKey = \"parentId\";\nexport type ChildrenKey = \"children\";\nexport type Strategy = \"pre\" | \"post\" | \"breadth\";\n\nexport interface BaseCallbackMeta<T> {\n depth: number;\n parents?: T[];\n}\n\nexport interface BaseOptions<T, CK extends string> {\n childrenKey?: CK;\n strategy?: Strategy;\n getChildrenKey?: (row: T, meta: BaseCallbackMeta<T>) => CK | undefined;\n}\n\nexport interface BaseInnerOptions<T, CK extends string> {\n childrenKey: CK;\n parents: T[];\n depth: number;\n getChildrenKey?: (row: T, meta: BaseCallbackMeta<T>) => CK | undefined;\n}\n\nexport interface QueueItem<T, CK extends string> {\n queueRow: T;\n queueOptions: BaseInnerOptions<T, CK>;\n}\n\nexport function getFinalChildrenKey<T, CK extends string>(\n tree: T,\n meta: BaseCallbackMeta<T>,\n options: BaseInnerOptions<T, CK>,\n): CK {\n if (isFunction(options.getChildrenKey)) {\n const dynamicChildrenKey = options.getChildrenKey(tree, meta);\n if (dynamicChildrenKey && dynamicChildrenKey !== null) {\n return dynamicChildrenKey;\n }\n }\n\n return options.childrenKey;\n}\n","import { arrayLast } from \"../array\";\nimport { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\nexport type TreeFilterOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;\nexport type TreeFilterInnerOption<T extends AnyObject, CK extends string = ChildrenKey> = BaseInnerOptions<T, CK>;\nexport type TreeFilterCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => boolean;\n\n// 前置遍历\nfunction preImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFilterCallback<T>, options: TreeFilterInnerOption<T, CK>): T | undefined {\n const result = callback(row, options);\n if (!result) {\n return undefined;\n }\n\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => preImpl(c, callback, nextLevelOptions)).filter((c) => !!c);\n }\n\n return { ...row, [finalChildrenKey]: newChildren };\n}\n\n// 子节点优先遍历\nfunction postImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFilterCallback<T>, options: TreeFilterInnerOption<T, CK>): T | undefined {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => preImpl(c, callback, nextLevelOptions)).filter((c) => !!c);\n }\n\n const result = callback(row, options);\n if (!result) {\n return undefined;\n }\n\n return { ...row, [finalChildrenKey]: newChildren };\n}\n\n// 广度优先遍历\nfunction breadthImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFilterCallback<T>, options: TreeFilterInnerOption<T, CK>): T | undefined {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const resultCache = new WeakMap<T, boolean>();\n const newNodeCache = new WeakMap<T, T>();\n const childrenKeyCache = new WeakMap<T, CK>();\n let result: T;\n const runQueue = (): T | undefined => {\n if (queue.length === 0) {\n return result;\n }\n\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n\n const parent = arrayLast(queueOptions.parents);\n const isTopNode = queueOptions.depth === 0;\n const parentResult = parent && resultCache.get(parent);\n\n if (!isTopNode && !parentResult) {\n return runQueue();\n }\n\n const callbackResult = callback(queueRow, queueOptions);\n if (isTopNode && !callbackResult) {\n return undefined;\n }\n\n const newNode = { ...queueRow, [finalChildrenKey]: undefined };\n if (isTopNode) {\n result = newNode;\n }\n\n resultCache.set(queueRow, callbackResult);\n newNodeCache.set(queueRow, newNode);\n childrenKeyCache.set(queueRow, finalChildrenKey);\n\n if (callbackResult && parent) {\n const parentNewNode = newNodeCache.get(parent);\n const parentChildrenKey = childrenKeyCache.get(parent);\n\n if (parentNewNode && parentChildrenKey) {\n if (!parentNewNode[parentChildrenKey]) {\n (parentNewNode[parentChildrenKey] as T[]) = [];\n }\n parentNewNode[parentChildrenKey].push(newNode);\n }\n }\n\n return runQueue();\n };\n\n return runQueue();\n}\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\nexport function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T[], callback: TreeFilterCallback<T>, options?: TreeFilterOptions<T, CK>): T[];\nexport function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T, callback: TreeFilterCallback<T>, options?: TreeFilterOptions<T, CK>): T;\nexport function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeFilterCallback<T>, options: TreeFilterOptions<T, CK> = {}): T | T[] {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n return isArray(tree)\n ? tree.map((row) => traversalMethod(row, callback, innerOptions)).filter((t) => !!t)\n : traversalMethod(tree, callback, innerOptions) || [];\n}\n","import { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\nexport type TreeFindOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;\nexport type TreeFindInnerOption<T extends AnyObject, CK extends string = ChildrenKey> = BaseInnerOptions<T, CK>;\nexport type TreeFindCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => boolean;\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\n// 前置深度优先遍历\nfunction preImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFindCallback<T>, options: TreeFindInnerOption<T, CK>): T | undefined {\n const callbackResult = callback(row, options);\n if (callbackResult) {\n return row;\n }\n\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n if (isArray(children)) {\n for (const child of children) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n const result = preImpl(child, callback, nextLevelOptions);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n}\n\n// 后置深度优先遍历\nfunction postImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFindCallback<T>, options: TreeFindInnerOption<T, CK>): T | undefined {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n if (isArray(children)) {\n for (const child of children) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n const result = postImpl(child, callback, nextLevelOptions);\n if (result) {\n return result;\n }\n }\n }\n\n const callbackResult = callback(row, options);\n if (callbackResult) {\n return row;\n }\n\n return undefined;\n}\n\n// 广度优先遍历\nfunction breadthImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFindCallback<T>, options: TreeFindInnerOption<T, CK>): T | undefined {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const runQueue = (): T | undefined => {\n if (queue.length === 0) {\n return undefined;\n }\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n\n const callbackResult = callback(queueRow, queueOptions);\n if (callbackResult) {\n return queueRow;\n }\n\n return runQueue();\n };\n\n return runQueue();\n}\n\n\n/**\n * 查找树节点,找到第一个返回非空值的节点\n */\nexport function treeFind<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeFindCallback<T>, options: TreeFindOptions<T, CK> = {}): T | undefined {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n if (isArray(tree)) {\n for (const row of tree) {\n const result = traversalMethod<T, CK>(row, callback, innerOptions);\n if (result) {\n return result;\n }\n }\n\n return undefined;\n }\n\n return traversalMethod<T, CK>(tree, callback, innerOptions);\n}\n","import { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\nexport type TreeForeachOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;\nexport type TreeForeachInnerOption<T extends AnyObject, CK extends string = ChildrenKey> = BaseInnerOptions<T, CK>;\nexport type TreeForeachCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => void;\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\n// 前置遍历\nfunction preImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeForeachCallback<T>, options: TreeForeachInnerOption<T, CK>) {\n callback(row, options);\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n for (const child of children) {\n preImpl(child, callback, nextLevelOptions);\n }\n }\n}\n\n// 后置遍历\nfunction postImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeForeachCallback<T>, options: TreeForeachInnerOption<T, CK>) {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n for (const child of children) {\n postImpl(child, callback, nextLevelOptions);\n }\n }\n callback(row, options);\n}\n\n// 广度优先遍历\nfunction breadthImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeForeachCallback<T>, options: TreeForeachInnerOption<T, CK>) {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const runQueue = () => {\n if (queue.length === 0) {\n return;\n }\n\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n callback(queueRow, queueOptions);\n runQueue();\n };\n\n runQueue();\n}\n\nexport function treeForEach<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeForeachCallback<T>, options: TreeForeachOptions<T, CK> = {}): void {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n if (isArray(tree)) {\n for (const row of tree) {\n traversalMethod<T, CK>(row, callback, innerOptions);\n }\n } else {\n traversalMethod<T, CK>(tree, callback, innerOptions);\n }\n}\n","import { arrayLast } from \"../array\";\nimport { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\n\nexport type TreeMapOptions<T extends AnyObject, CK extends string> = BaseOptions<T, CK>;\nexport type TreeMapInnerOption<T extends AnyObject, CK extends string> = BaseInnerOptions<T, CK>;\nexport type TreeMapCallback<R extends AnyObject, T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => R;\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\n// 前置遍历\nfunction preImpl<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeMapCallback<R, T>, options: TreeMapInnerOption<T, CK>): TreeLike<R, CK> {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const result = callback(row, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: TreeLike<R, CK>[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => preImpl(c, callback, nextLevelOptions));\n }\n\n return { ...result, [finalChildrenKey]: newChildren };\n}\n\n// 子节点优先遍历\nfunction postImpl<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeMapCallback<R, T>, options: TreeMapInnerOption<T, CK>): TreeLike<R, CK> {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: TreeLike<R, CK>[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => postImpl(c, callback, nextLevelOptions));\n }\n const result = callback(row, options);\n\n return { ...result, [finalChildrenKey]: newChildren };\n}\n\n// 广度优先遍历\nfunction breadthImpl<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeMapCallback<R, T>, options: TreeMapInnerOption<T, CK>): TreeLike<R, CK> {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const cache = new WeakMap<T, TreeLike<R, CK>>();\n const childrenKeyCache = new WeakMap<T, CK>();\n let result: TreeLike<R, CK>;\n\n const runQueue = () => {\n if (queue.length === 0) {\n return result;\n }\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n const res = callback(queueRow, queueOptions);\n cache.set(queueRow, res);\n childrenKeyCache.set(queueRow, finalChildrenKey);\n\n // breadth 模式的子节点一定晚于父节点执行,所以可以在cache中找到父节点的生成物\n const parent = arrayLast(queueOptions.parents);\n if (parent) {\n const newParent = cache.get(parent);\n const parentChildrenKey = childrenKeyCache.get(parent);\n\n if (newParent && parentChildrenKey) {\n if (newParent[parentChildrenKey]) {\n newParent[parentChildrenKey].push(res);\n } else {\n (newParent[parentChildrenKey] as TreeLike<R, CK>[]) = [res];\n }\n }\n }\n // 这棵树的顶点\n if (queueOptions.depth === 0) {\n result = res;\n }\n\n return runQueue();\n };\n\n return runQueue();\n}\n\nexport function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T[], callback: TreeMapCallback<R, T>, options?: TreeMapOptions<T, CK>): TreeLike<R, CK>[];\nexport function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T, callback: TreeMapCallback<R, T>, options?: TreeMapOptions<T, CK>): TreeLike<R, CK>;\nexport function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeMapCallback<R, T>, options: TreeMapOptions<T, CK> = {}): TreeLike<R, CK> | TreeLike<R, CK>[] {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n return isArray(tree)\n ? tree.map((row) => traversalMethod<R, T, CK>(row, callback, innerOptions))\n : traversalMethod<R, T, CK>(tree, callback, innerOptions);\n}\n","import { isNull, isUndefined } from \"../typeof\";\nimport type { ChildrenKey, ParentIdKey, RowKey } from \"./types\";\n\nexport interface RowsToTreeOptions<\n RK extends string = RowKey,\n PK extends string = ParentIdKey,\n CK extends string = ChildrenKey,\n> {\n rowKey?: RK;\n parentIdKey?: PK;\n childrenKey?: CK;\n}\n\n/**\n * 行结构 转 树结构\n */\nexport function rowsToTree<\n T extends AnyObject = AnyObject,\n CK extends string = ChildrenKey,\n R = TreeLike<T, CK>,\n RK extends string = RowKey,\n PK extends string = ParentIdKey,\n>(rows: T[], options?: RowsToTreeOptions<RK, PK, CK> | undefined): R[] {\n const { parentIdKey = \"parentId\", rowKey = \"id\", childrenKey = \"children\" } = options || {};\n const result: R[] = [];\n const map = new Map<PropertyKey, T>();\n\n for (const row of rows) {\n const id = row[rowKey];\n\n if (!map.get(id)) {\n map.set(id, row);\n }\n }\n\n for (const row of rows) {\n const parentId = row[parentIdKey];\n const parent = map.get(parentId);\n\n if (!parent || !parentId) {\n result.push(row);\n\n continue;\n }\n\n const siblings = parent[childrenKey];\n\n if (isNull(siblings) || isUndefined(siblings)) {\n parent[childrenKey] = [row] as T[CK];\n } else if (Array.isArray(siblings)) {\n siblings.push(row);\n } else {\n const message = `The key \"${childrenKey.toString()}\" in parent item is not an array.`;\n throw new Error(message);\n }\n }\n\n return result;\n}\n","import type { SetOptional } from \"type-fest\";\nimport { treeForEach, type TreeForeachOptions } from \"./treeForEach\";\nimport type { ChildrenKey } from \"./types\";\n\ntype TreeToRowsOptions<T extends AnyObject, CK extends string = ChildrenKey> = TreeForeachOptions<T, CK>;\n\n/**\n * 树结构 转 行结构\n */\nexport function treeToRows<\n T extends AnyObject,\n CK extends string = ChildrenKey,\n R extends AnyObject = SetOptional<T, CK>,\n>(tree: T | T[], options: TreeToRowsOptions<T, CK> = {}): R[] {\n const { childrenKey = \"children\" } = options;\n const result: R[] = [];\n\n if (!tree) {\n return result;\n }\n\n treeForEach(tree, (t) => result.push({ ...t, [childrenKey]: undefined }), options);\n\n return result;\n}\n"],"x_google_ignoreList":[52],"mappings":";AAAA,MAAa,mBAAmB;CAC9B,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,mBAAmB;CACnB,eAAe;CACf,SAAS;CACT,MAAM;CACN,WAAW;CACX,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,KAAK;CACL,SAAS;CACT,KAAK;CACL,SAAS;CACT,QAAQ;CACR,WAAW;CACX,iBAAiB;CAClB;AAED,SAAgB,uBAAuB,OAAgB;AACrD,QAAO,OAAO,UAAU,SAAS,KAAK,MAAM;;;;;AC1B9C,SAAgB,QAA6B,OAA4B;AACvE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,gBAAqC,OAA4B;AAC/E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAA6B,OAA4B;AACvE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACA5D,SAAgB,QAAoC,OAA4B;AAC9E,QAAO,uBAAuB,MAAM,CAAC,WAAW,SAAS;;;;;ACF3D,SAAgB,OAAuB,OAA4B;AACjE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;;;;;;;;ACI5D,SAAgB,QAAW,GAAM,GAAe;AAC9C,KAAI,OAAO,GAAG,GAAG,EAAE,CACjB,QAAO;AAET,KAAI,aAAa,QAAQ,aAAa,KACpC,QAAO,EAAE,SAAS,KAAK,EAAE,SAAS;AAEpC,KAAI,aAAa,UAAU,aAAa,OACtC,QAAO,EAAE,UAAU,KAAK,EAAE,UAAU;AAEtC,KAAI,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,MAAM,YAAY,MAAM,KACxE,QAAO;CAGT,MAAM,QAAQ,QAAQ,QAAQ,EAAE;CAChC,MAAM,QAAQ,QAAQ,QAAQ,EAAE;AAChC,KAAI,MAAM,WAAW,MAAM,OACzB,QAAO;AAGT,MAAK,MAAM,OAAO,OAAO;AACvB,MAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,CACtB,QAAO;AAET,MAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAC1B,QAAO;;AAIX,QAAO;;;;;AClCT,SAAgB,QAAyB,OAA4B;AACnE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,OAAuB,OAA4B;AACjE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,WAA2B,OAA4B;AAGrE,QAFgC;EAAC,iBAAiB;EAAU,iBAAiB;EAAmB,iBAAiB;EAAc,CAE1G,SAAS,uBAAuB,MAAM,CAAC;;;;;ACH9D,SAAgB,oBAAoC,OAA4B;AAC9E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACH5D,SAAgB,UAA4B,OAA4B;AACtE,QAAO,OAAO,UAAU,MAAM;;;;;ACChC,SAAgB,SAAiD,OAA4B;AAC3F,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,WAAwC,OAA4B;AAClF,QAAO,SAAS,MAAM,IAAI,OAAO,YAAY;;;;;ACD/C,SAAgB,MAAuC,OAA4B;AACjF,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,OAAuB,OAA4B;AACjE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAAsC,OAA4B;AAChF,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACC5D,SAAgB,cAA8C,OAA4B;AACxF,QAAO,UAAU,MAAM,IAAK,SAAS,MAAM,IAAI,WAAW,MAAM,QAAQ;;;;;ACH1E,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,MAA8B,OAA4B;AACxE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,YAAiC,OAA4B;AAC3E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,kBAAoC,OAA4B;AAC9E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAAiD,OAA4B;AAC3F,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAAwC,OAA4B;AAClF,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,YAAiC,OAA4B;AAC3E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;;;;;;ACI5D,SAAgB,UAAa,WAAoB,aAAa,MAAW;AACvE,KAAI,eAAe,YAAY,UAAU,IAAI,OAAO,UAAU,EAC5D,QAAO,EAAE;AAGX,QAAO,QAAQ,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU;;;;;;;;;;;;ACH1D,SAAgB,aAAgB,aAA2B,OAAoC;AAC7F,KAAI,CAAC,QAAQ,YAAY,IAAI,YAAY,WAAW,KAAK,CAAC,WAAW,MAAM,CACzE,QAAO;AAGT,QAAO,YAAY,OAAO,MAAM;;;;;;;;;;;;ACLlC,SAAgB,cAAwC,aAA2B,OAA8C;AAC/H,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,WAAW,MAAM,CAC7C,QAAO,EAAE;AAGX,QAAO,YAAY,QAAgC,MAAM,SAAS;EAChE,MAAM,KAAK,MAAM,KAAK,CAAC,UAAU;AACjC,OAAK,OAAO,KAAK,OAAO,KAAK;AAE7B,SAAO;IACN,EAAE,CAAC;;;;;;;;;;;;ACVR,SAAgB,gBAAmB,aAA2B,UAAwB,OAAkC;AACtH,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,QAAQ,SAAS,CAC7C,QAAO,EAAE;AAEX,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,YAAY,OACxC,QAAO,CAAC,GAAG,SAAS;AAEtB,KAAI,CAAC,QAAQ,SAAS,IAAI,CAAC,SAAS,OAClC,QAAO,CAAC,GAAG,YAAY;AAEzB,KAAI,CAAC,WAAW,MAAM,EAAE;EACtB,MAAM,WAAW,IAAI,IAAI,SAAS;AAElC,SAAO,MAAM,KAAK,IAAI,IAAI,YAAY,QAAQ,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;;CAG/E,MAAM,sBAAM,IAAI,KAAuB;AAEvC,UAAS,SAAS,SAAS;AACzB,MAAI,IAAI,MAAM,KAAK,EAAE,KAAK;GAC1B;AAEF,QAAO,YAAY,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;;;;;;;;;;;ACvBtD,SAAgB,WAAc,aAA2B,WAA8B;AACrF,KAAI,CAAC,QAAQ,YAAY,IAAI,YAAY,WAAW,EAClD,QAAO;AAGT,QAAO,YAAY;;;;;;;;;;;;ACJrB,SAAgB,UAAa,aAA2B,OAAyC;CAC/F,MAAMA,SAAqB,CAAC,EAAE,EAAE,EAAE,CAAC;AAEnC,KAAI,QAAQ,YAAY,CACtB,MAAK,MAAM,QAAQ,YACjB,QAAO,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;AAI1C,QAAO;;;;;;;;;;;;ACTT,SAAgB,kBAAqB,aAA2B,UAAwB,OAAkC;AACxH,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,QAAQ,SAAS,CAC7C,QAAO,EAAE;AAEX,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,YAAY,OACxC,QAAO,CAAC,GAAG,SAAS;AAEtB,KAAI,CAAC,QAAQ,SAAS,IAAI,CAAC,SAAS,OAClC,QAAO,CAAC,GAAG,YAAY;AAEzB,KAAI,CAAC,WAAW,MAAM,EAAE;EACtB,MAAM,WAAW,IAAI,IAAI,SAAS;AAElC,SAAO,MAAM,KAAK,IAAI,IAAI,YAAY,QAAQ,SAAS,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;;CAG9E,MAAM,sBAAM,IAAI,KAAuB;AAEvC,UAAS,SAAS,SAAS;AACzB,MAAI,IAAI,MAAM,KAAK,EAAE,KAAK;GAC1B;AAEF,QAAO,YAAY,QAAQ,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;;;;;;;;;;;ACvBrD,SAAgB,UAAa,aAA2B,WAA8B;AACpF,KAAI,CAAC,QAAQ,YAAY,IAAI,YAAY,WAAW,EAClD,QAAO;AAGT,QAAO,YAAY,YAAY,SAAS;;;;;;;;;;;;;ACH1C,SAAgB,WAAc,aAA2B,WAAyB,OAAmC;AACnH,KAAI,CAAC,QAAQ,YAAY,CACvB,QAAO,EAAE;AAEX,KAAI,CAAC,QAAQ,UAAU,CACrB,QAAO,CAAC,GAAG,YAAY;AAEzB,KAAI,CAAC,WAAW,MAAM,CACpB,QAAO,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;CAG5D,MAAM,uBAAO,IAAI,KAAK;AACtB,MAAK,MAAM,QAAQ,UACjB,MAAK,IAAI,MAAM,KAAK,EAAE,KAAK;AAG7B,QAAO,YAAY,KAAK,aAAa;EACnC,MAAM,MAAM,MAAM,SAAS;AAE3B,SAAO,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAI;GACxC;;;;;;;;;;;;;ACpBJ,SAAgB,UAAoB,aAA2B,QAA4C,QAAqD;AAC9J,KAAI,CAAC,QAAQ,YAAY,CACvB,QAAO,EAAE;AAEX,KAAI,CAAC,WAAW,OAAO,CACrB,QAAO,CAAC,GAAG,YAAY;CAGzB,MAAM,YAAY,WAAW,OAAO;AAEpC,QAAO,YAAY,QAAa,MAAM,MAAM,UAAU;AACpD,MAAI,CAAC,OAAO,MAAM,MAAM,CACtB,QAAO;AAET,MAAI,UACF,MAAK,KAAK,OAAO,MAAM,MAAM,CAAC;MAE9B,MAAK,KAAK,KAAqB;AAGjC,SAAO;IACN,EAAE,CAAC;;;;;;;;;;;;;ACrBR,SAAgB,aAAgB,aAA2B,SAAY,OAAgD;AACrH,KAAI,CAAC,YACH,QAAO,EAAE;AAEX,KAAI,YAAY,UAAa,CAAC,WAAW,MAAM,CAC7C,QAAO,CAAC,GAAG,YAAY;AAGzB,MAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;EAC3C,MAAM,OAAO,YAAY;AAEzB,MAAI,SAAS,UAAa,MAAM,MAAM,EAAE,CACtC,QAAO;GAAC,GAAG,YAAY,MAAM,GAAG,EAAE;GAAE;GAAS,GAAG,YAAY,MAAM,IAAI,GAAG,YAAY,OAAO;GAAC;;AAIjG,QAAO,CAAC,GAAG,YAAY;;;;;;;;;;;;ACjBzB,SAAgB,WAAc,aAA2B,OAAO,IAAW;AACzE,KAAI,CAAC,QAAQ,YAAY,CACvB,QAAO,EAAE;CAGX,MAAM,QAAQ,KAAK,KAAK,YAAY,SAAS,KAAK;AAElD,QAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,CAAC,CACjC,KAAK,KAAK,CACV,KAAK,IAAI,MAAM;AACd,SAAO,YAAY,MAAM,IAAI,MAAM,IAAI,OAAO,KAAK;GACnD;;;;;;;;;AChBN,SAAgB,GACd,SACA,UACqC;AACrC,QAAO,QACJ,MAAiB,SAAY,CAAC,MAAM,KAAK,CAAC,CAC1C,OAAuB,QAAW;AACjC,MAAI,SAGF,QAAO,CAFa;GAAE,GAAG;GAAK,GAAG;GAAU,EAEtB,OAAU;AAKjC,SAAO,CAFc,MAAM,sBAAM,IAAI,MAAM,eAAe,EAE/B,OAAU;GACrC;;;;;ACVN,MAAMC,yBAA0C;CAC9C,SAAe,OAAkB,OAA4C,OAAsC;EACjH,MAAM,SAAS,sBAAM,IAAI,KAAK,CAAC;AAC/B,OAAK,MAAM,CAAC,KAAK,UAAU,MACzB,QAAO,IAAI,KAAK,MAAM,MAAM,CAAC;AAG/B,SAAO;;CAET,SAAY,OAAe,OAAsC,OAAmC;EAClG,MAAM,SAAS,sBAAM,IAAI,KAAK,CAAC;AAC/B,OAAK,MAAM,SAAS,MAClB,QAAO,IAAI,MAAM,MAAM,CAAC;AAG1B,SAAO;;CAET,WAAc,OAAqB,OAAgC,OAAgC;EAEjG,MAAM,SAAS,MAAM,IAAI,MAAM,MAAM,OAAO,CAAC;AAC7C,QAAM,SAAS,OAAO,UAAU;AAC9B,UAAO,SAAS,MAAM,MAAM;IAC5B;AAEF,SAAO;;CAET,YAAiC,OAAU,OAA4B,OAA8B;EACnG,MAAM,SAAS,MAAM,OAAO,OAAO,OAAO,eAAe,MAAM,CAAC,CAAC;AACjE,OAAK,MAAM,OAAO,QAAQ,QAAQ,MAAM,EAAE;GAGxC,MAAM,aAAa,OAAO,yBAAyB,OAAO,IAAI;AAC9D,OAAI,WAAW,WACb,YAAW,QAAQ,MAAM,WAAW,MAAM;AAE5C,UAAO,eAAe,QAAQ,KAAK,WAAW;;AAGhD,SAAO;;CAET,WAAc,OAAU,OAA+B;AACrD,SAAO,MAAM,MAAM;;CAEtB;;;;;AAOD,SAAgB,UAA+B,MAAS,gBAA8C;CACpG,MAAM,WAAW;EAAE,GAAG;EAAwB,GAAG;EAAgB;CAEjE,MAAM,0BAAU,IAAI,KAAuB;CAC3C,MAAM,SAAS,QAAiB,cAAuB;AACrD,UAAQ,IAAI,QAAQ,UAAU;AAE9B,SAAO;;CAGT,MAAM,SAAY,UAAgB;AAChC,SAAO,SAAS,OAAO,UAAU,WAAa,QAAQ,IAAI,MAAM,IAAIC,YAAU,OAAO,SAAS,GAAU;;CAG1G,MAAMA,eAAa,QAAiB,eAAuC;EAazE,MAAM,aAXJ,SAAS,OAAO,GACZC,WAAS,cACT,QAAQ,OAAO,GACbA,WAAS,aACT,MAAM,OAAO,GACXA,WAAS,WACT,MAAM,OAAO,GACXA,WAAS,WACTA,WAAS,YAGS,QAAQ,MAAM,KAAK,MAAM,OAAO,EAAE,MAAM;AACtE,MAAI,CAAC,UAEH,QAAOD,YAAU,QAAQ,uBAAuB;AAGlD,UAAQ,IAAI,QAAQ,UAAU;AAE9B,SAAO;;AAGT,QAAOA,YAAU,MAAM,SAAS;;;;;;;;;;;AC5FlC,SAAgB,WAAgC,KAAqB;AACnE,QAAO,OAAO,KAAK,IAAI;;;;;ACJzB,SAAgB,cAAmC,aAAgB;AACjE,KAAI,CAAC,SAAS,YAAY,CACxB,OAAM,MAAM,2DAA2D,OAAO,cAAc;AAG9F,KAAI,CAAC,WAAW,YAAY,CAAC,OAC3B,OAAM,MAAM,oCAAoC;AAGlD,QAAO;;;;;;;;;;ACPT,SAAgB,cAAmC,KAA0C;AAC3F,QAAO,OAAO,QAAQ,IAAI;;;;;;;;;;ACC5B,SAAgB,aAAkC,KAAkC;AAClF,QAAO,OAAO,OAAO,IAAI;;;;;;;;;;ACG3B,SAAgB,YAAiC,aAAyD;CACxG,MAAM,IAAI,cAAc,YAAY;CACpC,MAAM,OAAO,WAAW,EAAE;CAC1B,MAAM,SAAS,aAAa,EAAE;CAC9B,MAAM,UAAU,cAAc,EAAE;AAGhC,KAFqB,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,CAGtE,QAAO,QAAQ,OAAO,KAAK,SAAS,GAAG,KAAK,SAAS,EAAE;AAGzD,QAAO;;;;;;;;;;ACZT,SAAgB,SAA8B,aAA2D;CACvG,MAAM,IAAI,cAAc,YAAY;CACpC,MAAM,OAAO,WAAW,EAAE;CAC1B,MAAM,SAAS,aAAa,EAAE;AAG9B,KAFqB,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,CAGtE,QAAO,KAAK,OAAO,KAAK,SAAS,GAAG,KAAK,SAAS,EAAE;AAGtD,QAAO;;;;;;;;;;ACVT,SAAgB,WAAgC,aAA0D;CACxG,MAAM,IAAI,cAAc,YAAY;CACpC,MAAM,OAAO,WAAW,EAAE;CAC1B,MAAM,SAAS,aAAa,EAAE;AAG9B,KAFqB,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,CAGtE,QAAO,OAAO,OAAO,KAAK,SAAS,GAAG,KAAK,SAAS,EAAE;AAGxD,QAAO;;;;;AClBT,SAAgB,WACd,KACA,SACmC;CACnC,MAAM,gBAAgB,EAAE;AAExB,KAAI,CAAC,IACH,QAAO;AAGT,QAAO,cAAc,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,WAAW;EACtD,MAAM,CAAC,QAAQ,YAAY,QAAQ,KAAK,MAAM;AAC9C,MAAI,UAAU;AAEd,SAAO;IACN,cAAc;;;;;ACw7BnB,SAAS,OAAO,SAAS,UAAU;AACjC,KAAI,CAAC,WAAW,CAAC,SACf,QAAO,WAAW,YAAY,EAAE;CAElC,MAAM,QAAQ,OAAO,eAAe,QAAQ;CAC5C,MAAM,SAAS,QAAQ,EAAE,GAAG,SAAS,GAAG,OAAO,OAAO,OAAO,OAAO,MAAM,EAAE,QAAQ;AACpF,MAAK,MAAM,OAAO,OAAO,KAAK,SAAS,CACrC,QAAO,OAAO,cAAc,QAAQ,KAAK,IAAI,cAAc,SAAS,KAAK,GAAG,OAAO,QAAQ,MAAM,SAAS,KAAK,GAAG,SAAS;AAE7H,QAAO;;AAsjCT,SAAS,cAAc,OAAO;AAC5B,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO;CAET,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAEE,cAAc,OAAO,aACrB,cAAc,QACd,OAAO,eAAe,UAAU,KAAK;;;;;AC/gEzC,MAAa,eAAe;;;;ACA5B,SAAgB,WAAmD,KAAQ,MAAgC;CACzG,MAAM,SAAS,EAAE;AAEjB,KAAI,CAAC,SAAS,IAAI,CAChB,QAAO;AAET,KAAI,CAAC,QAAQ,KAAK,CAChB,QAAO;AAGT,QAAO,KAAK,QAAQ,KAAK,SAAS;AAChC,MAAI,QAAQ,IACV,KAAI,QAAQ,IAAI;AAGlB,SAAO;IACN,OAAO;;;;;;;;;;;ACRZ,SAAgB,aAAkC,KAAqD;CACrG,MAAM,SAAS,EAAE;AAEjB,KAAI,CAAC,SAAS,IAAI,CAChB,QAAO;AAGT,MAAK,MAAM,CAAC,GAAG,MAAM,cAAc,IAAI,CACrC,QAAO,KAAK;AAGd,QAAO;;;;;ACnBT,MAAM,KAAK;AACX,MAAM,KAAK;;;;AAKX,SAAgB,kBAAkB,OAAe,MAAyB;AACxE,KAAI,CAAC,SAAS,MAAM,IAAI,MAAM,WAAW,EACvC,QAAO;AAGT,QAAO,MAAM,QAAQ,KAAK,SAAS;AAEjC,MAAI,GAAG,KAAK,KAAK,CACf,QAAO;AAGT,MAAI,SAAS,KAAK,mBAAmB,CACnC,QAAO;AAGT,MAAI,SAAS,WAAW,KAAK,GAC3B,QAAO,KAAK,GAAG,mBAAmB,GAAG,KAAK,MAAM,EAAE;AAGpD,MAAI,SAAS,WAAW,KAAK,GAC3B,QAAO,KAAK,GAAG,mBAAmB,GAAG,KAAK,MAAM,EAAE;AAGpD,SAAO;GACP;;;;;AC9BJ,SAAgB,cAAoE,OAAU,QAAW,aAAgB;AACvH,QAAO,MAAM,QAAQ,QAAQ,YAAY;;;;;ACD3C,SAAgB,aAA+D,MAAiC,WAAiB;AAC/H,KAAI,SAAS,KAAK,IAAI,KACpB,KAAI;AAGF,SAFc,KAAK,MAAM,KAAK;UAGvB,OAAO;AACd,SAAO;;KAGT,QAAO;;;;;ACVX,SAAgB,eAAmD,MAAiC,YAAiC,UAAU,cAAc,KAAU;AACrK,KAAI,SAAS,KAAK,IAAI,KACpB,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,YAAY;AAEtC,MAAI,cAAc,SAChB,QAAO,OAAO,KAAK,MAAM,OAAO,EAAE,CAAC;AAGrC,SAAO;UACA,OAAO;AACd,SAAO,EAAE;;KAGX,QAAO,EAAE;;;;;ACcb,SAAgB,oBACd,MACA,MACA,SACI;AACJ,KAAI,WAAW,QAAQ,eAAe,EAAE;EACtC,MAAM,qBAAqB,QAAQ,eAAe,MAAM,KAAK;AAC7D,MAAI,sBAAsB,uBAAuB,KAC/C,QAAO;;AAIX,QAAO,QAAQ;;;;;ACjCjB,SAASE,UAA8D,KAAQ,UAAiC,SAAsD;AAEpK,KAAI,CADW,SAAS,KAAK,QAAQ,CAEnC;CAGF,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,WAAW,IAAI;CACrB,IAAIC;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAMD,UAAQ,GAAG,UAAU,iBAAiB,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE;;AAG9F,QAAO;EAAE,GAAG;GAAM,mBAAmB;EAAa;;AAIpD,SAASE,WAA+D,KAAQ,UAAiC,SAAsD;CACrK,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,WAAW,IAAI;CACrB,IAAID;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAMD,UAAQ,GAAG,UAAU,iBAAiB,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE;;AAI9F,KAAI,CADW,SAAS,KAAK,QAAQ,CAEnC;AAGF,QAAO;EAAE,GAAG;GAAM,mBAAmB;EAAa;;AAIpD,SAASG,cAAkE,KAAQ,UAAiC,SAAsD;CACxK,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,8BAAc,IAAI,SAAqB;CAC7C,MAAM,+BAAe,IAAI,SAAe;CACxC,MAAM,mCAAmB,IAAI,SAAgB;CAC7C,IAAIC;CACJ,MAAM,iBAAgC;AACpC,MAAI,MAAM,WAAW,EACnB,QAAO;EAGT,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAChD,MAAM,mBAAmB,oBAAoB,UAAU,cAAc,aAAa;EAClF,MAAM,WAAW,SAAS;AAE1B,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;EAG9B,MAAM,SAAS,UAAU,aAAa,QAAQ;EAC9C,MAAM,YAAY,aAAa,UAAU;EACzC,MAAM,eAAe,UAAU,YAAY,IAAI,OAAO;AAEtD,MAAI,CAAC,aAAa,CAAC,aACjB,QAAO,UAAU;EAGnB,MAAM,iBAAiB,SAAS,UAAU,aAAa;AACvD,MAAI,aAAa,CAAC,eAChB;EAGF,MAAM,UAAU;GAAE,GAAG;IAAW,mBAAmB;GAAW;AAC9D,MAAI,UACF,UAAS;AAGX,cAAY,IAAI,UAAU,eAAe;AACzC,eAAa,IAAI,UAAU,QAAQ;AACnC,mBAAiB,IAAI,UAAU,iBAAiB;AAEhD,MAAI,kBAAkB,QAAQ;GAC5B,MAAM,gBAAgB,aAAa,IAAI,OAAO;GAC9C,MAAM,oBAAoB,iBAAiB,IAAI,OAAO;AAEtD,OAAI,iBAAiB,mBAAmB;AACtC,QAAI,CAAC,cAAc,mBACjB,CAAC,cAAc,qBAA6B,EAAE;AAEhD,kBAAc,mBAAmB,KAAK,QAAQ;;;AAIlD,SAAO,UAAU;;AAGnB,QAAO,UAAU;;AAGnB,MAAMC,eAAa;CAAE,KAAKN;CAAS,MAAME;CAAU,SAASC;CAAa;AAIzE,SAAgB,WAAiE,MAAe,UAAiC,UAAoC,EAAE,EAAW;CAChL,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkBG,aAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,QAAO,QAAQ,KAAK,GAChB,KAAK,KAAK,QAAQ,gBAAgB,KAAK,UAAU,aAAa,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,GAClF,gBAAgB,MAAM,UAAU,aAAa,IAAI,EAAE;;;;;AChHzD,MAAMC,eAAa;CAAE,KAAKC;CAAS,MAAMC;CAAU,SAASC;CAAa;AAGzE,SAASF,UAA8D,KAAQ,UAA+B,SAAoD;AAEhK,KADuB,SAAS,KAAK,QAAQ,CAE3C,QAAO;CAIT,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAEnE,KAAI,QAAQ,SAAS,CACnB,MAAK,MAAM,SAAS,UAAU;EAE5B,MAAM,SAASA,UAAQ,OAAO,UADL;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG,CAC5C;AACzD,MAAI,OACF,QAAO;;;AASf,SAASC,WAA+D,KAAQ,UAA+B,SAAoD;CAEjK,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAEnE,KAAI,QAAQ,SAAS,CACnB,MAAK,MAAM,SAAS,UAAU;EAE5B,MAAM,SAASA,WAAS,OAAO,UADN;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG,CAC3C;AAC1D,MAAI,OACF,QAAO;;AAMb,KADuB,SAAS,KAAK,QAAQ,CAE3C,QAAO;;AAOX,SAASC,cAAkE,KAAQ,UAA+B,SAAoD;CACpK,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,iBAAgC;AACpC,MAAI,MAAM,WAAW,EACnB;EAEF,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAEhD,MAAM,WAAW,SADQ,oBAAoB,UAAU,cAAc,aAAa;AAGlF,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;AAI9B,MADuB,SAAS,UAAU,aAAa,CAErD,QAAO;AAGT,SAAO,UAAU;;AAGnB,QAAO,UAAU;;;;;AAOnB,SAAgB,SAA+D,MAAe,UAA+B,UAAkC,EAAE,EAAiB;CAChL,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkBJ,aAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,KAAI,QAAQ,KAAK,EAAE;AACjB,OAAK,MAAM,OAAO,MAAM;GACtB,MAAM,SAAS,gBAAuB,KAAK,UAAU,aAAa;AAClE,OAAI,OACF,QAAO;;AAIX;;AAGF,QAAO,gBAAuB,MAAM,UAAU,aAAa;;;;;AC9F7D,MAAMK,eAAa;CAAE,KAAKC;CAAS,MAAMC;CAAU,SAASC;CAAa;AAGzE,SAASF,UAA8D,KAAQ,UAAkC,SAAwC;AACvJ,UAAS,KAAK,QAAQ;CAEtB,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAGnE,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,OAAK,MAAM,SAAS,SAClB,WAAQ,OAAO,UAAU,iBAAiB;;;AAMhD,SAASC,WAA+D,KAAQ,UAAkC,SAAwC;CAExJ,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAGnE,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,OAAK,MAAM,SAAS,SAClB,YAAS,OAAO,UAAU,iBAAiB;;AAG/C,UAAS,KAAK,QAAQ;;AAIxB,SAASC,cAAkE,KAAQ,UAAkC,SAAwC;CAC3J,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,iBAAiB;AACrB,MAAI,MAAM,WAAW,EACnB;EAGF,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAEhD,MAAM,WAAW,SADQ,oBAAoB,UAAU,cAAc,aAAa;AAGlF,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;AAE9B,WAAS,UAAU,aAAa;AAChC,YAAU;;AAGZ,WAAU;;AAGZ,SAAgB,YAAkE,MAAe,UAAkC,UAAqC,EAAE,EAAQ;CAChL,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkBJ,aAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,KAAI,QAAQ,KAAK,CACf,MAAK,MAAM,OAAO,KAChB,iBAAuB,KAAK,UAAU,aAAa;KAGrD,iBAAuB,MAAM,UAAU,aAAa;;;;;AC9DxD,MAAM,aAAa;CAAE,KAAK;CAAS,MAAM;CAAU,SAAS;CAAa;AAGzE,SAAS,QAAmF,KAAQ,UAAiC,SAAqD;CACxL,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,SAAS,SAAS,KAAK,QAAQ;CACrC,MAAM,WAAW,IAAI;CACrB,IAAIK;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAM,QAAQ,GAAG,UAAU,iBAAiB,CAAC;;AAG3E,QAAO;EAAE,GAAG;GAAS,mBAAmB;EAAa;;AAIvD,SAAS,SAAoF,KAAQ,UAAiC,SAAqD;CACzL,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,WAAW,IAAI;CACrB,IAAIA;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAM,SAAS,GAAG,UAAU,iBAAiB,CAAC;;AAI5E,QAAO;EAAE,GAFM,SAAS,KAAK,QAAQ;GAEhB,mBAAmB;EAAa;;AAIvD,SAAS,YAAuF,KAAQ,UAAiC,SAAqD;CAC5L,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,wBAAQ,IAAI,SAA6B;CAC/C,MAAM,mCAAmB,IAAI,SAAgB;CAC7C,IAAIC;CAEJ,MAAM,iBAAiB;AACrB,MAAI,MAAM,WAAW,EACnB,QAAO;EAET,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAChD,MAAM,mBAAmB,oBAAoB,UAAU,cAAc,aAAa;EAClF,MAAM,WAAW,SAAS;AAE1B,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;EAE9B,MAAM,MAAM,SAAS,UAAU,aAAa;AAC5C,QAAM,IAAI,UAAU,IAAI;AACxB,mBAAiB,IAAI,UAAU,iBAAiB;EAGhD,MAAM,SAAS,UAAU,aAAa,QAAQ;AAC9C,MAAI,QAAQ;GACV,MAAM,YAAY,MAAM,IAAI,OAAO;GACnC,MAAM,oBAAoB,iBAAiB,IAAI,OAAO;AAEtD,OAAI,aAAa,kBACf,KAAI,UAAU,mBACZ,WAAU,mBAAmB,KAAK,IAAI;OAEtC,CAAC,UAAU,qBAA2C,CAAC,IAAI;;AAKjE,MAAI,aAAa,UAAU,EACzB,UAAS;AAGX,SAAO,UAAU;;AAGnB,QAAO,UAAU;;AAKnB,SAAgB,QAAmF,MAAe,UAAiC,UAAiC,EAAE,EAAuC;CAC3N,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkB,WAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,QAAO,QAAQ,KAAK,GAChB,KAAK,KAAK,QAAQ,gBAA0B,KAAK,UAAU,aAAa,CAAC,GACzE,gBAA0B,MAAM,UAAU,aAAa;;;;;;;;ACnF7D,SAAgB,WAMd,MAAW,SAA0D;CACrE,MAAM,EAAE,cAAc,YAAY,SAAS,MAAM,cAAc,eAAe,WAAW,EAAE;CAC3F,MAAMC,SAAc,EAAE;CACtB,MAAM,sBAAM,IAAI,KAAqB;AAErC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,KAAK,IAAI;AAEf,MAAI,CAAC,IAAI,IAAI,GAAG,CACd,KAAI,IAAI,IAAI,IAAI;;AAIpB,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,WAAW,IAAI;EACrB,MAAM,SAAS,IAAI,IAAI,SAAS;AAEhC,MAAI,CAAC,UAAU,CAAC,UAAU;AACxB,UAAO,KAAK,IAAI;AAEhB;;EAGF,MAAM,WAAW,OAAO;AAExB,MAAI,OAAO,SAAS,IAAI,YAAY,SAAS,CAC3C,QAAO,eAAe,CAAC,IAAI;WAClB,MAAM,QAAQ,SAAS,CAChC,UAAS,KAAK,IAAI;OACb;GACL,MAAM,UAAU,YAAY,YAAY,UAAU,CAAC;AACnD,SAAM,IAAI,MAAM,QAAQ;;;AAI5B,QAAO;;;;;;;;AChDT,SAAgB,WAId,MAAe,UAAoC,EAAE,EAAO;CAC5D,MAAM,EAAE,cAAc,eAAe;CACrC,MAAMC,SAAc,EAAE;AAEtB,KAAI,CAAC,KACH,QAAO;AAGT,aAAY,OAAO,MAAM,OAAO,KAAK;EAAE,GAAG;GAAI,cAAc;EAAW,CAAC,EAAE,QAAQ;AAElF,QAAO"}
1
+ {"version":3,"file":"index.js","names":["forked: [T[], T[]]","DefaultCloningStrategy: CloningStrategy","cloneDeep","strategy","preImpl","newChildren: T[] | undefined","postImpl","breadthImpl","queue: QueueItem<T, CK>[]","result: T","strategies","strategies","preImpl","postImpl","breadthImpl","queue: QueueItem<T, CK>[]","strategies","preImpl","postImpl","breadthImpl","queue: QueueItem<T, CK>[]","newChildren: TreeLike<R, CK>[] | undefined","queue: QueueItem<T, CK>[]","result: TreeLike<R, CK>","result: R[]","result: R[]"],"sources":["../src/utils/typeof/types.ts","../src/utils/typeof/isArray.ts","../src/utils/typeof/isAsyncFunction.ts","../src/utils/typeof/isBigInt.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isDate.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isError.ts","../src/utils/typeof/isNaN.ts","../src/utils/typeof/isFalsy.ts","../src/utils/typeof/isFile.ts","../src/utils/typeof/isFunction.ts","../src/utils/typeof/isGeneratorFunction.ts","../src/utils/typeof/isInfinity.ts","../src/utils/typeof/isInteger.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isIterable.ts","../src/utils/typeof/isMap.ts","../src/utils/typeof/isNull.ts","../src/utils/typeof/isNumber.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isPromiseLike.ts","../src/utils/typeof/isRegExp.ts","../src/utils/typeof/isSet.ts","../src/utils/typeof/isString.ts","../src/utils/typeof/isSymbol.ts","../src/utils/typeof/isUndefined.ts","../src/utils/typeof/isURLSearchParams.ts","../src/utils/typeof/isWeakMap.ts","../src/utils/typeof/isWeakSet.ts","../src/utils/typeof/isWebSocket.ts","../src/utils/typeof/isWindow.ts","../src/utils/array/arrayCast.ts","../src/utils/array/arrayCompete.ts","../src/utils/array/arrayCounting.ts","../src/utils/array/arrayDifference.ts","../src/utils/array/arrayFirst.ts","../src/utils/array/arrayFork.ts","../src/utils/array/arrayIntersection.ts","../src/utils/array/arrayLast.ts","../src/utils/array/arrayMerge.ts","../src/utils/array/arrayPick.ts","../src/utils/array/arrayReplace.ts","../src/utils/array/arraySplit.ts","../src/utils/function/to.ts","../src/utils/string/stringToNumber.ts","../src/utils/math/toMathBignumber.ts","../src/utils/math/toMathDecimal.ts","../src/utils/math/toMathEvaluate.ts","../src/utils/object/cloneDeep.ts","../src/utils/object/objectKeys.ts","../src/utils/object/enumTypeCheck.ts","../src/utils/object/objectEntries.ts","../src/utils/object/objectValues.ts","../src/utils/object/enumEntries.ts","../src/utils/object/enumKeys.ts","../src/utils/object/enumValues.ts","../src/utils/object/mapEntries.ts","../node_modules/.pnpm/radashi@12.7.1/node_modules/radashi/dist/radashi.js","../src/utils/object/objectAssign.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectSwitch.ts","../src/utils/string/stringInitialCase.ts","../src/utils/string/stringReplace.ts","../src/utils/string/stringToJson.ts","../src/utils/string/stringToValues.ts","../src/utils/tree/types.ts","../src/utils/tree/treeFilter.ts","../src/utils/tree/treeFind.ts","../src/utils/tree/treeForEach.ts","../src/utils/tree/treeMap.ts","../src/utils/tree/rowsToTree.ts","../src/utils/tree/treeToRows.ts"],"sourcesContent":["export const prototypeStrings = {\n string: \"[object String]\",\n number: \"[object Number]\",\n boolean: \"[object Boolean]\",\n object: \"[object Object]\",\n array: \"[object Array]\",\n bigInt: \"[object BigInt]\",\n symbol: \"[object Symbol]\",\n function: \"[object Function]\",\n generatorFunction: \"[object GeneratorFunction]\",\n asyncFunction: \"[object AsyncFunction]\",\n promise: \"[object Promise]\",\n null: \"[object Null]\",\n undefined: \"[object Undefined]\",\n date: \"[object Date]\",\n regExp: \"[object RegExp]\",\n error: \"[object Error]\",\n file: \"[object File]\",\n map: \"[object Map]\",\n weakMap: \"[object WeakMap]\",\n set: \"[object Set]\",\n weakSet: \"[object WeakSet]\",\n window: \"[object Window]\",\n webSocket: \"[object WebSocket]\",\n URLSearchParams: \"[object URLSearchParams]\",\n} as const;\n\nexport function resolvePrototypeString(value: unknown) {\n return Object.prototype.toString.call(value);\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isArray<T extends unknown[]>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.array;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isAsyncFunction<T extends AsyncFunc>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.asyncFunction;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isBigInt<T extends bigint>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.bigInt;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isBoolean<T extends boolean>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.boolean;\n}\n","import type { Class } from \"type-fest\";\nimport { resolvePrototypeString } from \"./types\";\n\nexport function isClass<T extends Class<AnyObject>>(value: unknown): value is T {\n return resolvePrototypeString(value).startsWith(\"class \");\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isDate<T extends Date>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.date;\n}\n","/**\n * 判断给定的值是否相等\n * @reference https://github.com/radashi-org/radashi/blob/main/src/typed/isEqual.ts\n *\n * @param {T} x\n * @param {T} y\n */\nexport function isEqual<T>(x: T, y: T): boolean {\n if (Object.is(x, y)) {\n return true;\n }\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n if (typeof x !== \"object\" || x === null || typeof y !== \"object\" || y === null) {\n return false;\n }\n\n const keysX = Reflect.ownKeys(x) as (keyof typeof x)[];\n const keysY = Reflect.ownKeys(y);\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (const key of keysX) {\n if (!Reflect.has(y, key)) {\n return false;\n }\n if (!isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isError<T extends Error>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.error;\n}\n","export function isNaN<T extends number>(value: unknown): value is T {\n return Number.isNaN(value);\n}\n","import { isNaN } from \"./isNaN\";\n\nexport function isFalsy(value: unknown): boolean {\n if (isNaN(value)) {\n return true;\n }\n\n return ([null, undefined, false, 0, 0n, \"\"] as unknown[]).includes(value);\n}\n\nexport function isFalsyLike(value: unknown): boolean {\n return ([\"null\", \"undefined\", \"false\", \"NaN\"] as unknown[]).includes(value);\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isFile<T extends File>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.file;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isFunction<T extends Func>(value: unknown): value is T {\n const prototypeList: string[] = [prototypeStrings.function, prototypeStrings.generatorFunction, prototypeStrings.asyncFunction];\n\n return prototypeList.includes(resolvePrototypeString(value));\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isGeneratorFunction<T extends Func>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.generatorFunction;\n}\n","import { isNaN } from \"./isNaN\";\n\nexport function isInfinity(value: unknown): boolean {\n if (isNaN(value)) {\n return true;\n }\n\n return ([Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY] as unknown[]).includes(value);\n}\n\nexport function isInfinityLike(value: unknown): boolean {\n return ([\"Infinity\", \"-Infinity\", \"NaN\"] as unknown[]).includes(value);\n}\n","export function isInteger<T extends number>(value: unknown): value is T {\n return Number.isInteger(value);\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isObject<T extends Record<PropertyKey, unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.object;\n}\n","import { isObject } from \"./isObject\";\n\nexport function isIterable<T extends Iterable<unknown>>(value: unknown): value is T {\n return isObject(value) && Symbol.iterator in value;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isMap<T extends Map<unknown, unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.map;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isNull<T extends null>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.null;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isNumber<T extends number>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.number;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isPromise<T extends Promise<unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.promise;\n}\n","import { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\nimport { isPromise } from \"./isPromise\";\n\nexport function isPromiseLike<T extends PromiseLike<unknown>>(value: unknown): value is T {\n return isPromise(value) || (isObject(value) && isFunction(value[\"then\"]));\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isRegExp<T extends RegExp>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.regExp;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isSet<T extends Set<unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.set;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isString<T extends string>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.string;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isSymbol<T extends symbol>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.symbol;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isUndefined<T extends undefined>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.undefined;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isURLSearchParams<T extends Window>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.URLSearchParams;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWeakMap<T extends WeakMap<AnyObject, unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.weakMap;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWeakSet<T extends WeakSet<AnyObject>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.weakSet;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWebSocket<T extends WebSocket>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.webSocket;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isWindow<T extends Window>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.window;\n}\n","import { isArray, isNull, isUndefined } from \"../typeof\";\n\n/**\n * 构造数组\n * @param candidate 待构造项\n * @param checkEmpty 是否检查 `undefined` 和 `null`\n */\nexport function arrayCast<T>(candidate: T | T[], checkEmpty = true): T[] {\n if (checkEmpty && (isUndefined(candidate) || isNull(candidate))) {\n return [];\n }\n\n return isArray(candidate) ? [...candidate] : [candidate];\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组竞争\n * - 返回在匹配函数的比较条件中获胜的最终项目,适用于更复杂的最小值/最大值计算\n *\n * @param initialList 数组\n * @param match 匹配函数\n */\nexport function arrayCompete<T>(initialList: readonly T[], match: (a: T, b: T) => T): T | null {\n if (!isArray(initialList) || initialList.length === 0 || !isFunction(match)) {\n return null;\n }\n\n return initialList.reduce(match);\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 统计数组的项目出现次数\n * - 通过给定的标识符匹配函数,返回一个对象,其中键是回调函数返回的 key 值,每个值是一个整数,表示该 key 出现的次数\n *\n * @param initialList 初始数组\n * @param match 匹配函数\n */\nexport function arrayCounting<T, K extends PropertyKey>(initialList: readonly T[], match: (row: T) => K): Record<string, number> {\n if (!isArray(initialList) || !isFunction(match)) {\n return {};\n }\n\n return initialList.reduce<Record<string, number>>((prev, curr) => {\n const id = match(curr).toString();\n prev[id] = (prev[id] ?? 0) + 1;\n\n return prev;\n }, {});\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 求数组差集\n *\n * @param initialList 初始数组\n * @param diffList 对比数组\n * @param match 匹配函数\n */\nexport function arrayDifference<T>(initialList: readonly T[], diffList: readonly T[], match?: (row: T) => unknown): T[] {\n if (!isArray(initialList) && !isArray(diffList)) {\n return [];\n }\n if (!isArray(initialList) || !initialList.length) {\n return [...diffList];\n }\n if (!isArray(diffList) || !diffList.length) {\n return [...initialList];\n }\n if (!isFunction(match)) {\n const arraySet = new Set(diffList);\n\n return Array.from(new Set(initialList.filter((item) => !arraySet.has(item))));\n }\n\n const map = new Map<unknown, boolean>();\n\n diffList.forEach((item) => {\n map.set(match(item), true);\n });\n\n return initialList.filter((a) => !map.get(match(a)));\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 获取数组第一项\n *\n * @param initialList 初始数组\n * @param saveValue 安全值\n */\nexport function arrayFirst<T>(initialList: readonly T[], saveValue?: T): T | undefined {\n if (!isArray(initialList) || initialList.length === 0) {\n return saveValue;\n }\n\n return initialList[0];\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 数组分组过滤\n * - 给定一个数组和一个条件,返回一个由两个数组组成的元组,其中第一个数组包含所有满足条件的项,第二个数组包含所有不满足条件的项\n *\n * @param initialList 初始数组\n * @param match 条件匹配函数\n */\nexport function arrayFork<T>(initialList: readonly T[], match: (item: T) => boolean): [T[], T[]] {\n const forked: [T[], T[]] = [[], []];\n\n if (isArray(initialList)) {\n for (const item of initialList) {\n forked[match(item) ? 0 : 1].push(item);\n }\n }\n\n return forked;\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 求数组交集\n *\n * @param initialList 初始数组\n * @param diffList 对比数组\n * @param match 匹配函数\n */\nexport function arrayIntersection<T>(initialList: readonly T[], diffList: readonly T[], match?: (row: T) => unknown): T[] {\n if (!isArray(initialList) && !isArray(diffList)) {\n return [];\n }\n if (!isArray(initialList) || !initialList.length) {\n return [...diffList];\n }\n if (!isArray(diffList) || !diffList.length) {\n return [...initialList];\n }\n if (!isFunction(match)) {\n const arraySet = new Set(diffList);\n\n return Array.from(new Set(initialList.filter((item) => arraySet.has(item))));\n }\n\n const map = new Map<unknown, boolean>();\n\n diffList.forEach((item) => {\n map.set(match(item), true);\n });\n\n return initialList.filter((a) => map.get(match(a)));\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 获取数组最后一项\n *\n * @param initialList 初始数组\n * @param saveValue 安全值\n */\nexport function arrayLast<T>(initialList: readonly T[], saveValue?: T): T | undefined {\n if (!isArray(initialList) || initialList.length === 0) {\n return saveValue;\n }\n\n return initialList[initialList.length - 1];\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组合并\n * - 通过给定的标识符匹配函数,用第二个数组中的匹配项替换第一个数组中匹配项的所有内容\n *\n * @param initialList 初始数组\n * @param mergeList 待合并数组\n * @param match 匹配函数\n */\nexport function arrayMerge<T>(initialList: readonly T[], mergeList: readonly T[], match?: (item: T) => unknown): T[] {\n if (!isArray(initialList)) {\n return [];\n }\n if (!isArray(mergeList)) {\n return [...initialList];\n }\n if (!isFunction(match)) {\n return Array.from(new Set([...initialList, ...mergeList]));\n }\n\n const keys = new Map();\n for (const item of mergeList) {\n keys.set(match(item), item);\n }\n\n return initialList.map((prevItem) => {\n const key = match(prevItem);\n\n return keys.has(key) ? keys.get(key)! : prevItem;\n });\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组选择\n * - 一次性应用 `filter` 和 `map` 操作\n *\n * @param initialList 初始数组\n * @param filter filter 函数\n * @param mapper map 函数\n */\nexport function arrayPick<T, K = T>(initialList: readonly T[], filter: (row: T, index: number) => boolean, mapper?: ((row: T, index: number) => K) | undefined) {\n if (!isArray(initialList)) {\n return [];\n }\n if (!isFunction(filter)) {\n return [...initialList];\n }\n\n const hasMapper = isFunction(mapper);\n\n return initialList.reduce<K[]>((prev, curr, index) => {\n if (!filter(curr, index)) {\n return prev;\n }\n if (hasMapper) {\n prev.push(mapper(curr, index));\n } else {\n prev.push(curr as unknown as K);\n }\n\n return prev;\n }, []);\n}\n","import { isFunction } from \"../typeof\";\n\n/**\n * 数组项替换\n * - 在给定的数组中,替换符合匹配函数结果的项目。只替换第一个匹配项。始终返回原始数组的副本。\n *\n * @param initialList 初始数组\n * @param newItem 替换项\n * @param match 匹配函数\n */\nexport function arrayReplace<T>(initialList: readonly T[], newItem: T, match: (row: T, index: number) => boolean): T[] {\n if (!initialList) {\n return [];\n }\n if (newItem === undefined || !isFunction(match)) {\n return [...initialList];\n }\n\n for (let i = 0; i < initialList.length; i++) {\n const item = initialList[i];\n\n if (item !== undefined && match(item, i)) {\n return [...initialList.slice(0, i), newItem, ...initialList.slice(i + 1, initialList.length)];\n }\n }\n\n return [...initialList];\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 数组切分\n * - 将数组以指定的长度切分后,组合在高维数组中\n *\n * @param initialList 初始数组\n * @param size 分割尺寸,默认 `10`\n */\nexport function arraySplit<T>(initialList: readonly T[], size = 10): T[][] {\n if (!isArray(initialList)) {\n return [];\n }\n\n const count = Math.ceil(initialList.length / size);\n\n return Array.from({ length: count })\n .fill(null)\n .map((_c, i) => {\n return initialList.slice(i * size, i * size + size);\n });\n}\n","/**\n * @param promise\n * @param errorExt - 可以传递给err对象的其他信息\n */\nexport function to<T, U = Error>(\n promise: Readonly<Promise<T>>,\n errorExt?: UnknownObject,\n): Promise<[U, undefined] | [null, T]> {\n return promise\n .then<[null, T]>((data: T) => [null, data])\n .catch<[U, undefined]>((err: U) => {\n if (errorExt) {\n const parsedError = { ...err, ...errorExt };\n\n return [parsedError, undefined];\n }\n\n const defaultError = err ? err : new Error(\"defaultError\");\n\n return [defaultError as U, undefined];\n });\n}\n","/**\n * 从字符串中提取数字\n */\nexport function stringToNumber(value: string) {\n const cleaned = value.replace(/[^0-9.-]/g, \"\");\n let isDecimal = false;\n let signCount = 0;\n let firstIndex = -1;\n const stringList = cleaned.split(\"\").map((s, i) => {\n if (s === \".\") {\n if (isDecimal) {\n return \"\";\n }\n isDecimal = true;\n\n return \".\";\n }\n if (s === \"-\") {\n firstIndex === -1 && signCount++;\n\n return \"\";\n }\n\n firstIndex === -1 && (firstIndex = i);\n\n return s;\n });\n\n const sign = signCount % 2 === 1 ? \"-\" : \"\";\n\n if (firstIndex === -1) {\n return sign + \"0\";\n }\n\n // 组合符号和数字部分,并处理前导小数点\n let result = stringList.join(\"\");\n if (result.startsWith(\".\")) {\n result = \"0\" + result;\n }\n if (result.endsWith(\".\")) {\n result = result.slice(0, -1);\n }\n\n return sign + result;\n}\n","import type { BigNumber, MathJsInstance } from \"mathjs\";\nimport { stringToNumber } from \"../string/stringToNumber\";\nimport { isFalsy, isFalsyLike, isInfinity, isInfinityLike } from \"../typeof\";\n\n/**\n * 将任意类型的值转换为 `math.bignumber`\n *\n * @param mathJsInstance mathJs 实例\n * @param value 任意类型的值\n * @param saveValue 安全值\n */\nexport function toMathBignumber(mathJsInstance: MathJsInstance, value: unknown, saveValue?: BigNumber | undefined): BigNumber {\n const errorValue = saveValue ?? mathJsInstance.bignumber(0);\n\n if (isFalsy(value) || isFalsyLike(value) || isInfinity(value) || isInfinityLike(value)) {\n return errorValue;\n }\n\n try {\n return mathJsInstance.bignumber(stringToNumber(`${value}`));\n } catch (error) {\n return errorValue;\n }\n}\n","import type { BigNumber, MathJsInstance } from \"mathjs\";\nimport { toMathBignumber } from \"./toMathBignumber\";\n\n/**\n * 将任意类型的值转换为十进制数字字符串\n *\n * @param mathJsInstance mathJs 实例\n * @param value 任意类型的值\n * @param precision 精度\n * @param isFormat 是否格式化为字符串\n */\nexport function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: number, isFormat?: true): string;\nexport function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: undefined, isFormat?: false): BigNumber;\nexport function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: number, isFormat = true): string | BigNumber {\n const bigNumber = toMathBignumber(mathJsInstance, value);\n\n return isFormat ? mathJsInstance.format(bigNumber, { notation: \"fixed\", precision }) : bigNumber;\n}\n","import type { BigNumber, MathExpression, MathJsInstance, Matrix } from \"mathjs\";\nimport { toMathBignumber } from \"./toMathBignumber\";\n\n/**\n * 数学表达式求值\n *\n * @param mathJsInstance mathJs 实例\n * @param expr 表达式\n * @param scope 键值映射\n */\nexport function toMathEvaluate(mathJsInstance: MathJsInstance, expr: MathExpression | Matrix, scope?: Record<string, BigNumber>): string {\n const evaluateValue = `${mathJsInstance.evaluate(expr, scope || {})}`;\n\n return mathJsInstance.format(toMathBignumber(mathJsInstance, evaluateValue), { notation: \"fixed\" });\n}\n","import { isArray, isMap, isObject, isSet } from \"../typeof\";\n\ninterface CloningStrategy {\n cloneMap: <K, V>(parent: Map<K, V>, track: (newParent: Map<K, V>) => Map<K, V>, clone: <T>(value: T) => T) => Map<K, V> | null;\n cloneSet: <T>(parent: Set<T>, track: (newParent: Set<T>) => Set<T>, clone: <T>(value: T) => T) => Set<T> | null;\n cloneArray: <T>(parent: readonly T[], track: (newParent: T[]) => T[], clone: <T>(value: T) => T) => T[] | null;\n cloneObject: <T extends AnyObject>(parent: T, track: (newParent: T) => T, clone: <T>(value: T) => T) => T | null;\n cloneOther: <T>(parent: T, track: (newParent: T) => T, clone: <T>(value: T) => T) => T | null;\n}\n\nconst DefaultCloningStrategy: CloningStrategy = {\n cloneMap<K, V>(input: Map<K, V>, track: (newParent: Map<K, V>) => Map<K, V>, clone: <T>(value: T) => T): Map<K, V> {\n const output = track(new Map());\n for (const [key, value] of input) {\n output.set(key, clone(value));\n }\n\n return output;\n },\n cloneSet<T>(input: Set<T>, track: (newParent: Set<T>) => Set<T>, clone: <T>(value: T) => T): Set<T> {\n const output = track(new Set());\n for (const value of input) {\n output.add(clone(value));\n }\n\n return output;\n },\n cloneArray<T>(input: readonly T[], track: (newParent: T[]) => T[], clone: <T>(value: T) => T): T[] {\n // Use .forEach for correct handling of sparse arrays\n const output = track(new Array(input.length));\n input.forEach((value, index) => {\n output[index] = clone(value);\n });\n\n return output;\n },\n cloneObject<T extends AnyObject>(input: T, track: (newParent: T) => T, clone: <T>(value: T) => T): T {\n const output = track(Object.create(Object.getPrototypeOf(input)));\n for (const key of Reflect.ownKeys(input)) {\n // By copying the property descriptors, we preserve computed\n // properties and non-enumerable properties.\n const descriptor = Object.getOwnPropertyDescriptor(input, key)!;\n if (\"value\" in descriptor) {\n descriptor.value = clone(descriptor.value);\n }\n Object.defineProperty(output, key, descriptor);\n }\n\n return output;\n },\n cloneOther<T>(input: T, track: (newParent: T) => T): T {\n return track(input);\n },\n};\n\n\n/**\n * cloneDeep\n * @reference https://github.com/radashi-org/radashi/blob/main/src/object/cloneDeep.ts\n */\nexport function cloneDeep<T extends AnyObject>(root: T, customStrategy?: Partial<CloningStrategy>): T {\n const strategy = { ...DefaultCloningStrategy, ...customStrategy };\n\n const tracked = new Map<unknown, unknown>();\n const track = (parent: unknown, newParent: unknown) => {\n tracked.set(parent, newParent);\n\n return newParent;\n };\n\n const clone = <T>(value: T): T => {\n return value && typeof value === \"object\" ? ((tracked.get(value) ?? cloneDeep(value, strategy)) as T) : value;\n };\n\n const cloneDeep = (parent: unknown, strategy: CloningStrategy): unknown => {\n const cloneParent = (\n isObject(parent)\n ? strategy.cloneObject\n : isArray(parent)\n ? strategy.cloneArray\n : isMap(parent)\n ? strategy.cloneMap\n : isSet(parent)\n ? strategy.cloneSet\n : strategy.cloneOther\n ) as (newParent: unknown, track: (newParent: unknown) => unknown, clone: (value: unknown) => unknown) => unknown;\n\n const newParent = cloneParent(parent, track.bind(null, parent), clone);\n if (!newParent) {\n // Use the default strategy if null is returned.\n return cloneDeep(parent, DefaultCloningStrategy);\n }\n\n tracked.set(parent, newParent);\n\n return newParent;\n };\n\n return cloneDeep(root, strategy) as T;\n}\n","/**\n * 返回对象的可枚举属性和方法的名称\n * - `Object.keys` 始终返回 `string[]` 类型,此函数可以返回具体类型\n *\n * @param obj 对象\n */\nexport function objectKeys<O extends AnyObject>(obj: O): (keyof O)[] {\n return Object.keys(obj);\n}\n","import { isObject } from \"../typeof\";\nimport { objectKeys } from \"./objectKeys\";\n\nexport function enumTypeCheck<E extends AnyObject>(enumeration: E) {\n if (!isObject(enumeration)) {\n throw Error(`function enumKeys expected parameter is a enum, but got ${typeof enumeration}`);\n }\n\n if (!objectKeys(enumeration).length) {\n throw Error(\"Enum requires at least one member\");\n }\n\n return enumeration;\n}\n","/**\n * 返回对象的可枚举属性的键/值数组\n *\n * @param obj 对象\n */\nexport function objectEntries<O extends AnyObject>(obj: O): [string & keyof O, O[keyof O]][] {\n return Object.entries(obj);\n}\n","import type { UnionToTuple, ValueOf } from \"type-fest\";\n\n/**\n * 返回对象的可枚举属性的值数组\n *\n * @param obj 对象\n */\nexport function objectValues<O extends AnyObject>(obj: O): UnionToTuple<ValueOf<O>> {\n return Object.values(obj) as UnionToTuple<ValueOf<O>>;\n}\n","import type { NonEmptyObject } from \"type-fest\";\nimport { enumTypeCheck } from \"./enumTypeCheck\";\nimport { objectEntries } from \"./objectEntries\";\nimport { objectKeys } from \"./objectKeys\";\nimport { objectValues } from \"./objectValues\";\n\n/**\n * 返回枚举的属性的键/值数组\n *\n * @param enumeration 枚举\n */\nexport function enumEntries<E extends AnyObject>(enumeration: NonEmptyObject<E>): [keyof E, E[keyof E]][] {\n const e = enumTypeCheck(enumeration);\n const keys = objectKeys(e) as [keyof E, ...(keyof E)[]];\n const values = objectValues(e);\n const entries = objectEntries(e);\n const isTwoWayEnum = keys.every((k) => values.some((v) => `${v}` === k));\n\n if (isTwoWayEnum) {\n return entries.splice(keys.length / 2, keys.length / 2);\n }\n\n return entries;\n}\n","import type { NonEmptyObject } from \"type-fest\";\nimport { enumTypeCheck } from \"./enumTypeCheck\";\nimport { objectKeys } from \"./objectKeys\";\nimport { objectValues } from \"./objectValues\";\n\n/**\n * 获取枚举所有属性的键\n *\n * @param enumeration 枚举\n */\nexport function enumKeys<E extends AnyObject>(enumeration: NonEmptyObject<E>): [keyof E, ...(keyof E)[]] {\n const e = enumTypeCheck(enumeration);\n const keys = objectKeys(e) as [keyof E, ...(keyof E)[]];\n const values = objectValues(e);\n const isTwoWayEnum = keys.every((k) => values.some((v) => `${v}` === k));\n\n if (isTwoWayEnum) {\n return keys.splice(keys.length / 2, keys.length / 2) as [keyof E, ...(keyof E)[]];\n }\n\n return keys;\n}\n","import type { NonEmptyObject, UnionToTuple, ValueOf } from \"type-fest\";\nimport { enumTypeCheck } from \"./enumTypeCheck\";\nimport { objectKeys } from \"./objectKeys\";\nimport { objectValues } from \"./objectValues\";\n\n/**\n * 获取枚举所有属性的值\n *\n * @param enumeration 枚举\n */\nexport function enumValues<E extends AnyObject>(enumeration: NonEmptyObject<E>): UnionToTuple<ValueOf<E>> {\n const e = enumTypeCheck(enumeration);\n const keys = objectKeys(e) as [keyof E, ...(keyof E)[]];\n const values = objectValues(e);\n const isTwoWayEnum = keys.every((k) => values.some((v) => `${v}` === k));\n\n if (isTwoWayEnum) {\n return values.splice(keys.length / 2, keys.length / 2) as UnionToTuple<ValueOf<E>>;\n }\n\n return values;\n}\n","import { objectEntries } from \"./objectEntries\";\n\nexport function mapEntries<TKey extends PropertyKey, TValue, TNewKey extends PropertyKey, TNewValue>(\n obj: UnknownObject<TKey, TValue>,\n toEntry: (key: TKey, value: TValue) => [TNewKey, TNewValue],\n): UnknownObject<TNewKey, TNewValue> {\n const defaultResult = {} as UnknownObject<TNewKey, TNewValue>;\n\n if (!obj) {\n return defaultResult;\n }\n\n return objectEntries(obj).reduce((acc, [key, value]) => {\n const [newKey, newValue] = toEntry(key, value);\n acc[newKey] = newValue;\n\n return acc;\n }, defaultResult);\n}\n","// src/array/alphabetical.ts\nfunction alphabetical(array, getter, direction = \"asc\") {\n if (!array) {\n return [];\n }\n const asc = (a, b) => `${getter(a)}`.localeCompare(getter(b));\n const dsc = (a, b) => `${getter(b)}`.localeCompare(getter(a));\n return array.slice().sort(direction === \"desc\" ? dsc : asc);\n}\n\n// src/array/boil.ts\nfunction boil(array, compareFunc) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n return array.reduce(compareFunc);\n}\n\n// src/array/cartesianProduct.ts\nfunction cartesianProduct(...arrays) {\n let out = [[]];\n for (const array of arrays) {\n const result = [];\n for (const currentArray of out) {\n for (const item of array) {\n const currentArrayCopy = currentArray.slice();\n currentArrayCopy.push(item);\n result.push(currentArrayCopy);\n }\n }\n out = result;\n }\n return out;\n}\n\n// src/array/castArray.ts\nfunction castArray(value) {\n return Array.isArray(value) ? value.slice() : [value];\n}\n\n// src/array/castArrayIfExists.ts\nfunction castArrayIfExists(value) {\n return Array.isArray(value) ? value.slice() : value != null ? [value] : value;\n}\n\n// src/array/cluster.ts\nfunction cluster(array, size = 2) {\n const clusters = [];\n if (size > 0) {\n for (let i = 0; i < array.length; i += size) {\n clusters.push(array.slice(i, i + size));\n }\n }\n return clusters;\n}\n\n// src/array/concat.ts\nfunction concat(...values) {\n const result = [];\n const append = (value) => value != null && result.push(value);\n for (const value of values) {\n if (Array.isArray(value)) {\n value.forEach(append);\n } else {\n append(value);\n }\n }\n return result;\n}\n\n// src/array/counting.ts\nfunction counting(array, identity2) {\n if (!array) {\n return {};\n }\n return array.reduce(\n (acc, item) => {\n const id = identity2(item);\n acc[id] = (acc[id] ?? 0) + 1;\n return acc;\n },\n {}\n );\n}\n\n// src/array/diff.ts\nfunction diff(root, other, identity2 = (t) => t) {\n if (!(root == null ? void 0 : root.length) && !(other == null ? void 0 : other.length)) {\n return [];\n }\n if ((root == null ? void 0 : root.length) === void 0) {\n return [...other];\n }\n if (!(other == null ? void 0 : other.length)) {\n return [...root];\n }\n const bKeys = other.reduce(\n (acc, item) => {\n acc[identity2(item)] = true;\n return acc;\n },\n {}\n );\n return root.filter((a) => !bKeys[identity2(a)]);\n}\n\n// src/array/first.ts\nfunction first(array, defaultValue) {\n return (array == null ? void 0 : array.length) > 0 ? array[0] : defaultValue;\n}\n\n// src/array/flat.ts\nfunction flat(lists) {\n return lists.reduce((acc, list2) => {\n acc.push(...list2);\n return acc;\n }, []);\n}\n\n// src/array/fork.ts\nfunction fork(array, condition) {\n const forked = [[], []];\n if (array) {\n for (const item of array) {\n forked[condition(item) ? 0 : 1].push(item);\n }\n }\n return forked;\n}\n\n// src/array/group.ts\nfunction group(array, getGroupId) {\n const groups = /* @__PURE__ */ Object.create(null);\n array.forEach((item, index) => {\n const groupId = getGroupId(item, index);\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n groups[groupId].push(item);\n });\n return groups;\n}\n\n// src/array/intersects.ts\nfunction intersects(listA, listB, identity2) {\n if (!listA || !listB) {\n return false;\n }\n if (identity2) {\n const known = new Set(listA.map(identity2));\n return listB.some((item) => known.has(identity2(item)));\n }\n return listB.some((item) => listA.includes(item));\n}\n\n// src/array/isArrayEqual.ts\nfunction isArrayEqual(array1, array2) {\n if (array1 !== array2) {\n if (array1.length !== array2.length) {\n return false;\n }\n for (let i = 0; i < array1.length; i++) {\n if (!Object.is(array1[i], array2[i])) {\n return false;\n }\n }\n }\n return true;\n}\n\n// src/array/iterate.ts\nfunction iterate(count, func, initValue) {\n let value = initValue;\n for (let i = 1; i <= count; i++) {\n value = func(value, i);\n }\n return value;\n}\n\n// src/array/last.ts\nfunction last(array, defaultValue) {\n return (array == null ? void 0 : array.length) > 0 ? array[array.length - 1] : defaultValue;\n}\n\n// src/array/list.ts\nfunction list(startOrLength, end, valueOrMapper, step) {\n return Array.from(range(startOrLength, end, valueOrMapper, step));\n}\n\n// src/array/mapify.ts\nfunction mapify(array, getKey, getValue = (item) => item) {\n const map2 = /* @__PURE__ */ new Map();\n for (const [index, item] of array.entries()) {\n map2.set(getKey(item, index), getValue(item, index));\n }\n return map2;\n}\n\n// src/array/merge.ts\nfunction merge(prev, array, toKey) {\n if (!array && !prev) {\n return [];\n }\n if (!array) {\n return [...prev];\n }\n if (!prev) {\n return [];\n }\n if (!toKey) {\n return [...prev];\n }\n const keys2 = /* @__PURE__ */ new Map();\n for (const item of array) {\n keys2.set(toKey(item), item);\n }\n return prev.map((prevItem) => {\n const key = toKey(prevItem);\n return keys2.has(key) ? keys2.get(key) : prevItem;\n });\n}\n\n// src/array/objectify.ts\nfunction objectify(array, getKey, getValue = (item) => item) {\n return array.reduce(\n (acc, item, i) => {\n acc[getKey(item, i)] = getValue(item, i);\n return acc;\n },\n {}\n );\n}\n\n// src/array/pluck.ts\nfunction pluck(array, mappings) {\n return array.map(\n mappings ? (item) => mappings.map(\n (mapping) => isFunction(mapping) ? mapping(item) : item[mapping]\n ) : Object.values\n );\n}\n\n// src/array/remove.ts\nfunction remove(array, predicate) {\n return array.filter((item) => !predicate(item));\n}\n\n// src/array/replace.ts\nfunction replace(array, newItem, match) {\n if (!array) {\n return [];\n }\n if (newItem === void 0) {\n return [...array];\n }\n const out = array.slice();\n for (let index = 0; index < array.length; index++) {\n if (match(array[index], index)) {\n out[index] = newItem;\n break;\n }\n }\n return out;\n}\n\n// src/array/replaceOrAppend.ts\nfunction replaceOrAppend(array, newItem, match) {\n if (!array && !newItem) {\n return [];\n }\n if (!newItem) {\n return [...array];\n }\n if (!array) {\n return [newItem];\n }\n const out = array.slice();\n for (let index = 0; index < array.length; index++) {\n if (match(array[index], index)) {\n out[index] = newItem;\n return out;\n }\n }\n out.push(newItem);\n return out;\n}\n\n// src/array/select.ts\nfunction select(array, mapper, condition) {\n if (!array) {\n return [];\n }\n let mapped;\n return array.reduce((acc, item, index) => {\n if (condition) {\n condition(item, index) && acc.push(mapper(item, index));\n } else if ((mapped = mapper(item, index)) != null) {\n acc.push(mapped);\n }\n return acc;\n }, []);\n}\n\n// src/array/selectFirst.ts\nfunction selectFirst(array, mapper, condition) {\n if (!array) {\n return void 0;\n }\n let foundIndex = -1;\n const found = array.find((item, index) => {\n foundIndex = index;\n return condition ? condition(item, index) : mapper(item, index) != null;\n });\n return found === void 0 ? void 0 : mapper(found, foundIndex);\n}\n\n// src/array/shift.ts\nfunction shift(arr, n) {\n if (arr.length === 0) {\n return [...arr];\n }\n const shiftNumber = n % arr.length;\n if (shiftNumber === 0) {\n return [...arr];\n }\n return [...arr.slice(-shiftNumber, arr.length), ...arr.slice(0, -shiftNumber)];\n}\n\n// src/array/sift.ts\nfunction sift(array) {\n return (array == null ? void 0 : array.filter((x) => !!x)) ?? [];\n}\n\n// src/array/sort.ts\nfunction sort(array, getter = identity, desc = false) {\n if (!array) {\n return [];\n }\n const asc = (a, b) => getter(a) - getter(b);\n const dsc = (a, b) => getter(b) - getter(a);\n return array.slice().sort(desc === true ? dsc : asc);\n}\n\n// src/array/toggle.ts\nfunction toggle(array, item, toKey, options) {\n if (!array) {\n return item !== void 0 ? [item] : [];\n }\n if (item === void 0) {\n return [...array];\n }\n let matcher;\n if (toKey) {\n const key = toKey(item, -1);\n matcher = (x, idx) => toKey(x, idx) === key;\n } else {\n matcher = (x) => x === item;\n }\n const existing = array.find(matcher);\n if (existing !== void 0) {\n return array.filter((x, idx) => !matcher(x, idx));\n }\n return (options == null ? void 0 : options.strategy) === \"prepend\" ? [item, ...array] : [...array, item];\n}\n\n// src/array/unique.ts\nfunction unique(array, toKey) {\n if (toKey) {\n const keys2 = /* @__PURE__ */ new Set();\n return array.reduce((acc, item) => {\n const key = toKey(item);\n if (!keys2.has(key)) {\n keys2.add(key);\n acc.push(item);\n }\n return acc;\n }, []);\n }\n return [...new Set(array)];\n}\n\n// src/array/unzip.ts\nfunction unzip(arrays) {\n if (!arrays || !arrays.length) {\n return [];\n }\n const out = new Array(\n arrays.reduce((max2, arr) => Math.max(max2, arr.length), 0)\n );\n let index = 0;\n const get2 = (array) => array[index];\n for (; index < out.length; index++) {\n out[index] = Array.from(arrays, get2);\n }\n return out;\n}\n\n// src/array/zip.ts\nfunction zip(...arrays) {\n return unzip(arrays);\n}\n\n// src/array/zipToObject.ts\nfunction zipToObject(keys2, values) {\n if (!keys2 || !keys2.length) {\n return {};\n }\n const getValue = isFunction(values) ? values : isArray(values) ? (_k, i) => values[i] : (_k, _i) => values;\n return keys2.reduce(\n (acc, key, idx) => {\n acc[key] = getValue(key, idx);\n return acc;\n },\n {}\n );\n}\n\n// src/async/all.ts\nasync function all(input) {\n const errors = [];\n const onError = (err) => {\n errors.push(err);\n };\n let output;\n if (isArray(input)) {\n output = await Promise.all(\n input.map((value) => Promise.resolve(value).catch(onError))\n );\n } else {\n output = { ...input };\n await Promise.all(\n Object.keys(output).map(async (key) => {\n output[key] = await Promise.resolve(output[key]).catch(onError);\n })\n );\n }\n if (errors.length > 0) {\n throw new AggregateErrorOrPolyfill(errors);\n }\n return output;\n}\n\n// src/async/defer.ts\nasync function defer(func) {\n const callbacks = [];\n const register = (fn, options) => callbacks.push({\n fn,\n rethrow: (options == null ? void 0 : options.rethrow) ?? false\n });\n const [err, response] = await tryit(func)(register);\n for (const { fn, rethrow } of callbacks) {\n const [rethrown] = await tryit(fn)(err);\n if (rethrown && rethrow) {\n throw rethrown;\n }\n }\n if (err) {\n throw err;\n }\n return response;\n}\n\n// src/async/guard.ts\nfunction guard(func, shouldGuard) {\n const onError = (err) => {\n if (shouldGuard && !shouldGuard(err)) {\n throw err;\n }\n };\n try {\n const result = func();\n return result instanceof Promise ? result.catch(onError) : result;\n } catch (err) {\n return onError(err);\n }\n}\n\n// src/async/map.ts\nasync function map(array, asyncMapFunc) {\n if (!array) {\n return [];\n }\n const result = [];\n let index = 0;\n for (const value of array) {\n const newValue = await asyncMapFunc(value, index++);\n result.push(newValue);\n }\n return result;\n}\n\n// src/async/parallel.ts\nasync function parallel(options, array, func) {\n if (!array.length) {\n return [];\n }\n const work = array.map((item, index) => ({\n index,\n item\n }));\n let signal;\n if (isNumber(options)) {\n options = {\n limit: options\n };\n } else {\n signal = options.signal;\n signal == null ? void 0 : signal.throwIfAborted();\n }\n const processor = async (resolve) => {\n const results2 = [];\n while (!(signal == null ? void 0 : signal.aborted)) {\n const next = work.pop();\n if (!next) {\n break;\n }\n const [error, result] = await tryit(func)(next.item);\n results2.push({\n error,\n result,\n index: next.index\n });\n }\n return resolve(results2);\n };\n const queues = Promise.all(\n list(1, clamp(options.limit, 1, array.length)).map(\n () => new Promise(processor)\n )\n );\n let signalPromise;\n if (signal) {\n signalPromise = new Promise((_, reject) => {\n const onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort);\n queues.then(() => signal.removeEventListener(\"abort\", onAbort));\n });\n }\n const itemResults = await (signalPromise ? Promise.race([queues, signalPromise]) : queues);\n const [errors, results] = fork(\n sort(flat(itemResults), (r) => r.index),\n (x) => !!x.error\n );\n if (errors.length > 0) {\n throw new AggregateErrorOrPolyfill(errors.map((error) => error.error));\n }\n return results.map((r) => r.result);\n}\n\n// src/async/queueByKey.ts\nfunction queueByKey(asyncFn, keyFn) {\n const queues = /* @__PURE__ */ new Map();\n return async (...args) => {\n const key = keyFn(...args);\n const next = () => asyncFn(...args);\n const queue = (queues.get(key) || Promise.resolve()).then(next, next);\n queues.set(key, queue);\n const cleanup = () => queues.get(key) === queue && queues.delete(key);\n queue.then(cleanup, cleanup);\n return queue;\n };\n}\n\n// src/async/reduce.ts\nasync function reduce(array, reducer, initialValue) {\n if (!array) {\n array = [];\n }\n let index = 0;\n let acc = initialValue;\n if (acc === void 0 && arguments.length < 3) {\n if (!array.length) {\n throw new TypeError(\"Reduce of empty array with no initial value\");\n }\n acc = array[index++];\n }\n while (index < array.length) {\n acc = await reducer(acc, array[index], index++);\n }\n return acc;\n}\n\n// src/async/retry.ts\nasync function retry(options, func) {\n const times = (options == null ? void 0 : options.times) ?? 3;\n const delay = options == null ? void 0 : options.delay;\n const backoff = (options == null ? void 0 : options.backoff) ?? null;\n const signal = options == null ? void 0 : options.signal;\n let i = 0;\n while (true) {\n const [err, result] = await tryit(func)((err2) => {\n throw { _exited: err2 };\n });\n signal == null ? void 0 : signal.throwIfAborted();\n if (!err) {\n return result;\n }\n if (err._exited) {\n throw err._exited;\n }\n if (++i >= times) {\n throw err;\n }\n if (delay) {\n await sleep(delay);\n }\n if (backoff) {\n await sleep(backoff(i));\n }\n }\n}\n\n// src/async/sleep.ts\nfunction sleep(milliseconds) {\n return new Promise((res) => setTimeout(res, milliseconds));\n}\n\n// src/async/timeout.ts\nfunction timeout(ms, error) {\n return new Promise(\n (_, reject) => setTimeout(\n () => reject(isFunction(error) ? error() : new TimeoutError(error)),\n ms\n )\n );\n}\n\n// src/async/toResult.ts\nasync function toResult(promise) {\n try {\n const result = await promise;\n return [void 0, result];\n } catch (error) {\n if (isError(error)) {\n return [error, void 0];\n }\n throw error;\n }\n}\n\n// src/async/tryit.ts\nfunction tryit(func) {\n return (...args) => {\n try {\n const result = func(...args);\n return isPromise(result) ? result.then(\n (value) => [void 0, value],\n (err) => [err, void 0]\n ) : [void 0, result];\n } catch (err) {\n return [err, void 0];\n }\n };\n}\n\n// src/async/withResolvers.ts\nfunction withResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { resolve, reject, promise };\n}\n\n// src/curry/callable.ts\nfunction callable(obj, fn) {\n return new Proxy(Object.assign(fn.bind(null), obj), {\n get: (target, key) => target[key],\n set: (target, key, value) => {\n target[key] = value;\n return true;\n },\n apply: (target, _, args) => fn(Object.assign({}, target))(...args)\n });\n}\n\n// src/curry/chain.ts\nfunction chain(...funcs) {\n return (...args) => {\n return funcs.slice(1).reduce((acc, fn) => fn(acc), funcs[0](...args));\n };\n}\n\n// src/curry/compose.ts\nfunction compose(...funcs) {\n return funcs.reverse().reduce((acc, fn) => fn(acc));\n}\n\n// src/curry/debounce.ts\nfunction debounce({ delay, leading }, func) {\n let timer = void 0;\n let active = true;\n const debounced = (...args) => {\n if (active) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n active && func(...args);\n timer = void 0;\n }, delay);\n if (leading) {\n func(...args);\n leading = false;\n }\n } else {\n func(...args);\n }\n };\n debounced.isPending = () => {\n return timer !== void 0;\n };\n debounced.cancel = () => {\n active = false;\n };\n debounced.flush = (...args) => func(...args);\n return debounced;\n}\n\n// src/curry/flip.ts\nfunction flip(fn) {\n return (arg2, arg1, ...args) => fn(arg1, arg2, ...args);\n}\n\n// src/curry/memo.ts\nfunction memoize(cache, func, keyFunc, ttl) {\n return function callWithMemo(...args) {\n const key = keyFunc ? keyFunc(...args) : JSON.stringify({ args });\n const existing = cache[key];\n if (existing !== void 0) {\n if (!existing.exp) {\n return existing.value;\n }\n if (existing.exp > (/* @__PURE__ */ new Date()).getTime()) {\n return existing.value;\n }\n }\n const result = func(...args);\n cache[key] = {\n exp: ttl ? (/* @__PURE__ */ new Date()).getTime() + ttl : null,\n value: result\n };\n return result;\n };\n}\nfunction memo(func, options = {}) {\n return memoize({}, func, options.key ?? null, options.ttl ?? null);\n}\n\n// src/curry/memoLastCall.ts\nfunction memoLastCall(fn) {\n let lastArgs = null;\n let lastResult = null;\n return (...args) => {\n if (lastArgs && lastArgs.length === args.length && lastArgs.every((arg, i) => Object.is(arg, args[i]))) {\n return lastResult;\n }\n const result = fn(...args);\n lastArgs = args;\n lastResult = result;\n return result;\n };\n}\n\n// src/curry/once.ts\nvar once = /* @__PURE__ */ (() => {\n const onceSymbol = /* @__PURE__ */ Symbol();\n const once2 = (fn) => {\n const onceFn = function(...args) {\n if (onceFn[onceSymbol] === onceSymbol) {\n onceFn[onceSymbol] = fn.apply(this, args);\n }\n return onceFn[onceSymbol];\n };\n onceFn[onceSymbol] = onceSymbol;\n return onceFn;\n };\n once2.reset = (fn) => {\n fn[onceSymbol] = onceSymbol;\n };\n return once2;\n})();\n\n// src/curry/partial.ts\nfunction partial(fn, ...args) {\n return (...rest) => fn(...[...args, ...rest]);\n}\n\n// src/curry/partob.ts\nfunction partob(fn, argObj) {\n return (restObj) => fn({ ...argObj, ...restObj });\n}\n\n// src/curry/promiseChain.ts\nfunction promiseChain(...funcs) {\n return async (...args) => {\n let result = await funcs[0](...args);\n for (let i = 1; i < funcs.length; i++) {\n result = await funcs[i](result);\n }\n return result;\n };\n}\n\n// src/curry/proxied.ts\nfunction proxied(handler) {\n return new Proxy(\n {},\n {\n get: (target, propertyName) => handler(propertyName)\n }\n );\n}\n\n// src/curry/throttle.ts\nfunction throttle({ interval, trailing }, func) {\n let timer;\n let lastCalled = 0;\n let trailingArgs;\n const throttled = (...args) => {\n if (!isThrottled()) {\n trigger(...args);\n } else if (trailing) {\n trailingArgs = args;\n }\n };\n const isThrottled = () => Date.now() - lastCalled < interval;\n throttled.isThrottled = isThrottled;\n const trigger = throttled.trigger = (...args) => {\n func(...args);\n lastCalled = Date.now();\n if (trailing) {\n trailingArgs = void 0;\n clearTimeout(timer);\n timer = setTimeout(\n () => trailingArgs && trigger(...trailingArgs),\n interval\n );\n }\n };\n return throttled;\n}\n\n// src/function/always.ts\nfunction always(value) {\n return () => value;\n}\n\n// src/function/castComparator.ts\nfunction castComparator(mapping, compare, reverse) {\n const map2 = isFunction(mapping) ? mapping : (obj) => obj[mapping];\n const comparator = (left, right) => {\n const mappedLeft = map2(left);\n const mappedRight = map2(right);\n if (compare) {\n return compare(mappedLeft, mappedRight);\n }\n return mappedLeft > mappedRight ? 1 : mappedLeft < mappedRight ? -1 : 0;\n };\n return reverse ? flip(comparator) : comparator;\n}\n\n// src/function/castMapping.ts\nfunction castMapping(mapping) {\n return isFunction(mapping) ? mapping : mapping != null ? (input) => input[mapping] : (input) => input;\n}\n\n// src/function/identity.ts\nfunction identity(value) {\n return value;\n}\n\n// src/function/noop.ts\nfunction noop() {\n}\n\n// src/number/clamp.ts\nfunction clamp(n, min2, max2) {\n if (max2 != null && min2 != null && min2 > max2) {\n throw new Error(\"invalid clamp range\");\n }\n return max2 != null && n > max2 ? max2 : min2 != null && n < min2 ? min2 : n;\n}\n\n// src/number/inRange.ts\nfunction inRange(number, start, end) {\n const isTypeSafe = typeof number === \"number\" && typeof start === \"number\" && (typeof end === \"undefined\" || typeof end === \"number\");\n if (!isTypeSafe) {\n return false;\n }\n if (typeof end === \"undefined\") {\n end = start;\n start = 0;\n }\n return number >= Math.min(start, end) && number < Math.max(start, end);\n}\n\n// src/number/lerp.ts\nfunction lerp(from, to, amount) {\n return from + (to - from) * amount;\n}\n\n// src/number/max.ts\nfunction max(array, getter) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n const get2 = getter ?? ((v) => v);\n return array.reduce((a, b) => get2(a) > get2(b) ? a : b);\n}\n\n// src/number/min.ts\nfunction min(array, getter) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n const get2 = getter ?? ((v) => v);\n return array.reduce((a, b) => get2(a) < get2(b) ? a : b);\n}\n\n// src/number/parseDuration.ts\nfunction parseDuration(duration, options) {\n return new DurationParser(options).parse(duration);\n}\n\n// src/number/parseQuantity.ts\nfunction parseQuantity(quantity, options) {\n return new QuantityParser(options).parse(quantity);\n}\n\n// src/number/range.ts\nfunction* range(startOrLength, end, valueOrMapper = (i) => i, step = 1) {\n const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper;\n const start = end !== void 0 ? startOrLength : 0;\n const final = end ?? startOrLength;\n for (let i = start; i <= final; i += step) {\n yield mapper(i);\n }\n}\n\n// src/number/round.ts\nfunction round(value, precision, toInteger = Math.round) {\n if (precision) {\n const p = precision > 0 ? Math.min(precision, 292) : Math.max(precision, -323);\n let [q, e] = `${value}e`.split(\"e\");\n [q, e] = `${toInteger(+`${q}e${+e + p}`)}e`.split(\"e\");\n return +`${q}e${+e - p}`;\n }\n return toInteger(value);\n}\n\n// src/number/sum.ts\nfunction sum(array, fn) {\n return (array || []).reduce((acc, item) => acc + (fn ? fn(item) : item), 0);\n}\n\n// src/number/toFloat.ts\nfunction toFloat(value, defaultValue) {\n const parsedValue = isSymbol(value) ? Number.NaN : Number.parseFloat(value);\n return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;\n}\n\n// src/number/toInt.ts\nfunction toInt(value, defaultValue) {\n const parsedValue = isSymbol(value) ? Number.NaN : Number.parseInt(value);\n return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;\n}\n\n// src/object/assign.ts\nfunction assign(initial, override) {\n if (!initial || !override) {\n return initial ?? override ?? {};\n }\n const proto = Object.getPrototypeOf(initial);\n const merged = proto ? { ...initial } : Object.assign(Object.create(proto), initial);\n for (const key of Object.keys(override)) {\n merged[key] = isPlainObject(initial[key]) && isPlainObject(override[key]) ? assign(initial[key], override[key]) : override[key];\n }\n return merged;\n}\n\n// src/object/clone.ts\nfunction clone(obj) {\n if (isPrimitive(obj)) {\n return obj;\n }\n if (typeof obj === \"function\") {\n return obj.bind({});\n }\n const proto = Object.getPrototypeOf(obj);\n const newObj = typeof (proto == null ? void 0 : proto.constructor) === \"function\" ? new proto.constructor() : Object.create(proto);\n for (const key of Object.getOwnPropertyNames(obj)) {\n newObj[key] = obj[key];\n }\n return newObj;\n}\n\n// src/object/cloneDeep.ts\nvar DefaultCloningStrategy = {\n cloneMap(input, track, clone2) {\n const output = track(/* @__PURE__ */ new Map());\n for (const [key, value] of input) {\n output.set(key, clone2(value));\n }\n return output;\n },\n cloneSet(input, track, clone2) {\n const output = track(/* @__PURE__ */ new Set());\n for (const value of input) {\n output.add(clone2(value));\n }\n return output;\n },\n cloneArray(input, track, clone2) {\n const output = track(new Array(input.length));\n input.forEach((value, index) => {\n output[index] = clone2(value);\n });\n return output;\n },\n cloneObject(input, track, clone2) {\n const output = track(Object.create(Object.getPrototypeOf(input)));\n for (const key of Reflect.ownKeys(input)) {\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (\"value\" in descriptor) {\n descriptor.value = clone2(descriptor.value);\n }\n Object.defineProperty(output, key, descriptor);\n }\n return output;\n },\n cloneOther(input, track) {\n return track(input);\n }\n};\nvar FastCloningStrategy = {\n cloneObject: (input, track, clone2) => {\n const output = track({ ...input });\n for (const key of Object.keys(input)) {\n output[key] = clone2(input[key]);\n }\n return output;\n }\n};\nfunction cloneDeep(root, customStrategy) {\n const strategy = { ...DefaultCloningStrategy, ...customStrategy };\n const tracked = /* @__PURE__ */ new Map();\n const track = (parent, newParent) => {\n tracked.set(parent, newParent);\n return newParent;\n };\n const clone2 = (value) => value && typeof value === \"object\" ? tracked.get(value) ?? cloneDeep2(value, strategy) : value;\n const cloneDeep2 = (parent, strategy2) => {\n const cloneParent = isObject(parent) ? strategy2.cloneObject : isArray(parent) ? strategy2.cloneArray : isMap(parent) ? strategy2.cloneMap : isSet(parent) ? strategy2.cloneSet : strategy2.cloneOther;\n const newParent = cloneParent(parent, track.bind(null, parent), clone2);\n if (!newParent) {\n return cloneDeep2(parent, DefaultCloningStrategy);\n }\n tracked.set(parent, newParent);\n return newParent;\n };\n return cloneDeep2(root, strategy);\n}\n\n// src/object/construct.ts\nfunction construct(obj) {\n if (!obj) {\n return {};\n }\n return Object.keys(obj).reduce((acc, path) => {\n return set(acc, path, obj[path]);\n }, {});\n}\n\n// src/object/crush.ts\nfunction crush(value) {\n if (!value) {\n return {};\n }\n return function crushReducer(crushed, value2, path) {\n if (isObject(value2) || isArray(value2)) {\n for (const [prop, propValue] of Object.entries(value2)) {\n crushReducer(crushed, propValue, path ? `${path}.${prop}` : prop);\n }\n } else {\n crushed[path] = value2;\n }\n return crushed;\n }({}, value, \"\");\n}\n\n// src/object/filterKey.ts\nfunction filterKey(obj, key, filter) {\n return Object.prototype.hasOwnProperty.call(obj, key) && (filter == null || (isArray(filter) ? filter.includes(key) : filter(obj[key], key, obj)));\n}\n\n// src/object/get.ts\nfunction get(value, path, defaultValue) {\n const segments = path.split(/[\\.\\[\\]]/g);\n let current = value;\n for (const key of segments) {\n if (current === null) {\n return defaultValue;\n }\n if (current === void 0) {\n return defaultValue;\n }\n const unquotedKey = key.replace(/['\"]/g, \"\");\n if (unquotedKey.trim() === \"\") {\n continue;\n }\n current = current[unquotedKey];\n }\n if (current === void 0) {\n return defaultValue;\n }\n return current;\n}\n\n// src/object/getOrInsert.ts\nfunction getOrInsert(map2, key, value) {\n if (map2.has(key)) {\n return map2.get(key);\n }\n map2.set(key, value);\n return value;\n}\n\n// src/object/getOrInsertComputed.ts\nfunction getOrInsertComputed(map2, key, compute) {\n if (map2.has(key)) {\n return map2.get(key);\n }\n const newValue = compute();\n map2.set(key, newValue);\n return newValue;\n}\n\n// src/object/invert.ts\nfunction invert(obj) {\n if (!obj) {\n return {};\n }\n const keys2 = Object.keys(obj);\n return keys2.reduce(\n (acc, key) => {\n acc[obj[key]] = key;\n return acc;\n },\n {}\n );\n}\n\n// src/object/isDangerousKey.ts\nfunction isDangerousKey(key, object) {\n return !(object && !Object.getPrototypeOf(object)) && (key === \"__proto__\" || key === \"prototype\" || key === \"constructor\");\n}\n\n// src/object/keys.ts\nfunction keys(value) {\n if (!value) {\n return [];\n }\n const keys2 = [];\n const keyPath = [];\n const recurse = (value2) => {\n if (isPlainObject(value2)) {\n for (const [prop, propValue] of Object.entries(value2)) {\n keyPath.push(prop);\n recurse(propValue);\n keyPath.pop();\n }\n } else if (isArray(value2)) {\n value2.forEach((item, index) => {\n keyPath.push(index);\n recurse(item);\n keyPath.pop();\n });\n } else {\n keys2.push(keyPath.join(\".\"));\n }\n };\n recurse(value);\n return keys2;\n}\n\n// src/object/listify.ts\nfunction listify(obj, toItem) {\n if (!obj) {\n return [];\n }\n const entries = Object.entries(obj);\n if (entries.length === 0) {\n return [];\n }\n return entries.reduce((acc, entry) => {\n acc.push(toItem(entry[0], entry[1]));\n return acc;\n }, []);\n}\n\n// src/object/lowerize.ts\nfunction lowerize(obj) {\n return mapKeys(obj, (k) => k.toLowerCase());\n}\n\n// src/object/mapEntries.ts\nfunction mapEntries(obj, toEntry) {\n if (!obj) {\n return {};\n }\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n const [newKey, newValue] = toEntry(key, value);\n acc[newKey] = newValue;\n return acc;\n },\n {}\n );\n}\n\n// src/object/mapKeys.ts\nfunction mapKeys(obj, mapFunc) {\n const keys2 = Object.keys(obj);\n return keys2.reduce(\n (acc, key) => {\n acc[mapFunc(key, obj[key])] = obj[key];\n return acc;\n },\n {}\n );\n}\n\n// src/object/mapValues.ts\nfunction mapValues(obj, mapFunc) {\n return Object.keys(obj).reduce(\n (acc, key) => {\n acc[key] = mapFunc(obj[key], key);\n return acc;\n },\n {}\n );\n}\n\n// src/object/omit.ts\nfunction omit(obj, keys2) {\n if (!obj) {\n return {};\n }\n if (!keys2 || keys2.length === 0) {\n return obj;\n }\n return keys2.reduce(\n (acc, key) => {\n delete acc[key];\n return acc;\n },\n { ...obj }\n );\n}\n\n// src/object/pick.ts\nfunction pick(obj, filter) {\n if (!obj) {\n return {};\n }\n let keys2 = filter;\n if (isArray(filter)) {\n filter = null;\n } else {\n keys2 = Reflect.ownKeys(obj);\n }\n return keys2.reduce((acc, key) => {\n if (filterKey(obj, key, filter)) {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n}\n\n// src/object/set.ts\nfunction set(initial, path, value) {\n if (!initial) {\n return {};\n }\n if (!path || value === void 0) {\n return initial;\n }\n return function recurse(object, keys2, index) {\n const key = keys2[index];\n object ??= isIntString(key) ? [] : {};\n if (isDangerousKey(key, object)) {\n throw new Error(\"Unsafe key in path: \" + key);\n }\n if (index < keys2.length - 1) {\n value = recurse(object[key], keys2, index + 1);\n }\n if (!Object.is(object[key], value)) {\n object = clone(object);\n object[key] = value;\n }\n return object;\n }(initial, path.match(/[^.[\\]]+/g), 0);\n}\n\n// src/object/shake.ts\nfunction shake(obj, filter = (value) => value === void 0) {\n if (!obj) {\n return {};\n }\n return Object.keys(obj).reduce((acc, key) => {\n if (!filter(obj[key])) {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n}\n\n// src/object/traverse.ts\nfunction traverse(root, visitor, options, outerContext) {\n const context = outerContext ?? {\n value: null,\n key: null,\n parent: null,\n parents: [],\n path: [],\n skipped: /* @__PURE__ */ new Set(),\n skip(obj) {\n context.skipped.add(obj ?? context.value);\n }\n };\n const { rootNeedsVisit } = options ??= {};\n const ownKeys = options.ownKeys ?? Object.keys;\n const nestedOptions = {\n ...options,\n rootNeedsVisit: null\n };\n let ok = true;\n const visit = (value, key) => {\n if (context.parent.constructor === Map) {\n [key, value] = value;\n }\n context.path.push(key);\n const result = visitor(\n context.value = value,\n context.key = key,\n context.parent,\n context,\n nestedOptions\n );\n if (result === false) {\n return ok = false;\n }\n if (value !== null && typeof value === \"object\" && (isArray(value) || isPlainObject(value)) && !context.skipped.has(value) && !context.parents.includes(value)) {\n traverse2(value, result);\n }\n context.path.pop();\n return ok;\n };\n const traverse2 = (parent, parentResult) => {\n context.parents.push(parent);\n context.parent = parent;\n if (rootNeedsVisit && parent === root) {\n parentResult = visitor(\n context.value = parent,\n context.key = null,\n context.parent,\n context,\n nestedOptions\n );\n if (parentResult === false) {\n return ok;\n }\n }\n if (isArray(parent)) {\n parent.slice().forEach((value, index, values) => {\n if (visit(value, index) === false) {\n values.length = 0;\n }\n });\n } else if (parent === root && isIterable(parent)) {\n let index = 0;\n for (const value of parent) {\n if (visit(value, index) === false) {\n return ok;\n }\n index++;\n }\n } else {\n for (const key of ownKeys(parent)) {\n if (visit(parent[key], key) === false) {\n return ok;\n }\n }\n }\n context.parents.pop();\n context.parent = last(context.parents);\n if (ok && isFunction(parentResult)) {\n ok = parentResult() !== false;\n }\n return ok;\n };\n if (outerContext) {\n if (outerContext.skipped.has(root)) {\n return true;\n }\n const { value, key } = context;\n traverse2(root);\n context.value = value;\n context.key = key;\n return ok;\n }\n return traverse2(root);\n}\n\n// src/object/upperize.ts\nfunction upperize(obj) {\n return mapKeys(obj, (k) => k.toUpperCase());\n}\n\n// src/oop/AggregateError.ts\nvar AggregateErrorOrPolyfill = /* @__PURE__ */ (() => globalThis.AggregateError ?? class AggregateError extends Error {\n constructor(errors = []) {\n var _a, _b;\n super();\n const name = ((_a = errors.find((e) => e.name)) == null ? void 0 : _a.name) ?? \"\";\n this.name = `AggregateError(${name}...)`;\n this.message = `AggregateError with ${errors.length} errors`;\n this.stack = ((_b = errors.find((e) => e.stack)) == null ? void 0 : _b.stack) ?? this.stack;\n this.errors = errors;\n }\n})();\n\n// src/oop/QuantityParser.ts\nvar QuantityParser = class {\n constructor({ units, short }) {\n this.units = units;\n this.short = short;\n }\n /**\n * Parse a quantity string into its numeric value\n *\n * @throws {Error} If the quantity string is invalid or contains an unknown unit\n */\n parse(quantity) {\n var _a;\n const match = quantity.match(/^(-?\\d+(?:\\.\\d+)?) ?(\\w+)?s?$/);\n if (!match) {\n throw new Error(`Invalid quantity, cannot parse: ${quantity}`);\n }\n let unit = match[2];\n unit = ((_a = this.short) == null ? void 0 : _a[unit]) || unit;\n const count = Number.parseFloat(match[1]);\n if (Math.abs(count) > 1 && unit.endsWith(\"s\")) {\n unit = unit.substring(0, unit.length - 1);\n }\n if (!this.units[unit]) {\n throw new Error(\n `Invalid unit: ${unit}, makes sure it is one of: ${Object.keys(this.units).join(\", \")}`\n );\n }\n return count * this.units[unit];\n }\n};\n\n// src/oop/DurationParser.ts\nvar DURATION_UNITS = {\n week: 6048e5,\n day: 864e5,\n hour: 36e5,\n minute: 6e4,\n second: 1e3,\n millisecond: 1\n};\nvar DURATION_SHORT_UNITS = {\n w: \"week\",\n d: \"day\",\n h: \"hour\",\n m: \"minute\",\n s: \"second\",\n ms: \"millisecond\"\n};\nvar DurationParser = class _DurationParser extends QuantityParser {\n constructor(options) {\n super({\n units: {\n ..._DurationParser.units,\n ...options == null ? void 0 : options.units\n },\n short: {\n ..._DurationParser.shortUnits,\n ...options == null ? void 0 : options.short\n }\n });\n }\n static get units() {\n return DURATION_UNITS;\n }\n static get shortUnits() {\n return DURATION_SHORT_UNITS;\n }\n};\n\n// src/oop/Semaphore.ts\nvar SemaphorePermit = class {\n constructor(semaphore, request, weight) {\n this.semaphore = semaphore;\n this.request = request;\n this.weight = weight;\n }\n /**\n * Releases this permit back to the semaphore, allowing another\n * operation to acquire it.\n */\n release() {\n this.semaphore.release(this);\n this.release = noop;\n }\n};\nvar Semaphore = class {\n /**\n * Creates a new semaphore with the specified capacity.\n * @param maxCapacity Maximum number of permits that can be issued simultaneously\n */\n constructor(maxCapacity) {\n this.maxCapacity = maxCapacity;\n this.queue = [];\n if (maxCapacity <= 0) {\n throw new Error(\"maxCapacity must be > 0\");\n }\n this.capacity = maxCapacity;\n }\n /**\n * Number of pending acquisition requests.\n */\n get queueLength() {\n return this.queue.length;\n }\n /**\n * Acquires a permit from this semaphore, waiting if necessary until\n * one becomes available.\n * @param options.signal - The signal to abort the acquisition\n * @param options.weight - The weight of the permit to acquire\n * @returns A promise that resolves to a permit when one is\n * available\n */\n async acquire({\n signal,\n weight = 1\n } = {}) {\n if (weight <= 0) {\n throw new Error(\"weight must be > 0\");\n }\n if (weight > this.maxCapacity) {\n throw new Error(\"weight must be \\u2264 maxCapacity\");\n }\n const request = withResolvers();\n const permit = new SemaphorePermit(this, request, weight);\n if (signal) {\n const abort = () => {\n const index = this.queue.indexOf(permit);\n if (index >= 0) {\n this.queue.splice(index, 1);\n request.reject(signal.reason);\n }\n };\n signal.addEventListener(\"abort\", abort);\n const cleanup = () => {\n signal.removeEventListener(\"abort\", abort);\n };\n request.promise.then(cleanup, cleanup);\n }\n if (this.capacity < weight) {\n this.queue.push(permit);\n await request.promise;\n } else {\n this.capacity -= weight;\n }\n return permit;\n }\n /**\n * Rejects all pending acquisition requests.\n */\n reject(error) {\n this.acquire = () => Promise.reject(error);\n this.queue.forEach((permit) => permit.request.reject(error));\n this.queue = [];\n }\n /**\n * Releases a permit back to the semaphore, increasing capacity and\n * potentially fulfilling a pending acquisition request.\n */\n release(permit) {\n this.capacity += permit.weight;\n const nextPermit = this.queue[0];\n if (nextPermit && this.capacity >= nextPermit.weight) {\n this.capacity -= nextPermit.weight;\n this.queue.shift();\n nextPermit.request.resolve();\n }\n }\n};\n\n// src/oop/TimeoutError.ts\nvar TimeoutError = class extends Error {\n constructor(message) {\n super(message ?? \"Operation timed out\");\n this.name = \"TimeoutError\";\n }\n};\n\n// src/random/absoluteJitter.ts\nfunction absoluteJitter(base, offset) {\n return base + offset * (2 * Math.random() - 1);\n}\n\n// src/random/draw.ts\nfunction draw(array) {\n const max2 = array.length;\n if (max2 === 0) {\n return null;\n }\n const index = random(0, max2 - 1);\n return array[index];\n}\n\n// src/random/proportionalJitter.ts\nfunction proportionalJitter(base, factor) {\n return base * (1 - factor * (2 * Math.random() - 1));\n}\n\n// src/random/random.ts\nfunction random(min2, max2) {\n return Math.floor(Math.random() * (max2 - min2 + 1) + min2);\n}\n\n// src/random/shuffle.ts\nfunction shuffle(array, random2 = random) {\n const newArray = array.slice();\n for (let idx = array.length - 1, randomIdx, item; idx > 0; idx--) {\n randomIdx = random2(0, idx);\n item = newArray[idx];\n newArray[idx] = newArray[randomIdx];\n newArray[randomIdx] = item;\n }\n return newArray;\n}\n\n// src/random/uid.ts\nfunction uid(length, specials = \"\") {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" + specials;\n return iterate(\n length,\n (acc) => {\n return acc + characters.charAt(random(0, characters.length - 1));\n },\n \"\"\n );\n}\n\n// src/series/series.ts\nvar series = (items, toKey = (item) => `${item}`) => {\n const indexesByKey = {};\n const itemsByIndex = {};\n for (const idx of range(items.length - 1)) {\n const item = items[idx];\n indexesByKey[toKey(item)] = idx;\n itemsByIndex[idx] = item;\n }\n const first2 = () => itemsByIndex[0];\n const last2 = () => itemsByIndex[items.length - 1];\n const next = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] + 1] ?? defaultValue ?? first2();\n const previous = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] - 1] ?? defaultValue ?? last2();\n return {\n /**\n * Given two values in the series, returns the value that occurs\n * earlier in the series.\n */\n min(a, b) {\n return indexesByKey[toKey(a)] < indexesByKey[toKey(b)] ? a : b;\n },\n /**\n * Given two values in the series, returns the value that occurs\n * later in the series.\n */\n max(a, b) {\n return indexesByKey[toKey(a)] > indexesByKey[toKey(b)] ? a : b;\n },\n first: first2,\n last: last2,\n next,\n previous,\n /**\n * A more dynamic method than `next` and `previous` that lets you move\n * many times in either direction.\n *\n * ```ts\n * series(weekdays).spin('wednesday', 3) // => 'monday'\n * series(weekdays).spin('wednesday', -3) // => 'friday'\n * ```\n */\n spin(current, num) {\n if (num === 0) {\n return current;\n }\n const abs = Math.abs(num);\n const rel = abs > items.length ? abs % items.length : abs;\n return list(0, rel - 1).reduce(\n (acc) => num > 0 ? next(acc) : previous(acc),\n current\n );\n }\n };\n};\n\n// src/string/camel.ts\nfunction camel(str) {\n var _a;\n const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts.reduce((acc, part) => {\n return `${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}`;\n });\n}\n\n// src/string/capitalize.ts\nfunction capitalize(str) {\n if (!str || str.length === 0) {\n return \"\";\n }\n const lower = str.toLowerCase();\n return lower.substring(0, 1).toUpperCase() + lower.substring(1, lower.length);\n}\n\n// src/string/dash.ts\nfunction dash(str) {\n var _a;\n const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts.reduce((acc, part) => {\n return `${acc}-${part.toLowerCase()}`;\n });\n}\n\n// src/string/dedent.ts\nfunction dedent(text, ...values) {\n var _a;\n if (isArray(text)) {\n if (values.length > 0) {\n return dedent(\n text.reduce((acc, input, i) => {\n var _a2;\n let value = String(values[i] ?? \"\");\n const indent2 = value.includes(\"\\n\") && ((_a2 = input.match(/[ \\t]*(?=[^\\n]*$)/)) == null ? void 0 : _a2[0]);\n if (indent2) {\n value = value.replace(/\\n(?=[^\\n]*?\\S)/g, \"\\n\" + indent2);\n }\n return acc + input + value;\n }, \"\")\n );\n }\n text = text[0];\n }\n const indent = values[0] ?? ((_a = text.match(/^[ \\t]*(?=\\S)/m)) == null ? void 0 : _a[0]);\n const output = indent ? text.replace(new RegExp(`^${indent}`, \"gm\"), \"\") : text;\n return output.replace(/^[ \\t]*\\n|\\n[ \\t]*$/g, \"\");\n}\n\n// src/string/escapeHTML.ts\nvar htmlCharacters = /[&<>\"']/g;\nvar replacements = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#39;\"\n};\nfunction escapeHTML(input) {\n return input.replace(htmlCharacters, (char) => replacements[char]);\n}\n\n// src/string/pascal.ts\nfunction pascal(str) {\n if (!str) {\n return \"\";\n }\n const result = str.replace(\n /(?:[^\\w\\d]|_|\\s)+(\\w)([A-Z]+)?/g,\n (_, firstCharacter, capitalizedLetters) => {\n if (capitalizedLetters) {\n return firstCharacter.toUpperCase() + capitalizedLetters.toLowerCase();\n }\n return firstCharacter.toUpperCase();\n }\n );\n return result[0].toUpperCase() + result.substring(1);\n}\n\n// src/string/similarity.ts\nfunction similarity(str1, str2) {\n if (str1 === str2) {\n return 0;\n }\n let start = 0;\n let end1 = str1.length - 1;\n let end2 = str2.length - 1;\n while (start <= end1 && start <= end2 && str1[start] === str2[start]) {\n start++;\n }\n while (end1 >= start && end2 >= start && str1[end1] === str2[end2]) {\n end1--;\n end2--;\n }\n const length1 = end1 - start + 1;\n const length2 = end2 - start + 1;\n if (length1 === 0) {\n return length2;\n }\n if (length2 === 0) {\n return length1;\n }\n const numRows = length1 + 1;\n const numColumns = length2 + 1;\n const distances = new Array(numRows * numColumns).fill(0);\n for (let x = 1; x < numColumns; x++) {\n distances[x] = x;\n }\n for (let y = 1; y < numRows; y++) {\n distances[y * numColumns] = y;\n }\n for (let x = 1; x < numColumns; x++) {\n for (let y = 1; y < numRows; y++) {\n const i = y * numColumns + x;\n distances[i] = Math.min(\n // Cost of a deletion.\n distances[i - numColumns] + 1,\n // Cost of an insertion.\n distances[i - 1] + 1,\n // Cost of a substitution.\n distances[i - numColumns - 1] + (str1[start + y - 1] === str2[start + x - 1] ? 0 : 1)\n );\n }\n }\n return distances[length1 * numColumns + length2];\n}\n\n// src/string/snake.ts\nfunction snake(str, options) {\n const parts = (str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize).split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n const result = parts.reduce((acc, part) => {\n return `${acc}_${part.toLowerCase()}`;\n });\n return (options == null ? void 0 : options.splitOnNumber) === false ? result : result.replace(/([A-Za-z]{1}[0-9]{1})/, (val) => `${val[0]}_${val[1]}`);\n}\n\n// src/string/template.ts\nfunction template(str, data, regex = /\\{\\{(.+?)\\}\\}/g) {\n let result = \"\";\n let from = 0;\n let match;\n while (match = regex.exec(str)) {\n result += str.slice(from, match.index) + data[match[1]];\n from = regex.lastIndex;\n }\n return result + str.slice(from);\n}\n\n// src/string/title.ts\nfunction title(str) {\n if (!str) {\n return \"\";\n }\n return str.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((s) => s.trim()).filter((s) => !!s).map((s) => capitalize(s.toLowerCase())).join(\" \");\n}\n\n// src/string/trim.ts\nfunction trim(str, charsToTrim = \" \") {\n if (!str) {\n return \"\";\n }\n const toTrim = charsToTrim.replace(/[\\W]{1}/g, \"\\\\$&\");\n const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, \"g\");\n return str.replace(regex, \"\");\n}\n\n// src/typed/assert.ts\nfunction assert(condition, message) {\n if (!condition) {\n throw message instanceof Error ? message : new Error(message ?? \"Assertion failed\");\n }\n}\n\n// src/typed/isArray.ts\nvar isArray = /* @__PURE__ */ (() => Array.isArray)();\n\n// src/typed/isAsyncIterable.ts\nvar asyncIteratorSymbol = (\n /* c8 ignore next */\n Symbol.asyncIterator || /* @__PURE__ */ Symbol.for(\"Symbol.asyncIterator\")\n);\nfunction isAsyncIterable(value) {\n return !!value && typeof value === \"object\" && typeof value[asyncIteratorSymbol] === \"function\";\n}\n\n// src/typed/isBigInt.ts\nfunction isBigInt(value) {\n return typeof value === \"bigint\";\n}\n\n// src/typed/isBoolean.ts\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\n\n// src/typed/isClass.ts\nfunction isClass(value) {\n return isFunction(value) && Function.prototype.toString.call(value).startsWith(\"class \");\n}\n\n// src/typed/isDate.ts\nfunction isDate(value) {\n return isTagged(value, \"[object Date]\");\n}\n\n// src/typed/isEmpty.ts\nfunction isEmpty(value) {\n if (typeof value !== \"object\" || value === null) {\n return !value || value === true;\n }\n if (isDate(value)) {\n return Number.isNaN(value.getTime());\n }\n const length = value.length;\n if (isNumber(length)) {\n return length === 0;\n }\n const size = value.size;\n if (isNumber(size)) {\n return size === 0;\n }\n const keys2 = Object.keys(value).length;\n return keys2 === 0;\n}\n\n// src/typed/isEqual.ts\nfunction isEqual(x, y) {\n if (Object.is(x, y)) {\n return true;\n }\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n if (typeof x !== \"object\" || x === null || typeof y !== \"object\" || y === null) {\n return false;\n }\n const keysX = Reflect.ownKeys(x);\n const keysY = Reflect.ownKeys(y);\n if (keysX.length !== keysY.length) {\n return false;\n }\n for (let i = 0; i < keysX.length; i++) {\n if (!Reflect.has(y, keysX[i])) {\n return false;\n }\n if (!isEqual(x[keysX[i]], y[keysX[i]])) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isError.ts\nfunction isError(value) {\n return isTagged(value, \"[object Error]\");\n}\n\n// src/typed/isFloat.ts\nfunction isFloat(value) {\n return isNumber(value) && value % 1 !== 0;\n}\n\n// src/typed/isFunction.ts\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/typed/isInt.ts\nvar isInt = /* @__PURE__ */ (() => Number.isInteger)();\n\n// src/typed/isIntString.ts\nfunction isIntString(value) {\n if (!isString(value)) {\n return false;\n }\n const num = +value;\n return Number.isInteger(num) && `${num}` === value;\n}\n\n// src/typed/isIterable.ts\nfunction isIterable(value) {\n return typeof value === \"object\" && value !== null && Symbol.iterator in value;\n}\n\n// src/typed/isMap.ts\nfunction isMap(value) {\n return isTagged(value, \"[object Map]\");\n}\n\n// src/typed/isMapEqual.ts\nfunction isMapEqual(x, y) {\n if (x.size !== y.size) {\n return false;\n }\n for (const [key, value] of x) {\n if (!isEqual(value, y.get(key))) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isNullish.ts\nfunction isNullish(value) {\n return value === null || value === void 0;\n}\n\n// src/typed/isNumber.ts\nfunction isNumber(value) {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n\n// src/typed/isObject.ts\nfunction isObject(value) {\n return isTagged(value, \"[object Object]\");\n}\n\n// src/typed/isPlainObject.ts\nfunction isPlainObject(value) {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return (\n // Fast path for most common objects.\n prototype === Object.prototype || // Support objects created without a prototype.\n prototype === null || // Support plain objects from other realms.\n Object.getPrototypeOf(prototype) === null\n );\n}\n\n// src/typed/isPrimitive.ts\nfunction isPrimitive(value) {\n return value === void 0 || value === null || typeof value !== \"object\" && typeof value !== \"function\";\n}\n\n// src/typed/isPromise.ts\nfunction isPromise(value) {\n return !!value && isFunction(value.then);\n}\n\n// src/typed/isRegExp.ts\nfunction isRegExp(value) {\n return isTagged(value, \"[object RegExp]\");\n}\n\n// src/typed/isResult.ts\nfunction isResult(value) {\n return isArray(value) && value.length === 2 && (isError(value[0]) ? value[1] : value[0]) === void 0;\n}\n\n// src/typed/isResultErr.ts\nfunction isResultErr(value) {\n return isResult(value) && value[0] !== void 0;\n}\n\n// src/typed/isResultOk.ts\nfunction isResultOk(value) {\n return isResult(value) && value[0] === void 0;\n}\n\n// src/typed/isSet.ts\nfunction isSet(value) {\n return isTagged(value, \"[object Set]\");\n}\n\n// src/typed/isSetEqual.ts\nfunction isSetEqual(x, y) {\n if (x.size !== y.size) {\n return false;\n }\n for (const item of x) {\n if (!y.has(item)) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isString.ts\nfunction isString(value) {\n return typeof value === \"string\";\n}\n\n// src/typed/isSymbol.ts\nfunction isSymbol(value) {\n return typeof value === \"symbol\";\n}\n\n// src/typed/isTagged.ts\nfunction isTagged(value, tag) {\n return Object.prototype.toString.call(value) === tag;\n}\n\n// src/typed/isUndefined.ts\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\n\n// src/typed/isWeakMap.ts\nfunction isWeakMap(value) {\n return isTagged(value, \"[object WeakMap]\");\n}\n\n// src/typed/isWeakSet.ts\nfunction isWeakSet(value) {\n return isTagged(value, \"[object WeakSet]\");\n}\n\nexport { AggregateErrorOrPolyfill as AggregateError, DefaultCloningStrategy, DurationParser, FastCloningStrategy, QuantityParser, Semaphore, SemaphorePermit, TimeoutError, absoluteJitter, all, alphabetical, always, assert, assign, boil, callable, camel, capitalize, cartesianProduct, castArray, castArrayIfExists, castComparator, castMapping, chain, clamp, clone, cloneDeep, cluster, compose, concat, construct, counting, crush, dash, debounce, dedent, defer, diff, draw, escapeHTML, filterKey, first, flat, flip, fork, get, getOrInsert, getOrInsertComputed, group, guard, identity, inRange, intersects, invert, isArray, isArrayEqual, isAsyncIterable, isBigInt, isBoolean, isClass, isDangerousKey, isDate, isEmpty, isEqual, isError, isFloat, isFunction, isInt, isIntString, isIterable, isMap, isMapEqual, isNullish, isNumber, isObject, isPlainObject, isPrimitive, isPromise, isRegExp, isResult, isResultErr, isResultOk, isSet, isSetEqual, isString, isSymbol, isTagged, isUndefined, isWeakMap, isWeakSet, iterate, keys, last, lerp, list, listify, lowerize, map, mapEntries, mapKeys, mapValues, mapify, max, memo, memoLastCall, merge, min, noop, objectify, omit, once, parallel, parseDuration, parseQuantity, partial, partob, pascal, pick, pluck, promiseChain, proportionalJitter, proxied, queueByKey, random, range, reduce, remove, replace, replaceOrAppend, retry, round, select, selectFirst, series, set, shake, shift, shuffle, sift, similarity, sleep, snake, sort, sum, template, throttle, timeout, title, toFloat, toInt, toResult, toggle, traverse, trim, tryit as try, tryit, uid, unique, unzip, upperize, withResolvers, zip, zipToObject };\n","import { assign } from \"radashi\";\n\nexport const objectAssign = assign;\n","import { isArray, isObject } from \"../typeof\";\n\nexport function objectPick<O extends AnyObject, K extends keyof O>(obj: O, keys: readonly K[]): Pick<O, K> {\n const result = {} as unknown as Pick<O, K>;\n\n if (!isObject(obj)) {\n return result;\n }\n if (!isArray(keys)) {\n return obj;\n }\n\n return keys.reduce((acc, curr) => {\n if (curr in obj) {\n acc[curr] = obj[curr];\n }\n\n return acc;\n }, result);\n}\n","import type { NonEmptyObject } from \"type-fest\";\nimport { isObject } from \"../typeof\";\nimport { objectEntries } from \"./objectEntries\";\n\n/**\n * 对象反转\n * - 返回交换了对象的可枚举属性的值/键对象\n *\n * @param obj 对象\n */\nexport function objectSwitch<O extends AnyObject>(obj: NonEmptyObject<O>): Record<O[keyof O], keyof O> {\n const result = {} as unknown as Record<O[keyof O], keyof O>;\n\n if (!isObject(obj)) {\n return result;\n }\n\n for (const [k, v] of objectEntries(obj)) {\n result[v] = k;\n }\n\n return result;\n}\n","import { isString } from \"../typeof\";\n\nconst m1 = /\\S+/g;\nconst m2 = /[^a-zA-Z\\u00C0-\\u017F]/;\n\n/**\n * 首字母大小写\n */\nexport function stringInitialCase(value: string, type: \"lower\" | \"upper\") {\n if (!isString(value) || value.length === 0) {\n return value;\n }\n\n return value.replace(m1, (word) => {\n // 单词含非字母字符(如.,'-等)→ 原样保留\n if (m2.test(word)) {\n return word;\n }\n // 纯字母且全大写 → 保留\n if (word === word.toLocaleUpperCase()) {\n return word;\n }\n // 纯字母且非全大写 → 首字母小写,其余保留\n if (type === \"lower\" && word[0]) {\n return word[0].toLocaleLowerCase() + word.slice(1);\n }\n // 纯字母且非全大写 → 首字母大写写,其余保留\n if (type === \"upper\" && word[0]) {\n return word[0].toLocaleUpperCase() + word.slice(1);\n }\n\n return word;\n });\n}\n","import type { Replace } from \"type-fest\";\n\nexport function stringReplace<I extends string, S extends string, R extends string>(input: I, search: S, replacement: R) {\n return input.replace(search, replacement) as Replace<I, S, R>;\n}\n","import { isString } from \"../typeof\";\n\nexport function stringToJson<R extends AnyObject = AnyObject, D extends R = R>(data: string | null | undefined, safeValue: D): R {\n if (isString(data) && data) {\n try {\n const value = JSON.parse(data);\n\n return value;\n } catch (error) {\n return safeValue;\n }\n } else {\n return safeValue;\n }\n}\n","import { isString } from \"../typeof\";\n\nexport function stringToValues<T extends number | string = number>(data: string | null | undefined, valueType: \"number\" | \"string\" = \"number\", splitSymbol = \",\"): T[] {\n if (isString(data) && data) {\n try {\n const values = data.split(splitSymbol);\n\n if (valueType === \"number\") {\n return values.map((d) => Number(d)) as unknown as T[];\n }\n\n return values as unknown as T[];\n } catch (error) {\n return [];\n }\n } else {\n return [];\n }\n}\n","import { isFunction } from \"../typeof\";\n\nexport type RowKey = \"id\";\nexport type ParentIdKey = \"parentId\";\nexport type ChildrenKey = \"children\";\nexport type Strategy = \"pre\" | \"post\" | \"breadth\";\n\nexport interface BaseCallbackMeta<T> {\n depth: number;\n parents?: T[];\n}\n\nexport interface BaseOptions<T, CK extends string> {\n childrenKey?: CK;\n strategy?: Strategy;\n getChildrenKey?: (row: T, meta: BaseCallbackMeta<T>) => CK | undefined;\n}\n\nexport interface BaseInnerOptions<T, CK extends string> {\n childrenKey: CK;\n parents: T[];\n depth: number;\n getChildrenKey?: (row: T, meta: BaseCallbackMeta<T>) => CK | undefined;\n}\n\nexport interface QueueItem<T, CK extends string> {\n queueRow: T;\n queueOptions: BaseInnerOptions<T, CK>;\n}\n\nexport function getFinalChildrenKey<T, CK extends string>(\n tree: T,\n meta: BaseCallbackMeta<T>,\n options: BaseInnerOptions<T, CK>,\n): CK {\n if (isFunction(options.getChildrenKey)) {\n const dynamicChildrenKey = options.getChildrenKey(tree, meta);\n if (dynamicChildrenKey && dynamicChildrenKey !== null) {\n return dynamicChildrenKey;\n }\n }\n\n return options.childrenKey;\n}\n","import { arrayLast } from \"../array\";\nimport { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\nexport type TreeFilterOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;\nexport type TreeFilterInnerOption<T extends AnyObject, CK extends string = ChildrenKey> = BaseInnerOptions<T, CK>;\nexport type TreeFilterCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => boolean;\n\n// 前置遍历\nfunction preImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFilterCallback<T>, options: TreeFilterInnerOption<T, CK>): T | undefined {\n const result = callback(row, options);\n if (!result) {\n return undefined;\n }\n\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => preImpl(c, callback, nextLevelOptions)).filter((c) => !!c);\n }\n\n return { ...row, [finalChildrenKey]: newChildren };\n}\n\n// 子节点优先遍历\nfunction postImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFilterCallback<T>, options: TreeFilterInnerOption<T, CK>): T | undefined {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => preImpl(c, callback, nextLevelOptions)).filter((c) => !!c);\n }\n\n const result = callback(row, options);\n if (!result) {\n return undefined;\n }\n\n return { ...row, [finalChildrenKey]: newChildren };\n}\n\n// 广度优先遍历\nfunction breadthImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFilterCallback<T>, options: TreeFilterInnerOption<T, CK>): T | undefined {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const resultCache = new WeakMap<T, boolean>();\n const newNodeCache = new WeakMap<T, T>();\n const childrenKeyCache = new WeakMap<T, CK>();\n let result: T;\n const runQueue = (): T | undefined => {\n if (queue.length === 0) {\n return result;\n }\n\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n\n const parent = arrayLast(queueOptions.parents);\n const isTopNode = queueOptions.depth === 0;\n const parentResult = parent && resultCache.get(parent);\n\n if (!isTopNode && !parentResult) {\n return runQueue();\n }\n\n const callbackResult = callback(queueRow, queueOptions);\n if (isTopNode && !callbackResult) {\n return undefined;\n }\n\n const newNode = { ...queueRow, [finalChildrenKey]: undefined };\n if (isTopNode) {\n result = newNode;\n }\n\n resultCache.set(queueRow, callbackResult);\n newNodeCache.set(queueRow, newNode);\n childrenKeyCache.set(queueRow, finalChildrenKey);\n\n if (callbackResult && parent) {\n const parentNewNode = newNodeCache.get(parent);\n const parentChildrenKey = childrenKeyCache.get(parent);\n\n if (parentNewNode && parentChildrenKey) {\n if (!parentNewNode[parentChildrenKey]) {\n (parentNewNode[parentChildrenKey] as T[]) = [];\n }\n parentNewNode[parentChildrenKey].push(newNode);\n }\n }\n\n return runQueue();\n };\n\n return runQueue();\n}\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\nexport function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T[], callback: TreeFilterCallback<T>, options?: TreeFilterOptions<T, CK>): T[];\nexport function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T, callback: TreeFilterCallback<T>, options?: TreeFilterOptions<T, CK>): T;\nexport function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeFilterCallback<T>, options: TreeFilterOptions<T, CK> = {}): T | T[] {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n return isArray(tree)\n ? tree.map((row) => traversalMethod(row, callback, innerOptions)).filter((t) => !!t)\n : traversalMethod(tree, callback, innerOptions) || [];\n}\n","import { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\nexport type TreeFindOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;\nexport type TreeFindInnerOption<T extends AnyObject, CK extends string = ChildrenKey> = BaseInnerOptions<T, CK>;\nexport type TreeFindCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => boolean;\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\n// 前置深度优先遍历\nfunction preImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFindCallback<T>, options: TreeFindInnerOption<T, CK>): T | undefined {\n const callbackResult = callback(row, options);\n if (callbackResult) {\n return row;\n }\n\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n if (isArray(children)) {\n for (const child of children) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n const result = preImpl(child, callback, nextLevelOptions);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n}\n\n// 后置深度优先遍历\nfunction postImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFindCallback<T>, options: TreeFindInnerOption<T, CK>): T | undefined {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n if (isArray(children)) {\n for (const child of children) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n const result = postImpl(child, callback, nextLevelOptions);\n if (result) {\n return result;\n }\n }\n }\n\n const callbackResult = callback(row, options);\n if (callbackResult) {\n return row;\n }\n\n return undefined;\n}\n\n// 广度优先遍历\nfunction breadthImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeFindCallback<T>, options: TreeFindInnerOption<T, CK>): T | undefined {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const runQueue = (): T | undefined => {\n if (queue.length === 0) {\n return undefined;\n }\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n\n const callbackResult = callback(queueRow, queueOptions);\n if (callbackResult) {\n return queueRow;\n }\n\n return runQueue();\n };\n\n return runQueue();\n}\n\n\n/**\n * 查找树节点,找到第一个返回非空值的节点\n */\nexport function treeFind<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeFindCallback<T>, options: TreeFindOptions<T, CK> = {}): T | undefined {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n if (isArray(tree)) {\n for (const row of tree) {\n const result = traversalMethod<T, CK>(row, callback, innerOptions);\n if (result) {\n return result;\n }\n }\n\n return undefined;\n }\n\n return traversalMethod<T, CK>(tree, callback, innerOptions);\n}\n","import { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\nexport type TreeForeachOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;\nexport type TreeForeachInnerOption<T extends AnyObject, CK extends string = ChildrenKey> = BaseInnerOptions<T, CK>;\nexport type TreeForeachCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => void;\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\n// 前置遍历\nfunction preImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeForeachCallback<T>, options: TreeForeachInnerOption<T, CK>) {\n callback(row, options);\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n for (const child of children) {\n preImpl(child, callback, nextLevelOptions);\n }\n }\n}\n\n// 后置遍历\nfunction postImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeForeachCallback<T>, options: TreeForeachInnerOption<T, CK>) {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n for (const child of children) {\n postImpl(child, callback, nextLevelOptions);\n }\n }\n callback(row, options);\n}\n\n// 广度优先遍历\nfunction breadthImpl<T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeForeachCallback<T>, options: TreeForeachInnerOption<T, CK>) {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const runQueue = () => {\n if (queue.length === 0) {\n return;\n }\n\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n callback(queueRow, queueOptions);\n runQueue();\n };\n\n runQueue();\n}\n\nexport function treeForEach<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeForeachCallback<T>, options: TreeForeachOptions<T, CK> = {}): void {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n if (isArray(tree)) {\n for (const row of tree) {\n traversalMethod<T, CK>(row, callback, innerOptions);\n }\n } else {\n traversalMethod<T, CK>(tree, callback, innerOptions);\n }\n}\n","import { arrayLast } from \"../array\";\nimport { isArray } from \"../typeof\";\nimport { type BaseCallbackMeta, type BaseInnerOptions, type BaseOptions, type ChildrenKey, type QueueItem, getFinalChildrenKey } from \"./types\";\n\n\nexport type TreeMapOptions<T extends AnyObject, CK extends string> = BaseOptions<T, CK>;\nexport type TreeMapInnerOption<T extends AnyObject, CK extends string> = BaseInnerOptions<T, CK>;\nexport type TreeMapCallback<R extends AnyObject, T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => R;\n\nconst strategies = { pre: preImpl, post: postImpl, breadth: breadthImpl };\n\n// 前置遍历\nfunction preImpl<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeMapCallback<R, T>, options: TreeMapInnerOption<T, CK>): TreeLike<R, CK> {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const result = callback(row, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: TreeLike<R, CK>[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => preImpl(c, callback, nextLevelOptions));\n }\n\n return { ...result, [finalChildrenKey]: newChildren };\n}\n\n// 子节点优先遍历\nfunction postImpl<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeMapCallback<R, T>, options: TreeMapInnerOption<T, CK>): TreeLike<R, CK> {\n const finalChildrenKey = getFinalChildrenKey(row, options, options);\n const children = row[finalChildrenKey] as T[] | undefined;\n let newChildren: TreeLike<R, CK>[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...options, parents: [...options.parents, row], depth: options.depth + 1 };\n newChildren = children.map((c) => postImpl(c, callback, nextLevelOptions));\n }\n const result = callback(row, options);\n\n return { ...result, [finalChildrenKey]: newChildren };\n}\n\n// 广度优先遍历\nfunction breadthImpl<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(row: T, callback: TreeMapCallback<R, T>, options: TreeMapInnerOption<T, CK>): TreeLike<R, CK> {\n const queue: QueueItem<T, CK>[] = [{ queueRow: row, queueOptions: options }];\n const cache = new WeakMap<T, TreeLike<R, CK>>();\n const childrenKeyCache = new WeakMap<T, CK>();\n let result: TreeLike<R, CK>;\n\n const runQueue = () => {\n if (queue.length === 0) {\n return result;\n }\n const { queueRow, queueOptions } = queue.shift()!;\n const finalChildrenKey = getFinalChildrenKey(queueRow, queueOptions, queueOptions);\n const children = queueRow[finalChildrenKey] as T[] | undefined;\n\n if (isArray(children)) {\n const nextLevelOptions = { ...queueOptions, parents: [...queueOptions.parents, queueRow], depth: queueOptions.depth + 1 };\n const subQueueItems = children.map((queueRow) => ({ queueRow, queueOptions: nextLevelOptions }));\n queue.push(...subQueueItems);\n }\n const res = callback(queueRow, queueOptions);\n cache.set(queueRow, res);\n childrenKeyCache.set(queueRow, finalChildrenKey);\n\n // breadth 模式的子节点一定晚于父节点执行,所以可以在cache中找到父节点的生成物\n const parent = arrayLast(queueOptions.parents);\n if (parent) {\n const newParent = cache.get(parent);\n const parentChildrenKey = childrenKeyCache.get(parent);\n\n if (newParent && parentChildrenKey) {\n if (newParent[parentChildrenKey]) {\n newParent[parentChildrenKey].push(res);\n } else {\n (newParent[parentChildrenKey] as TreeLike<R, CK>[]) = [res];\n }\n }\n }\n // 这棵树的顶点\n if (queueOptions.depth === 0) {\n result = res;\n }\n\n return runQueue();\n };\n\n return runQueue();\n}\n\nexport function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T[], callback: TreeMapCallback<R, T>, options?: TreeMapOptions<T, CK>): TreeLike<R, CK>[];\nexport function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T, callback: TreeMapCallback<R, T>, options?: TreeMapOptions<T, CK>): TreeLike<R, CK>;\nexport function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeMapCallback<R, T>, options: TreeMapOptions<T, CK> = {}): TreeLike<R, CK> | TreeLike<R, CK>[] {\n const { childrenKey = \"children\", strategy = \"pre\", getChildrenKey } = options;\n const traversalMethod = strategies[strategy];\n const innerOptions = { childrenKey: childrenKey as CK, depth: 0, parents: [], getChildrenKey };\n\n return isArray(tree)\n ? tree.map((row) => traversalMethod<R, T, CK>(row, callback, innerOptions))\n : traversalMethod<R, T, CK>(tree, callback, innerOptions);\n}\n","import { isNull, isUndefined } from \"../typeof\";\nimport type { ChildrenKey, ParentIdKey, RowKey } from \"./types\";\n\nexport interface RowsToTreeOptions<\n RK extends string = RowKey,\n PK extends string = ParentIdKey,\n CK extends string = ChildrenKey,\n> {\n rowKey?: RK;\n parentIdKey?: PK;\n childrenKey?: CK;\n}\n\n/**\n * 行结构 转 树结构\n */\nexport function rowsToTree<\n T extends AnyObject = AnyObject,\n CK extends string = ChildrenKey,\n R = TreeLike<T, CK>,\n RK extends string = RowKey,\n PK extends string = ParentIdKey,\n>(rows: T[], options?: RowsToTreeOptions<RK, PK, CK> | undefined): R[] {\n const { parentIdKey = \"parentId\", rowKey = \"id\", childrenKey = \"children\" } = options || {};\n const result: R[] = [];\n const map = new Map<PropertyKey, T>();\n\n for (const row of rows) {\n const id = row[rowKey];\n\n if (!map.get(id)) {\n map.set(id, row);\n }\n }\n\n for (const row of rows) {\n const parentId = row[parentIdKey];\n const parent = map.get(parentId);\n\n if (!parent || !parentId) {\n result.push(row);\n\n continue;\n }\n\n const siblings = parent[childrenKey];\n\n if (isNull(siblings) || isUndefined(siblings)) {\n parent[childrenKey] = [row] as T[CK];\n } else if (Array.isArray(siblings)) {\n siblings.push(row);\n } else {\n const message = `The key \"${childrenKey.toString()}\" in parent item is not an array.`;\n throw new Error(message);\n }\n }\n\n return result;\n}\n","import type { SetOptional } from \"type-fest\";\nimport { treeForEach, type TreeForeachOptions } from \"./treeForEach\";\nimport type { ChildrenKey } from \"./types\";\n\ntype TreeToRowsOptions<T extends AnyObject, CK extends string = ChildrenKey> = TreeForeachOptions<T, CK>;\n\n/**\n * 树结构 转 行结构\n */\nexport function treeToRows<\n T extends AnyObject,\n CK extends string = ChildrenKey,\n R extends AnyObject = SetOptional<T, CK>,\n>(tree: T | T[], options: TreeToRowsOptions<T, CK> = {}): R[] {\n const { childrenKey = \"children\" } = options;\n const result: R[] = [];\n\n if (!tree) {\n return result;\n }\n\n treeForEach(tree, (t) => result.push({ ...t, [childrenKey]: undefined }), options);\n\n return result;\n}\n"],"x_google_ignoreList":[59],"mappings":";AAAA,MAAa,mBAAmB;CAC9B,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,mBAAmB;CACnB,eAAe;CACf,SAAS;CACT,MAAM;CACN,WAAW;CACX,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,KAAK;CACL,SAAS;CACT,KAAK;CACL,SAAS;CACT,QAAQ;CACR,WAAW;CACX,iBAAiB;CAClB;AAED,SAAgB,uBAAuB,OAAgB;AACrD,QAAO,OAAO,UAAU,SAAS,KAAK,MAAM;;;;;AC1B9C,SAAgB,QAA6B,OAA4B;AACvE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,gBAAqC,OAA4B;AAC/E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAA6B,OAA4B;AACvE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACA5D,SAAgB,QAAoC,OAA4B;AAC9E,QAAO,uBAAuB,MAAM,CAAC,WAAW,SAAS;;;;;ACF3D,SAAgB,OAAuB,OAA4B;AACjE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;;;;;;;;ACI5D,SAAgB,QAAW,GAAM,GAAe;AAC9C,KAAI,OAAO,GAAG,GAAG,EAAE,CACjB,QAAO;AAET,KAAI,aAAa,QAAQ,aAAa,KACpC,QAAO,EAAE,SAAS,KAAK,EAAE,SAAS;AAEpC,KAAI,aAAa,UAAU,aAAa,OACtC,QAAO,EAAE,UAAU,KAAK,EAAE,UAAU;AAEtC,KAAI,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,MAAM,YAAY,MAAM,KACxE,QAAO;CAGT,MAAM,QAAQ,QAAQ,QAAQ,EAAE;CAChC,MAAM,QAAQ,QAAQ,QAAQ,EAAE;AAChC,KAAI,MAAM,WAAW,MAAM,OACzB,QAAO;AAGT,MAAK,MAAM,OAAO,OAAO;AACvB,MAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,CACtB,QAAO;AAET,MAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAC1B,QAAO;;AAIX,QAAO;;;;;AClCT,SAAgB,QAAyB,OAA4B;AACnE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACH5D,SAAgB,MAAwB,OAA4B;AAClE,QAAO,OAAO,MAAM,MAAM;;;;;ACC5B,SAAgB,QAAQ,OAAyB;AAC/C,KAAI,MAAM,MAAM,CACd,QAAO;AAGT,QAAQ;EAAC;EAAM;EAAW;EAAO;EAAG;EAAI;EAAG,CAAe,SAAS,MAAM;;AAG3E,SAAgB,YAAY,OAAyB;AACnD,QAAQ;EAAC;EAAQ;EAAa;EAAS;EAAM,CAAe,SAAS,MAAM;;;;;ACT7E,SAAgB,OAAuB,OAA4B;AACjE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,WAA2B,OAA4B;AAGrE,QAFgC;EAAC,iBAAiB;EAAU,iBAAiB;EAAmB,iBAAiB;EAAc,CAE1G,SAAS,uBAAuB,MAAM,CAAC;;;;;ACH9D,SAAgB,oBAAoC,OAA4B;AAC9E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,WAAW,OAAyB;AAClD,KAAI,MAAM,MAAM,CACd,QAAO;AAGT,QAAQ,CAAC,OAAO,mBAAmB,OAAO,kBAAkB,CAAe,SAAS,MAAM;;AAG5F,SAAgB,eAAe,OAAyB;AACtD,QAAQ;EAAC;EAAY;EAAa;EAAM,CAAe,SAAS,MAAM;;;;;ACXxE,SAAgB,UAA4B,OAA4B;AACtE,QAAO,OAAO,UAAU,MAAM;;;;;ACChC,SAAgB,SAAiD,OAA4B;AAC3F,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,WAAwC,OAA4B;AAClF,QAAO,SAAS,MAAM,IAAI,OAAO,YAAY;;;;;ACD/C,SAAgB,MAAuC,OAA4B;AACjF,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,OAAuB,OAA4B;AACjE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAAsC,OAA4B;AAChF,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACC5D,SAAgB,cAA8C,OAA4B;AACxF,QAAO,UAAU,MAAM,IAAK,SAAS,MAAM,IAAI,WAAW,MAAM,QAAQ;;;;;ACH1E,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,MAA8B,OAA4B;AACxE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,YAAiC,OAA4B;AAC3E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,kBAAoC,OAA4B;AAC9E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAAiD,OAA4B;AAC3F,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,UAAwC,OAA4B;AAClF,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,YAAiC,OAA4B;AAC3E,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;ACD5D,SAAgB,SAA2B,OAA4B;AACrE,QAAO,uBAAuB,MAAM,KAAK,iBAAiB;;;;;;;;;;ACI5D,SAAgB,UAAa,WAAoB,aAAa,MAAW;AACvE,KAAI,eAAe,YAAY,UAAU,IAAI,OAAO,UAAU,EAC5D,QAAO,EAAE;AAGX,QAAO,QAAQ,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU;;;;;;;;;;;;ACH1D,SAAgB,aAAgB,aAA2B,OAAoC;AAC7F,KAAI,CAAC,QAAQ,YAAY,IAAI,YAAY,WAAW,KAAK,CAAC,WAAW,MAAM,CACzE,QAAO;AAGT,QAAO,YAAY,OAAO,MAAM;;;;;;;;;;;;ACLlC,SAAgB,cAAwC,aAA2B,OAA8C;AAC/H,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,WAAW,MAAM,CAC7C,QAAO,EAAE;AAGX,QAAO,YAAY,QAAgC,MAAM,SAAS;EAChE,MAAM,KAAK,MAAM,KAAK,CAAC,UAAU;AACjC,OAAK,OAAO,KAAK,OAAO,KAAK;AAE7B,SAAO;IACN,EAAE,CAAC;;;;;;;;;;;;ACVR,SAAgB,gBAAmB,aAA2B,UAAwB,OAAkC;AACtH,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,QAAQ,SAAS,CAC7C,QAAO,EAAE;AAEX,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,YAAY,OACxC,QAAO,CAAC,GAAG,SAAS;AAEtB,KAAI,CAAC,QAAQ,SAAS,IAAI,CAAC,SAAS,OAClC,QAAO,CAAC,GAAG,YAAY;AAEzB,KAAI,CAAC,WAAW,MAAM,EAAE;EACtB,MAAM,WAAW,IAAI,IAAI,SAAS;AAElC,SAAO,MAAM,KAAK,IAAI,IAAI,YAAY,QAAQ,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;;CAG/E,MAAM,sBAAM,IAAI,KAAuB;AAEvC,UAAS,SAAS,SAAS;AACzB,MAAI,IAAI,MAAM,KAAK,EAAE,KAAK;GAC1B;AAEF,QAAO,YAAY,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;;;;;;;;;;;ACvBtD,SAAgB,WAAc,aAA2B,WAA8B;AACrF,KAAI,CAAC,QAAQ,YAAY,IAAI,YAAY,WAAW,EAClD,QAAO;AAGT,QAAO,YAAY;;;;;;;;;;;;ACJrB,SAAgB,UAAa,aAA2B,OAAyC;CAC/F,MAAMA,SAAqB,CAAC,EAAE,EAAE,EAAE,CAAC;AAEnC,KAAI,QAAQ,YAAY,CACtB,MAAK,MAAM,QAAQ,YACjB,QAAO,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;AAI1C,QAAO;;;;;;;;;;;;ACTT,SAAgB,kBAAqB,aAA2B,UAAwB,OAAkC;AACxH,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,QAAQ,SAAS,CAC7C,QAAO,EAAE;AAEX,KAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,YAAY,OACxC,QAAO,CAAC,GAAG,SAAS;AAEtB,KAAI,CAAC,QAAQ,SAAS,IAAI,CAAC,SAAS,OAClC,QAAO,CAAC,GAAG,YAAY;AAEzB,KAAI,CAAC,WAAW,MAAM,EAAE;EACtB,MAAM,WAAW,IAAI,IAAI,SAAS;AAElC,SAAO,MAAM,KAAK,IAAI,IAAI,YAAY,QAAQ,SAAS,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;;CAG9E,MAAM,sBAAM,IAAI,KAAuB;AAEvC,UAAS,SAAS,SAAS;AACzB,MAAI,IAAI,MAAM,KAAK,EAAE,KAAK;GAC1B;AAEF,QAAO,YAAY,QAAQ,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;;;;;;;;;;;ACvBrD,SAAgB,UAAa,aAA2B,WAA8B;AACpF,KAAI,CAAC,QAAQ,YAAY,IAAI,YAAY,WAAW,EAClD,QAAO;AAGT,QAAO,YAAY,YAAY,SAAS;;;;;;;;;;;;;ACH1C,SAAgB,WAAc,aAA2B,WAAyB,OAAmC;AACnH,KAAI,CAAC,QAAQ,YAAY,CACvB,QAAO,EAAE;AAEX,KAAI,CAAC,QAAQ,UAAU,CACrB,QAAO,CAAC,GAAG,YAAY;AAEzB,KAAI,CAAC,WAAW,MAAM,CACpB,QAAO,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;CAG5D,MAAM,uBAAO,IAAI,KAAK;AACtB,MAAK,MAAM,QAAQ,UACjB,MAAK,IAAI,MAAM,KAAK,EAAE,KAAK;AAG7B,QAAO,YAAY,KAAK,aAAa;EACnC,MAAM,MAAM,MAAM,SAAS;AAE3B,SAAO,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAI;GACxC;;;;;;;;;;;;;ACpBJ,SAAgB,UAAoB,aAA2B,QAA4C,QAAqD;AAC9J,KAAI,CAAC,QAAQ,YAAY,CACvB,QAAO,EAAE;AAEX,KAAI,CAAC,WAAW,OAAO,CACrB,QAAO,CAAC,GAAG,YAAY;CAGzB,MAAM,YAAY,WAAW,OAAO;AAEpC,QAAO,YAAY,QAAa,MAAM,MAAM,UAAU;AACpD,MAAI,CAAC,OAAO,MAAM,MAAM,CACtB,QAAO;AAET,MAAI,UACF,MAAK,KAAK,OAAO,MAAM,MAAM,CAAC;MAE9B,MAAK,KAAK,KAAqB;AAGjC,SAAO;IACN,EAAE,CAAC;;;;;;;;;;;;;ACrBR,SAAgB,aAAgB,aAA2B,SAAY,OAAgD;AACrH,KAAI,CAAC,YACH,QAAO,EAAE;AAEX,KAAI,YAAY,UAAa,CAAC,WAAW,MAAM,CAC7C,QAAO,CAAC,GAAG,YAAY;AAGzB,MAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;EAC3C,MAAM,OAAO,YAAY;AAEzB,MAAI,SAAS,UAAa,MAAM,MAAM,EAAE,CACtC,QAAO;GAAC,GAAG,YAAY,MAAM,GAAG,EAAE;GAAE;GAAS,GAAG,YAAY,MAAM,IAAI,GAAG,YAAY,OAAO;GAAC;;AAIjG,QAAO,CAAC,GAAG,YAAY;;;;;;;;;;;;ACjBzB,SAAgB,WAAc,aAA2B,OAAO,IAAW;AACzE,KAAI,CAAC,QAAQ,YAAY,CACvB,QAAO,EAAE;CAGX,MAAM,QAAQ,KAAK,KAAK,YAAY,SAAS,KAAK;AAElD,QAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,CAAC,CACjC,KAAK,KAAK,CACV,KAAK,IAAI,MAAM;AACd,SAAO,YAAY,MAAM,IAAI,MAAM,IAAI,OAAO,KAAK;GACnD;;;;;;;;;AChBN,SAAgB,GACd,SACA,UACqC;AACrC,QAAO,QACJ,MAAiB,SAAY,CAAC,MAAM,KAAK,CAAC,CAC1C,OAAuB,QAAW;AACjC,MAAI,SAGF,QAAO,CAFa;GAAE,GAAG;GAAK,GAAG;GAAU,EAEtB,OAAU;AAKjC,SAAO,CAFc,MAAM,sBAAM,IAAI,MAAM,eAAe,EAE/B,OAAU;GACrC;;;;;;;;ACjBN,SAAgB,eAAe,OAAe;CAC5C,MAAM,UAAU,MAAM,QAAQ,aAAa,GAAG;CAC9C,IAAI,YAAY;CAChB,IAAI,YAAY;CAChB,IAAI,aAAa;CACjB,MAAM,aAAa,QAAQ,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM;AACjD,MAAI,MAAM,KAAK;AACb,OAAI,UACF,QAAO;AAET,eAAY;AAEZ,UAAO;;AAET,MAAI,MAAM,KAAK;AACb,kBAAe,MAAM;AAErB,UAAO;;AAGT,iBAAe,OAAO,aAAa;AAEnC,SAAO;GACP;CAEF,MAAM,OAAO,YAAY,MAAM,IAAI,MAAM;AAEzC,KAAI,eAAe,GACjB,QAAO,OAAO;CAIhB,IAAI,SAAS,WAAW,KAAK,GAAG;AAChC,KAAI,OAAO,WAAW,IAAI,CACxB,UAAS,MAAM;AAEjB,KAAI,OAAO,SAAS,IAAI,CACtB,UAAS,OAAO,MAAM,GAAG,GAAG;AAG9B,QAAO,OAAO;;;;;;;;;;;;AChChB,SAAgB,gBAAgB,gBAAgC,OAAgB,WAA8C;CAC5H,MAAM,aAAa,aAAa,eAAe,UAAU,EAAE;AAE3D,KAAI,QAAQ,MAAM,IAAI,YAAY,MAAM,IAAI,WAAW,MAAM,IAAI,eAAe,MAAM,CACpF,QAAO;AAGT,KAAI;AACF,SAAO,eAAe,UAAU,eAAe,GAAG,QAAQ,CAAC;UACpD,OAAO;AACd,SAAO;;;;;;ACRX,SAAgB,cAAc,gBAAgC,OAAgB,WAAoB,WAAW,MAA0B;CACrI,MAAM,YAAY,gBAAgB,gBAAgB,MAAM;AAExD,QAAO,WAAW,eAAe,OAAO,WAAW;EAAE,UAAU;EAAS;EAAW,CAAC,GAAG;;;;;;;;;;;;ACNzF,SAAgB,eAAe,gBAAgC,MAA+B,OAA2C;CACvI,MAAM,gBAAgB,GAAG,eAAe,SAAS,MAAM,SAAS,EAAE,CAAC;AAEnE,QAAO,eAAe,OAAO,gBAAgB,gBAAgB,cAAc,EAAE,EAAE,UAAU,SAAS,CAAC;;;;;ACHrG,MAAMC,yBAA0C;CAC9C,SAAe,OAAkB,OAA4C,OAAsC;EACjH,MAAM,SAAS,sBAAM,IAAI,KAAK,CAAC;AAC/B,OAAK,MAAM,CAAC,KAAK,UAAU,MACzB,QAAO,IAAI,KAAK,MAAM,MAAM,CAAC;AAG/B,SAAO;;CAET,SAAY,OAAe,OAAsC,OAAmC;EAClG,MAAM,SAAS,sBAAM,IAAI,KAAK,CAAC;AAC/B,OAAK,MAAM,SAAS,MAClB,QAAO,IAAI,MAAM,MAAM,CAAC;AAG1B,SAAO;;CAET,WAAc,OAAqB,OAAgC,OAAgC;EAEjG,MAAM,SAAS,MAAM,IAAI,MAAM,MAAM,OAAO,CAAC;AAC7C,QAAM,SAAS,OAAO,UAAU;AAC9B,UAAO,SAAS,MAAM,MAAM;IAC5B;AAEF,SAAO;;CAET,YAAiC,OAAU,OAA4B,OAA8B;EACnG,MAAM,SAAS,MAAM,OAAO,OAAO,OAAO,eAAe,MAAM,CAAC,CAAC;AACjE,OAAK,MAAM,OAAO,QAAQ,QAAQ,MAAM,EAAE;GAGxC,MAAM,aAAa,OAAO,yBAAyB,OAAO,IAAI;AAC9D,OAAI,WAAW,WACb,YAAW,QAAQ,MAAM,WAAW,MAAM;AAE5C,UAAO,eAAe,QAAQ,KAAK,WAAW;;AAGhD,SAAO;;CAET,WAAc,OAAU,OAA+B;AACrD,SAAO,MAAM,MAAM;;CAEtB;;;;;AAOD,SAAgB,UAA+B,MAAS,gBAA8C;CACpG,MAAM,WAAW;EAAE,GAAG;EAAwB,GAAG;EAAgB;CAEjE,MAAM,0BAAU,IAAI,KAAuB;CAC3C,MAAM,SAAS,QAAiB,cAAuB;AACrD,UAAQ,IAAI,QAAQ,UAAU;AAE9B,SAAO;;CAGT,MAAM,SAAY,UAAgB;AAChC,SAAO,SAAS,OAAO,UAAU,WAAa,QAAQ,IAAI,MAAM,IAAIC,YAAU,OAAO,SAAS,GAAU;;CAG1G,MAAMA,eAAa,QAAiB,eAAuC;EAazE,MAAM,aAXJ,SAAS,OAAO,GACZC,WAAS,cACT,QAAQ,OAAO,GACbA,WAAS,aACT,MAAM,OAAO,GACXA,WAAS,WACT,MAAM,OAAO,GACXA,WAAS,WACTA,WAAS,YAGS,QAAQ,MAAM,KAAK,MAAM,OAAO,EAAE,MAAM;AACtE,MAAI,CAAC,UAEH,QAAOD,YAAU,QAAQ,uBAAuB;AAGlD,UAAQ,IAAI,QAAQ,UAAU;AAE9B,SAAO;;AAGT,QAAOA,YAAU,MAAM,SAAS;;;;;;;;;;;AC5FlC,SAAgB,WAAgC,KAAqB;AACnE,QAAO,OAAO,KAAK,IAAI;;;;;ACJzB,SAAgB,cAAmC,aAAgB;AACjE,KAAI,CAAC,SAAS,YAAY,CACxB,OAAM,MAAM,2DAA2D,OAAO,cAAc;AAG9F,KAAI,CAAC,WAAW,YAAY,CAAC,OAC3B,OAAM,MAAM,oCAAoC;AAGlD,QAAO;;;;;;;;;;ACPT,SAAgB,cAAmC,KAA0C;AAC3F,QAAO,OAAO,QAAQ,IAAI;;;;;;;;;;ACC5B,SAAgB,aAAkC,KAAkC;AAClF,QAAO,OAAO,OAAO,IAAI;;;;;;;;;;ACG3B,SAAgB,YAAiC,aAAyD;CACxG,MAAM,IAAI,cAAc,YAAY;CACpC,MAAM,OAAO,WAAW,EAAE;CAC1B,MAAM,SAAS,aAAa,EAAE;CAC9B,MAAM,UAAU,cAAc,EAAE;AAGhC,KAFqB,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,CAGtE,QAAO,QAAQ,OAAO,KAAK,SAAS,GAAG,KAAK,SAAS,EAAE;AAGzD,QAAO;;;;;;;;;;ACZT,SAAgB,SAA8B,aAA2D;CACvG,MAAM,IAAI,cAAc,YAAY;CACpC,MAAM,OAAO,WAAW,EAAE;CAC1B,MAAM,SAAS,aAAa,EAAE;AAG9B,KAFqB,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,CAGtE,QAAO,KAAK,OAAO,KAAK,SAAS,GAAG,KAAK,SAAS,EAAE;AAGtD,QAAO;;;;;;;;;;ACVT,SAAgB,WAAgC,aAA0D;CACxG,MAAM,IAAI,cAAc,YAAY;CACpC,MAAM,OAAO,WAAW,EAAE;CAC1B,MAAM,SAAS,aAAa,EAAE;AAG9B,KAFqB,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,CAGtE,QAAO,OAAO,OAAO,KAAK,SAAS,GAAG,KAAK,SAAS,EAAE;AAGxD,QAAO;;;;;AClBT,SAAgB,WACd,KACA,SACmC;CACnC,MAAM,gBAAgB,EAAE;AAExB,KAAI,CAAC,IACH,QAAO;AAGT,QAAO,cAAc,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,WAAW;EACtD,MAAM,CAAC,QAAQ,YAAY,QAAQ,KAAK,MAAM;AAC9C,MAAI,UAAU;AAEd,SAAO;IACN,cAAc;;;;;ACw7BnB,SAAS,OAAO,SAAS,UAAU;AACjC,KAAI,CAAC,WAAW,CAAC,SACf,QAAO,WAAW,YAAY,EAAE;CAElC,MAAM,QAAQ,OAAO,eAAe,QAAQ;CAC5C,MAAM,SAAS,QAAQ,EAAE,GAAG,SAAS,GAAG,OAAO,OAAO,OAAO,OAAO,MAAM,EAAE,QAAQ;AACpF,MAAK,MAAM,OAAO,OAAO,KAAK,SAAS,CACrC,QAAO,OAAO,cAAc,QAAQ,KAAK,IAAI,cAAc,SAAS,KAAK,GAAG,OAAO,QAAQ,MAAM,SAAS,KAAK,GAAG,SAAS;AAE7H,QAAO;;AAsjCT,SAAS,cAAc,OAAO;AAC5B,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO;CAET,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAEE,cAAc,OAAO,aACrB,cAAc,QACd,OAAO,eAAe,UAAU,KAAK;;;;;AC/gEzC,MAAa,eAAe;;;;ACA5B,SAAgB,WAAmD,KAAQ,MAAgC;CACzG,MAAM,SAAS,EAAE;AAEjB,KAAI,CAAC,SAAS,IAAI,CAChB,QAAO;AAET,KAAI,CAAC,QAAQ,KAAK,CAChB,QAAO;AAGT,QAAO,KAAK,QAAQ,KAAK,SAAS;AAChC,MAAI,QAAQ,IACV,KAAI,QAAQ,IAAI;AAGlB,SAAO;IACN,OAAO;;;;;;;;;;;ACRZ,SAAgB,aAAkC,KAAqD;CACrG,MAAM,SAAS,EAAE;AAEjB,KAAI,CAAC,SAAS,IAAI,CAChB,QAAO;AAGT,MAAK,MAAM,CAAC,GAAG,MAAM,cAAc,IAAI,CACrC,QAAO,KAAK;AAGd,QAAO;;;;;ACnBT,MAAM,KAAK;AACX,MAAM,KAAK;;;;AAKX,SAAgB,kBAAkB,OAAe,MAAyB;AACxE,KAAI,CAAC,SAAS,MAAM,IAAI,MAAM,WAAW,EACvC,QAAO;AAGT,QAAO,MAAM,QAAQ,KAAK,SAAS;AAEjC,MAAI,GAAG,KAAK,KAAK,CACf,QAAO;AAGT,MAAI,SAAS,KAAK,mBAAmB,CACnC,QAAO;AAGT,MAAI,SAAS,WAAW,KAAK,GAC3B,QAAO,KAAK,GAAG,mBAAmB,GAAG,KAAK,MAAM,EAAE;AAGpD,MAAI,SAAS,WAAW,KAAK,GAC3B,QAAO,KAAK,GAAG,mBAAmB,GAAG,KAAK,MAAM,EAAE;AAGpD,SAAO;GACP;;;;;AC9BJ,SAAgB,cAAoE,OAAU,QAAW,aAAgB;AACvH,QAAO,MAAM,QAAQ,QAAQ,YAAY;;;;;ACD3C,SAAgB,aAA+D,MAAiC,WAAiB;AAC/H,KAAI,SAAS,KAAK,IAAI,KACpB,KAAI;AAGF,SAFc,KAAK,MAAM,KAAK;UAGvB,OAAO;AACd,SAAO;;KAGT,QAAO;;;;;ACVX,SAAgB,eAAmD,MAAiC,YAAiC,UAAU,cAAc,KAAU;AACrK,KAAI,SAAS,KAAK,IAAI,KACpB,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,YAAY;AAEtC,MAAI,cAAc,SAChB,QAAO,OAAO,KAAK,MAAM,OAAO,EAAE,CAAC;AAGrC,SAAO;UACA,OAAO;AACd,SAAO,EAAE;;KAGX,QAAO,EAAE;;;;;ACcb,SAAgB,oBACd,MACA,MACA,SACI;AACJ,KAAI,WAAW,QAAQ,eAAe,EAAE;EACtC,MAAM,qBAAqB,QAAQ,eAAe,MAAM,KAAK;AAC7D,MAAI,sBAAsB,uBAAuB,KAC/C,QAAO;;AAIX,QAAO,QAAQ;;;;;ACjCjB,SAASE,UAA8D,KAAQ,UAAiC,SAAsD;AAEpK,KAAI,CADW,SAAS,KAAK,QAAQ,CAEnC;CAGF,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,WAAW,IAAI;CACrB,IAAIC;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAMD,UAAQ,GAAG,UAAU,iBAAiB,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE;;AAG9F,QAAO;EAAE,GAAG;GAAM,mBAAmB;EAAa;;AAIpD,SAASE,WAA+D,KAAQ,UAAiC,SAAsD;CACrK,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,WAAW,IAAI;CACrB,IAAID;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAMD,UAAQ,GAAG,UAAU,iBAAiB,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE;;AAI9F,KAAI,CADW,SAAS,KAAK,QAAQ,CAEnC;AAGF,QAAO;EAAE,GAAG;GAAM,mBAAmB;EAAa;;AAIpD,SAASG,cAAkE,KAAQ,UAAiC,SAAsD;CACxK,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,8BAAc,IAAI,SAAqB;CAC7C,MAAM,+BAAe,IAAI,SAAe;CACxC,MAAM,mCAAmB,IAAI,SAAgB;CAC7C,IAAIC;CACJ,MAAM,iBAAgC;AACpC,MAAI,MAAM,WAAW,EACnB,QAAO;EAGT,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAChD,MAAM,mBAAmB,oBAAoB,UAAU,cAAc,aAAa;EAClF,MAAM,WAAW,SAAS;AAE1B,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;EAG9B,MAAM,SAAS,UAAU,aAAa,QAAQ;EAC9C,MAAM,YAAY,aAAa,UAAU;EACzC,MAAM,eAAe,UAAU,YAAY,IAAI,OAAO;AAEtD,MAAI,CAAC,aAAa,CAAC,aACjB,QAAO,UAAU;EAGnB,MAAM,iBAAiB,SAAS,UAAU,aAAa;AACvD,MAAI,aAAa,CAAC,eAChB;EAGF,MAAM,UAAU;GAAE,GAAG;IAAW,mBAAmB;GAAW;AAC9D,MAAI,UACF,UAAS;AAGX,cAAY,IAAI,UAAU,eAAe;AACzC,eAAa,IAAI,UAAU,QAAQ;AACnC,mBAAiB,IAAI,UAAU,iBAAiB;AAEhD,MAAI,kBAAkB,QAAQ;GAC5B,MAAM,gBAAgB,aAAa,IAAI,OAAO;GAC9C,MAAM,oBAAoB,iBAAiB,IAAI,OAAO;AAEtD,OAAI,iBAAiB,mBAAmB;AACtC,QAAI,CAAC,cAAc,mBACjB,CAAC,cAAc,qBAA6B,EAAE;AAEhD,kBAAc,mBAAmB,KAAK,QAAQ;;;AAIlD,SAAO,UAAU;;AAGnB,QAAO,UAAU;;AAGnB,MAAMC,eAAa;CAAE,KAAKN;CAAS,MAAME;CAAU,SAASC;CAAa;AAIzE,SAAgB,WAAiE,MAAe,UAAiC,UAAoC,EAAE,EAAW;CAChL,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkBG,aAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,QAAO,QAAQ,KAAK,GAChB,KAAK,KAAK,QAAQ,gBAAgB,KAAK,UAAU,aAAa,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,GAClF,gBAAgB,MAAM,UAAU,aAAa,IAAI,EAAE;;;;;AChHzD,MAAMC,eAAa;CAAE,KAAKC;CAAS,MAAMC;CAAU,SAASC;CAAa;AAGzE,SAASF,UAA8D,KAAQ,UAA+B,SAAoD;AAEhK,KADuB,SAAS,KAAK,QAAQ,CAE3C,QAAO;CAIT,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAEnE,KAAI,QAAQ,SAAS,CACnB,MAAK,MAAM,SAAS,UAAU;EAE5B,MAAM,SAASA,UAAQ,OAAO,UADL;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG,CAC5C;AACzD,MAAI,OACF,QAAO;;;AASf,SAASC,WAA+D,KAAQ,UAA+B,SAAoD;CAEjK,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAEnE,KAAI,QAAQ,SAAS,CACnB,MAAK,MAAM,SAAS,UAAU;EAE5B,MAAM,SAASA,WAAS,OAAO,UADN;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG,CAC3C;AAC1D,MAAI,OACF,QAAO;;AAMb,KADuB,SAAS,KAAK,QAAQ,CAE3C,QAAO;;AAOX,SAASC,cAAkE,KAAQ,UAA+B,SAAoD;CACpK,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,iBAAgC;AACpC,MAAI,MAAM,WAAW,EACnB;EAEF,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAEhD,MAAM,WAAW,SADQ,oBAAoB,UAAU,cAAc,aAAa;AAGlF,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;AAI9B,MADuB,SAAS,UAAU,aAAa,CAErD,QAAO;AAGT,SAAO,UAAU;;AAGnB,QAAO,UAAU;;;;;AAOnB,SAAgB,SAA+D,MAAe,UAA+B,UAAkC,EAAE,EAAiB;CAChL,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkBJ,aAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,KAAI,QAAQ,KAAK,EAAE;AACjB,OAAK,MAAM,OAAO,MAAM;GACtB,MAAM,SAAS,gBAAuB,KAAK,UAAU,aAAa;AAClE,OAAI,OACF,QAAO;;AAIX;;AAGF,QAAO,gBAAuB,MAAM,UAAU,aAAa;;;;;AC9F7D,MAAMK,eAAa;CAAE,KAAKC;CAAS,MAAMC;CAAU,SAASC;CAAa;AAGzE,SAASF,UAA8D,KAAQ,UAAkC,SAAwC;AACvJ,UAAS,KAAK,QAAQ;CAEtB,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAGnE,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,OAAK,MAAM,SAAS,SAClB,WAAQ,OAAO,UAAU,iBAAiB;;;AAMhD,SAASC,WAA+D,KAAQ,UAAkC,SAAwC;CAExJ,MAAM,WAAW,IADQ,oBAAoB,KAAK,SAAS,QAAQ;AAGnE,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,OAAK,MAAM,SAAS,SAClB,YAAS,OAAO,UAAU,iBAAiB;;AAG/C,UAAS,KAAK,QAAQ;;AAIxB,SAASC,cAAkE,KAAQ,UAAkC,SAAwC;CAC3J,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,iBAAiB;AACrB,MAAI,MAAM,WAAW,EACnB;EAGF,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAEhD,MAAM,WAAW,SADQ,oBAAoB,UAAU,cAAc,aAAa;AAGlF,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;AAE9B,WAAS,UAAU,aAAa;AAChC,YAAU;;AAGZ,WAAU;;AAGZ,SAAgB,YAAkE,MAAe,UAAkC,UAAqC,EAAE,EAAQ;CAChL,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkBJ,aAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,KAAI,QAAQ,KAAK,CACf,MAAK,MAAM,OAAO,KAChB,iBAAuB,KAAK,UAAU,aAAa;KAGrD,iBAAuB,MAAM,UAAU,aAAa;;;;;AC9DxD,MAAM,aAAa;CAAE,KAAK;CAAS,MAAM;CAAU,SAAS;CAAa;AAGzE,SAAS,QAAmF,KAAQ,UAAiC,SAAqD;CACxL,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,SAAS,SAAS,KAAK,QAAQ;CACrC,MAAM,WAAW,IAAI;CACrB,IAAIK;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAM,QAAQ,GAAG,UAAU,iBAAiB,CAAC;;AAG3E,QAAO;EAAE,GAAG;GAAS,mBAAmB;EAAa;;AAIvD,SAAS,SAAoF,KAAQ,UAAiC,SAAqD;CACzL,MAAM,mBAAmB,oBAAoB,KAAK,SAAS,QAAQ;CACnE,MAAM,WAAW,IAAI;CACrB,IAAIA;AAEJ,KAAI,QAAQ,SAAS,EAAE;EACrB,MAAM,mBAAmB;GAAE,GAAG;GAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,IAAI;GAAE,OAAO,QAAQ,QAAQ;GAAG;AACrG,gBAAc,SAAS,KAAK,MAAM,SAAS,GAAG,UAAU,iBAAiB,CAAC;;AAI5E,QAAO;EAAE,GAFM,SAAS,KAAK,QAAQ;GAEhB,mBAAmB;EAAa;;AAIvD,SAAS,YAAuF,KAAQ,UAAiC,SAAqD;CAC5L,MAAMC,QAA4B,CAAC;EAAE,UAAU;EAAK,cAAc;EAAS,CAAC;CAC5E,MAAM,wBAAQ,IAAI,SAA6B;CAC/C,MAAM,mCAAmB,IAAI,SAAgB;CAC7C,IAAIC;CAEJ,MAAM,iBAAiB;AACrB,MAAI,MAAM,WAAW,EACnB,QAAO;EAET,MAAM,EAAE,UAAU,iBAAiB,MAAM,OAAO;EAChD,MAAM,mBAAmB,oBAAoB,UAAU,cAAc,aAAa;EAClF,MAAM,WAAW,SAAS;AAE1B,MAAI,QAAQ,SAAS,EAAE;GACrB,MAAM,mBAAmB;IAAE,GAAG;IAAc,SAAS,CAAC,GAAG,aAAa,SAAS,SAAS;IAAE,OAAO,aAAa,QAAQ;IAAG;GACzH,MAAM,gBAAgB,SAAS,KAAK,gBAAc;IAAE;IAAU,cAAc;IAAkB,EAAE;AAChG,SAAM,KAAK,GAAG,cAAc;;EAE9B,MAAM,MAAM,SAAS,UAAU,aAAa;AAC5C,QAAM,IAAI,UAAU,IAAI;AACxB,mBAAiB,IAAI,UAAU,iBAAiB;EAGhD,MAAM,SAAS,UAAU,aAAa,QAAQ;AAC9C,MAAI,QAAQ;GACV,MAAM,YAAY,MAAM,IAAI,OAAO;GACnC,MAAM,oBAAoB,iBAAiB,IAAI,OAAO;AAEtD,OAAI,aAAa,kBACf,KAAI,UAAU,mBACZ,WAAU,mBAAmB,KAAK,IAAI;OAEtC,CAAC,UAAU,qBAA2C,CAAC,IAAI;;AAKjE,MAAI,aAAa,UAAU,EACzB,UAAS;AAGX,SAAO,UAAU;;AAGnB,QAAO,UAAU;;AAKnB,SAAgB,QAAmF,MAAe,UAAiC,UAAiC,EAAE,EAAuC;CAC3N,MAAM,EAAE,cAAc,YAAY,WAAW,OAAO,mBAAmB;CACvE,MAAM,kBAAkB,WAAW;CACnC,MAAM,eAAe;EAAe;EAAmB,OAAO;EAAG,SAAS,EAAE;EAAE;EAAgB;AAE9F,QAAO,QAAQ,KAAK,GAChB,KAAK,KAAK,QAAQ,gBAA0B,KAAK,UAAU,aAAa,CAAC,GACzE,gBAA0B,MAAM,UAAU,aAAa;;;;;;;;ACnF7D,SAAgB,WAMd,MAAW,SAA0D;CACrE,MAAM,EAAE,cAAc,YAAY,SAAS,MAAM,cAAc,eAAe,WAAW,EAAE;CAC3F,MAAMC,SAAc,EAAE;CACtB,MAAM,sBAAM,IAAI,KAAqB;AAErC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,KAAK,IAAI;AAEf,MAAI,CAAC,IAAI,IAAI,GAAG,CACd,KAAI,IAAI,IAAI,IAAI;;AAIpB,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,WAAW,IAAI;EACrB,MAAM,SAAS,IAAI,IAAI,SAAS;AAEhC,MAAI,CAAC,UAAU,CAAC,UAAU;AACxB,UAAO,KAAK,IAAI;AAEhB;;EAGF,MAAM,WAAW,OAAO;AAExB,MAAI,OAAO,SAAS,IAAI,YAAY,SAAS,CAC3C,QAAO,eAAe,CAAC,IAAI;WAClB,MAAM,QAAQ,SAAS,CAChC,UAAS,KAAK,IAAI;OACb;GACL,MAAM,UAAU,YAAY,YAAY,UAAU,CAAC;AACnD,SAAM,IAAI,MAAM,QAAQ;;;AAI5B,QAAO;;;;;;;;AChDT,SAAgB,WAId,MAAe,UAAoC,EAAE,EAAO;CAC5D,MAAM,EAAE,cAAc,eAAe;CACrC,MAAMC,SAAc,EAAE;AAEtB,KAAI,CAAC,KACH,QAAO;AAGT,aAAY,OAAO,MAAM,OAAO,KAAK;EAAE,GAAG;GAAI,cAAc;EAAW,CAAC,EAAE,QAAQ;AAElF,QAAO"}
package/metadata.json CHANGED
@@ -25,12 +25,17 @@
25
25
  "isDate",
26
26
  "isEqual",
27
27
  "isError",
28
+ "isFalsy",
29
+ "isFalsyLike",
28
30
  "isFile",
29
31
  "isFunction",
30
32
  "isGeneratorFunction",
33
+ "isInfinity",
34
+ "isInfinityLike",
31
35
  "isInteger",
32
36
  "isIterable",
33
37
  "isMap",
38
+ "isNaN",
34
39
  "isNull",
35
40
  "isNumber",
36
41
  "isObject",
@@ -57,8 +62,12 @@
57
62
  "stringInitialCase",
58
63
  "stringReplace",
59
64
  "stringToJson",
65
+ "stringToNumber",
60
66
  "stringToValues",
61
67
  "to",
68
+ "toMathBignumber",
69
+ "toMathDecimal",
70
+ "toMathEvaluate",
62
71
  "treeFilter",
63
72
  "treeFind",
64
73
  "treeForEach",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "description": "pawover's kit",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
- "version": "0.0.0-alpha.21",
7
+ "version": "0.0.0-alpha.23",
8
8
  "packageManager": "pnpm@10.20.0",
9
9
  "engines": {
10
10
  "node": ">=22.20.0"
@@ -52,6 +52,7 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "alova": "^3.4.0",
55
+ "mathjs": "^15.1.0",
55
56
  "react": "^19.2.0",
56
57
  "vite": "^7.2.4",
57
58
  "vue": "^3.5.25",
@@ -79,6 +80,7 @@
79
80
  },
80
81
  "peerDependencies": {
81
82
  "alova": ">=3.3.0",
83
+ "mathjs": ">=15.1.0",
82
84
  "react": ">=19.2.0",
83
85
  "vite": ">=6.0",
84
86
  "vue": ">=3.5.0",
@@ -88,6 +90,9 @@
88
90
  "alova": {
89
91
  "optional": true
90
92
  },
93
+ "mathjs": {
94
+ "optional": true
95
+ },
91
96
  "react": {
92
97
  "optional": true
93
98
  },