@pawover/kit 0.0.0-beta.1 → 0.0.0-beta.3

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["forked: [T[], T[]]","R1","DefaultCloningStrategy: CloningStrategy","cloneDeep","strategy","value","match: RegExpExecArray | null","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/isAbortSignal.ts","../src/utils/typeof/isArray.ts","../src/utils/typeof/isBigInt.ts","../src/utils/typeof/isBlob.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isObject.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/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/isReadableStream.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/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","../src/utils/object/objectAssign.ts","../src/utils/object/objectCrush.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectSwitch.ts","../src/utils/string/stringInitialCase.ts","../src/utils/string/stringReplace.ts","../src/utils/string/stringTemplate.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 PROTOTYPE_TAGS = {\n abortSignal: \"[object AbortSignal]\",\n array: \"[object Array]\",\n asyncFunction: \"[object AsyncFunction]\",\n asyncGeneratorFunction: \"[object AsyncGeneratorFunction]\",\n bigInt: \"[object BigInt]\",\n blob: \"[object Blob]\",\n boolean: \"[object Boolean]\",\n date: \"[object Date]\",\n error: \"[object Error]\",\n file: \"[object File]\",\n function: \"[object Function]\",\n generatorFunction: \"[object GeneratorFunction]\",\n map: \"[object Map]\",\n null: \"[object Null]\",\n number: \"[object Number]\",\n object: \"[object Object]\",\n promise: \"[object Promise]\",\n readableStream: \"[object ReadableStream]\",\n regExp: \"[object RegExp]\",\n set: \"[object Set]\",\n string: \"[object String]\",\n symbol: \"[object Symbol]\",\n undefined: \"[object Undefined]\",\n URLSearchParams: \"[object URLSearchParams]\",\n weakMap: \"[object WeakMap]\",\n weakSet: \"[object WeakSet]\",\n webSocket: \"[object WebSocket]\",\n window: \"[object Window]\",\n} as const;\n\nexport const TYPED_ARRAY_TAGS = new Set([\n \"[object Int8Array]\",\n \"[object Uint8Array]\",\n \"[object Uint8ClampedArray]\",\n \"[object Int16Array]\",\n \"[object Uint16Array]\",\n \"[object Int32Array]\",\n \"[object Uint32Array]\",\n \"[object Float32Array]\",\n \"[object Float64Array]\",\n \"[object BigInt64Array]\",\n \"[object BigUint64Array]\",\n]);\n\nexport function resolvePrototypeString(value: unknown) {\n return Object.prototype.toString.call(value);\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.abortSignal;\n}\n","import { TYPED_ARRAY_TAGS, resolvePrototypeString } from \"./types\";\n\ntype TypedArray = | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;\n\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isTypedArray(value: unknown): value is TypedArray {\n return typeof value === \"object\" && value !== null && TYPED_ARRAY_TAGS.has(resolvePrototypeString(value));\n}\n","export function isBigInt(value: unknown): value is bigint {\n return typeof value === \"bigint\";\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isBlob(value: unknown): value is Blob {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.blob;\n}\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","import type { Class } from \"type-fest\";\nimport { isAsyncFunction, isFunction } from \".\";\n\nfunction isConstructable(fn: unknown): boolean {\n try {\n // 尝试用 new 调用(但不执行 constructor)\n Reflect.construct(fn as AnyFunction, []);\n\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isClass(value: unknown): value is Class<AnyObject> {\n return (\n isFunction(value) &&\n !isAsyncFunction(value) &&\n Function.prototype.toString.call(value).startsWith(\"class \") &&\n isConstructable(value) &&\n value.prototype !== undefined\n );\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 判断是否为对象类型\n * - 可选是否检查原型为 `Object.prototype`,防止原型链污染\n *\n * @param value - 待检查值\n * @param prototypeCheck - 是否进行原型检查,默认 `true`\n */\nexport function isObject(value: unknown, prototypeCheck = true): value is Record<PropertyKey, unknown> {\n const check = resolvePrototypeString(value) === PROTOTYPE_TAGS.object;\n\n return prototypeCheck ? check && Object.getPrototypeOf(value) === Object.prototype : check;\n}\n","import { isObject } from \"./isObject\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isDate(value: unknown): value is Date {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.date && typeof (value)[\"getTime\"] === \"function\";\n } catch (error) {\n return false;\n }\n}\n","import { isDate, isRegExp } from \".\";\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 (isDate(x) && isDate(y)) {\n return x.getTime() === y.getTime();\n }\n if (isRegExp(x) && isRegExp(y)) {\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 { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isError(value: unknown): value is Error {\n return value instanceof Error || resolvePrototypeString(value) === PROTOTYPE_TAGS.error;\n}\n","import { isNaN, isNull, isUndefined } from \".\";\n\nexport function isFalsy(value: unknown): boolean {\n if (isNaN(value) || isNull(value) || isUndefined(value)) {\n return true;\n }\n\n return value === false || value === 0 || value === 0n || value === \"\";\n}\n\nexport function isFalsyLike(value: unknown): boolean {\n if (isFalsy(value)) {\n return true;\n }\n\n return typeof value === \"string\" && (value === \"null\" || value === \"undefined\" || value === \"NaN\" || value === \"false\" || value === \"0\" || value === \"0n\");\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isFile(value: unknown): value is File {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.file;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isFunction(value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\nexport function isAsyncFunction(value: unknown): value is AnyAsyncFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncFunction;\n}\n\nexport function isGeneratorFunction(value: unknown): value is AnyGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.generatorFunction;\n}\n\nexport function isAsyncGeneratorFunction(value: unknown): value is AnyAsyncGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncGeneratorFunction;\n}\n","import { isObject } from \"./isObject\";\n\nexport function isIterable(value: unknown): value is { [Symbol.iterator]: () => Iterator<unknown> } {\n return isObject(value) && Symbol.iterator in value;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isMap(value: unknown): value is Map<unknown, unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.map;\n}\n\nexport function isWeakMap(value: unknown): value is WeakMap<AnyObject, unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.weakMap;\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","/**\n * 检查 value 是否为 number 类型\n *\n * @param value - 待检查值\n * @param checkNaN - 是否排除 `NaN`,默认为 `true`\n */\nexport function isNumber(value: unknown, checkNaN = true): value is number {\n return typeof value === \"number\" && (!checkNaN || !isNaN(value));\n}\n\n/**\n * 检查 value 是否为 NaN\n *\n * @param value - 待检查值\n */\nexport function isNaN(value: unknown): value is number {\n return Number.isNaN(value);\n}\n\n/**\n * 检查 value 是否为整数\n *\n * @param value - 待检查值\n * @param safeCheck - 是否附加安全数检查\n */\nexport function isInteger(value: unknown, safeCheck = true): value is number {\n const check = Number.isInteger(value);\n\n return safeCheck ? check && Number.isSafeInteger(value) : check;\n}\n\n/**\n * 检查 value 是否为正整数\n * - 此函数中 `0` 不被视为正整数\n *\n * @param value - 待检查值\n * @param safeCheck - 是否附加安全数检查\n */\nexport function isPositiveInteger(value: unknown, safeCheck = true): value is number {\n return isInteger(value, safeCheck) && value > 0;\n}\n\n/**\n * 检查 value 是否为负整数\n * - 此函数中 `0` 不被视为负整数\n *\n * @param value - 待检查值\n * @param safeCheck - 是否附加安全数检查\n */\nexport function isNegativeInteger(value: unknown, safeCheck = true): value is number {\n return isInteger(value, safeCheck) && value < 0;\n}\n\n/**\n * 检查 value 是否为 Infinity\n * - 排除 `NaN`\n *\n * @param value - 待检查值\n */\nexport function isInfinity(value: unknown): value is number {\n return isNumber(value) && (Number.POSITIVE_INFINITY === value || Number.NEGATIVE_INFINITY === value);\n}\n\n/**\n * 检查 value 是否类似 Infinity\n * - 排除 `NaN`\n *\n * @param value - 待检查值\n */\nexport function isInfinityLike(value: unknown): boolean {\n const check = isInfinity(value);\n\n if (check) {\n return check;\n }\n\n if (typeof value === \"string\") {\n const v = value.trim().toLowerCase();\n\n return v === \"infinity\" || v === \"-infinity\" || v === \"+infinity\";\n }\n\n return false;\n}\n","import { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isPromise(value: unknown): value is Promise<unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.promise;\n}\n\nexport function isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return isPromise(value) || (isObject(value) && isFunction(value[\"then\"]));\n}\n","import { isFunction, isObject } from \"../index\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * Checks if a value is a WHATWG ReadableStream instance.\n *\n * - Uses `Object.prototype.toString` where supported (modern browsers, Node.js ≥18).\n * - Falls back to duck-typing in older environments.\n * - Resistant to basic forgery, but not 100% secure in all polyfill scenarios.\n *\n * ⚠️ Note: In older Node.js (<18) or with non-compliant polyfills, this may return false positives or negatives.\n */\nexport function isReadableStream(value: unknown): value is ReadableStream {\n // Modern environments (Chrome 52+, Firefox 57+, Safari 10.1+, Node.js 18+)\n if (resolvePrototypeString(value) === PROTOTYPE_TAGS.readableStream) {\n return true;\n }\n\n // Fallback for older browsers / polyfills (e.g., web-streams-polyfill)\n return isObject(value) && isFunction(value[\"getReader\"]) && isFunction(value[\"pipeThrough\"]);\n}\n","import { isBoolean, isFunction, isObject, isString } from \".\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isRegExp(value: unknown): value is RegExp {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n const regex = value as unknown as RegExp;\n\n return (\n resolvePrototypeString(value) === PROTOTYPE_TAGS.regExp &&\n isString(regex.source) &&\n isString(regex.flags) &&\n isBoolean(regex.global) &&\n isFunction(regex.test)\n );\n } catch (error) {\n return false;\n }\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isSet(value: unknown): value is Set<unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.set;\n}\n\nexport function isWeakSet(value: unknown): value is WeakSet<AnyObject> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.weakSet;\n}\n","export function isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n","export function isSymbol(value: unknown): value is symbol {\n return typeof value === \"symbol\";\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === \"undefined\";\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isURLSearchParams(value: unknown): value is URLSearchParams {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.URLSearchParams;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isWebSocket(value: unknown): value is WebSocket {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.webSocket;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isWindow(value: unknown): value is Window {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.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[]): T | undefined;\nexport function arrayFirst<T>(initialList: readonly T[], saveValue: T): T;\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[]): T | undefined;\nexport function arrayLast<T>(initialList: readonly T[], saveValue: T): T;\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>(promise: Readonly<Promise<T>>, errorExt?: PlainObject): 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 { isString } from \"../typeof\";\n\nconst R1 = /[^0-9.-]/g;\n\n/**\n * 从字符串中提取数字字符串\n *\n * @param input 待处理字符串\n */\nexport function stringToNumber(input: string) {\n if (!isString(input) || !input.length) {\n return \"\";\n }\n\n const cleaned = input.replace(R1, \"\");\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 { isFalsyLike, 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 (isFalsyLike(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 | undefined, isFormat?: true): string;\nexport function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: number | undefined, isFormat?: false): BigNumber;\nexport function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: number | undefined, isFormat = true): string | BigNumber {\n const bigNumber = toMathBignumber(mathJsInstance, value);\n\n return isFormat ? mathJsInstance.format(bigNumber, { notation: \"fixed\", precision: 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<K extends PropertyKey, V, NK extends PropertyKey, NV>(obj: PlainObject<K, V>, toEntry: (key: K, value: V) => [NK, NV]): PlainObject<NK, NV> {\n const defaultResult = {} as PlainObject<NK, NV>;\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","import type { Assign } from \"radashi\";\nimport { isObject } from \"../typeof\";\n\n/**\n * 递归地将第二个对象合并到第一个对象的副本中\n * - 只有普通对象才会递归合并\n *\n * @param initial 初始对象\n * @param override 待合并对象\n */\nexport function objectAssign<I extends PlainObject, O extends PlainObject>(initial: I, override: O): Assign<I, O> {\n if (!isObject(initial) || !isObject(override)) {\n return (initial ?? override ?? {}) as Assign<I, O>;\n }\n\n const proto = Object.getPrototypeOf(initial);\n const assigned = proto ? { ...initial } : Object.assign(Object.create(proto), initial);\n\n for (const key of Object.keys(override)) {\n assigned[key] = isObject(initial[key]) && isObject(override[key]) ? objectAssign(initial[key], override[key]) : override[key];\n }\n\n return assigned;\n}\n","import type { Simplify, UnionToIntersection } from \"type-fest\";\nimport { isArray, isObject } from \"../typeof\";\n\ntype Crush<T> = T extends readonly (infer U)[]\n ? Record<string, U extends object ? unknown : U>\n : Simplify<\n UnionToIntersection<\n keyof T extends infer Prop\n ? Prop extends keyof T\n ? T[Prop] extends infer Value\n ?\n | ([Extract<Value, object>] extends [never] ? never : Record<string, unknown>)\n | ([Exclude<Value, object>] extends [never]\n ? never\n : [Extract<Value, object>] extends [never]\n ? { [P in Prop]: Value }\n : Record<string, unknown>)\n : never\n : never\n : never\n >\n >;\n\nexport function objectCrush<T extends PlainObject>(value: T): Crush<T> {\n if (!value) {\n return {} as Crush<T>;\n }\n\n function crushReducer(crushed: Crush<T>, value: unknown, path: string) {\n if (isObject(value) || isArray(value)) {\n for (const [prop, propValue] of Object.entries(value)) {\n crushReducer(crushed, propValue, path ? `${path}.${prop}` : prop);\n }\n } else {\n crushed[path as keyof Crush<T>] = value as Crush<T>[keyof Crush<T>];\n }\n\n return crushed;\n }\n\n return crushReducer({} as Crush<T>, value, \"\");\n}\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 R1 = /\\S+/g;\nconst R2 = /[^a-zA-Z\\u00C0-\\u017F]/;\n\n/**\n * 字符串首字母大小写\n * - 包含非西欧字母字符时,不处理\n * - 纯字母且全大写时,不处理\n * - 纯字母且非全大写时,首字母小写,其余保留\n * - 纯字母且非全大写时,首字母大写,其余保留\n *\n * @param input 待处理字符串\n * @param caseType 大小写类型\n */\nexport function stringInitialCase(input: string, caseType?: \"lower\" | \"upper\" | undefined) {\n if (!isString(input) || !input.length) {\n return \"\";\n }\n\n return input.replace(R1, (word) => {\n // 非西欧字母字符(如.,'-等)→ 保留\n if (R2.test(word)) {\n return word;\n }\n // 纯字母且全大写 → 保留\n if (word === word.toLocaleUpperCase()) {\n return word;\n }\n // 纯字母且非全大写 → 首字母小写,其余保留\n if (caseType === \"lower\" && word[0]) {\n return word[0].toLocaleLowerCase() + word.slice(1);\n }\n // 纯字母且非全大写 → 首字母大写,其余保留\n if (caseType === \"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\";\nimport { isString } from \"../typeof\";\n\n/**\n * 字符串替换\n * - 替换第一个匹配项\n *\n * @param input 待处理字符串\n * @param search 匹配项\n * @param replacement 替换项\n */\nexport function stringReplace<I extends string, S extends string, R extends string>(input: I, search: S, replacement: R) {\n if (!isString(input) || !input.length) {\n return \"\" as Replace<I, S, R>;\n }\n\n\n return input.replace(search, replacement) as Replace<I, S, R>;\n}\n","import { isString } from \"../typeof\";\n\n/**\n * 字符串模板替换\n *\n * @param input 待处理字符串\n * @param template 模板对象\n * @param regex 模板匹配正则\n */\nexport function stringTemplate(input: string, template: PlainObject, regex = /\\{\\{(.+?)\\}\\}/g) {\n if (!isString(input) || !input.length) {\n return \"\";\n }\n\n let result = \"\";\n let from = 0;\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(input))) {\n result += input.slice(from, match.index) + template[match[1]!];\n from = regex.lastIndex;\n }\n\n return result + input.slice(from);\n}\n","import { isString } from \"../typeof\";\n\n/**\n * 处理 JSON 字符串\n *\n * @param input 待处理字符串\n * @param safeValue 安全值\n */\nexport function stringToJson<R extends AnyObject = AnyObject, D extends R = R>(input: string | null | undefined, safeValue: D): R {\n if (!isString(input) || !input.length) {\n return safeValue;\n }\n\n try {\n const value = JSON.parse(input);\n\n return value;\n } catch (error) {\n return safeValue;\n }\n}\n","import { isString } from \"../typeof\";\n\n\n/**\n * 字符串分割为数组\n *\n * @param input 待处理字符串\n * @param valueType 数组中每一项的类型\n * @param splitSymbol 分隔符,默认为 `,`\n */\nexport function stringToValues(input: string | null | undefined, valueType?: \"number\" | undefined, splitSymbol?: string | undefined): number[];\nexport function stringToValues(input: string | null | undefined, valueType: \"string\", splitSymbol?: string | undefined): string[];\nexport function stringToValues(input: string | null | undefined, valueType: \"number\" | \"string\" = \"number\", splitSymbol = \",\"): (number | string)[] {\n if (!isString(input) || !input.length) {\n return [];\n }\n\n try {\n const values = input.split(splitSymbol);\n\n if (valueType === \"number\") {\n return values.map((d) => Number(d));\n }\n\n return values;\n } catch (error) {\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>(tree: T, meta: BaseCallbackMeta<T>, options: BaseInnerOptions<T, CK>): 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"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["forked: [T[], T[]]","R1","DefaultCloningStrategy: CloningStrategy","cloneDeep","strategy","value","match: RegExpExecArray | null","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/isAbortSignal.ts","../src/utils/typeof/isArray.ts","../src/utils/typeof/isBigInt.ts","../src/utils/typeof/isBlob.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isObject.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/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/isReadableStream.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/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","../src/utils/object/objectAssign.ts","../src/utils/object/objectCrush.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectSwitch.ts","../src/utils/string/stringInitialCase.ts","../src/utils/string/stringReplace.ts","../src/utils/string/stringTemplate.ts","../src/utils/string/stringToJson.ts","../src/utils/string/stringToPosix.ts","../src/utils/string/stringToValues.ts","../src/utils/string/stringTrim.ts","../src/utils/string/stringTruncate.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 PROTOTYPE_TAGS = {\n abortSignal: \"[object AbortSignal]\",\n array: \"[object Array]\",\n asyncFunction: \"[object AsyncFunction]\",\n asyncGeneratorFunction: \"[object AsyncGeneratorFunction]\",\n bigInt: \"[object BigInt]\",\n blob: \"[object Blob]\",\n boolean: \"[object Boolean]\",\n date: \"[object Date]\",\n error: \"[object Error]\",\n file: \"[object File]\",\n function: \"[object Function]\",\n generatorFunction: \"[object GeneratorFunction]\",\n map: \"[object Map]\",\n null: \"[object Null]\",\n number: \"[object Number]\",\n object: \"[object Object]\",\n promise: \"[object Promise]\",\n readableStream: \"[object ReadableStream]\",\n regExp: \"[object RegExp]\",\n set: \"[object Set]\",\n string: \"[object String]\",\n symbol: \"[object Symbol]\",\n undefined: \"[object Undefined]\",\n URLSearchParams: \"[object URLSearchParams]\",\n weakMap: \"[object WeakMap]\",\n weakSet: \"[object WeakSet]\",\n webSocket: \"[object WebSocket]\",\n window: \"[object Window]\",\n} as const;\n\nexport const TYPED_ARRAY_TAGS = new Set([\n \"[object Int8Array]\",\n \"[object Uint8Array]\",\n \"[object Uint8ClampedArray]\",\n \"[object Int16Array]\",\n \"[object Uint16Array]\",\n \"[object Int32Array]\",\n \"[object Uint32Array]\",\n \"[object Float32Array]\",\n \"[object Float64Array]\",\n \"[object BigInt64Array]\",\n \"[object BigUint64Array]\",\n]);\n\nexport function resolvePrototypeString(value: unknown) {\n return Object.prototype.toString.call(value);\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.abortSignal;\n}\n","import { TYPED_ARRAY_TAGS, resolvePrototypeString } from \"./types\";\n\ntype TypedArray = | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;\n\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isTypedArray(value: unknown): value is TypedArray {\n return typeof value === \"object\" && value !== null && TYPED_ARRAY_TAGS.has(resolvePrototypeString(value));\n}\n","export function isBigInt(value: unknown): value is bigint {\n return typeof value === \"bigint\";\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isBlob(value: unknown): value is Blob {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.blob;\n}\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","import type { Class } from \"type-fest\";\nimport { isAsyncFunction, isFunction } from \".\";\n\nfunction isConstructable(fn: unknown): boolean {\n try {\n // 尝试用 new 调用(但不执行 constructor)\n Reflect.construct(fn as AnyFunction, []);\n\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isClass(value: unknown): value is Class<AnyObject> {\n return (\n isFunction(value) &&\n !isAsyncFunction(value) &&\n Function.prototype.toString.call(value).startsWith(\"class \") &&\n isConstructable(value) &&\n value.prototype !== undefined\n );\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 判断是否为对象类型\n * - 可选是否检查原型为 `Object.prototype`,防止原型链污染\n *\n * @param value 待检查值\n * @param prototypeCheck 是否进行原型检查,默认 `true`\n */\nexport function isObject(value: unknown, prototypeCheck = true): value is Record<PropertyKey, unknown> {\n const check = resolvePrototypeString(value) === PROTOTYPE_TAGS.object;\n\n return prototypeCheck ? check && Object.getPrototypeOf(value) === Object.prototype : check;\n}\n","import { isObject } from \"./isObject\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isDate(value: unknown): value is Date {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.date && typeof (value)[\"getTime\"] === \"function\";\n } catch (error) {\n return false;\n }\n}\n","import { isDate, isRegExp } from \".\";\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 (isDate(x) && isDate(y)) {\n return x.getTime() === y.getTime();\n }\n if (isRegExp(x) && isRegExp(y)) {\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 { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isError(value: unknown): value is Error {\n return value instanceof Error || resolvePrototypeString(value) === PROTOTYPE_TAGS.error;\n}\n","import { isNaN, isNull, isUndefined } from \".\";\n\nexport function isFalsy(value: unknown): boolean {\n if (isNaN(value) || isNull(value) || isUndefined(value)) {\n return true;\n }\n\n return value === false || value === 0 || value === 0n || value === \"\";\n}\n\nexport function isFalsyLike(value: unknown): boolean {\n if (isFalsy(value)) {\n return true;\n }\n\n return typeof value === \"string\" && (value === \"null\" || value === \"undefined\" || value === \"NaN\" || value === \"false\" || value === \"0\" || value === \"0n\");\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isFile(value: unknown): value is File {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.file;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isFunction(value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\nexport function isAsyncFunction(value: unknown): value is AnyAsyncFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncFunction;\n}\n\nexport function isGeneratorFunction(value: unknown): value is AnyGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.generatorFunction;\n}\n\nexport function isAsyncGeneratorFunction(value: unknown): value is AnyAsyncGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncGeneratorFunction;\n}\n","import { isObject } from \"./isObject\";\n\nexport function isIterable(value: unknown): value is { [Symbol.iterator]: () => Iterator<unknown> } {\n return isObject(value) && Symbol.iterator in value;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isMap(value: unknown): value is Map<unknown, unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.map;\n}\n\nexport function isWeakMap(value: unknown): value is WeakMap<AnyObject, unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.weakMap;\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","/**\n * 检查 value 是否为 number 类型\n *\n * @param value 待检查值\n * @param checkNaN 是否排除 `NaN`,默认为 `true`\n */\nexport function isNumber(value: unknown, checkNaN = true): value is number {\n return typeof value === \"number\" && (!checkNaN || !isNaN(value));\n}\n\n/**\n * 检查 value 是否为 NaN\n *\n * @param value 待检查值\n */\nexport function isNaN(value: unknown): value is number {\n return Number.isNaN(value);\n}\n\n/**\n * 检查 value 是否为整数\n *\n * @param value 待检查值\n * @param safeCheck 是否附加安全数检查\n */\nexport function isInteger(value: unknown, safeCheck = true): value is number {\n const check = Number.isInteger(value);\n\n return safeCheck ? check && Number.isSafeInteger(value) : check;\n}\n\n/**\n * 检查 value 是否为正整数\n * - 此函数中 `0` 不被视为正整数\n *\n * @param value 待检查值\n * @param safeCheck 是否附加安全数检查\n */\nexport function isPositiveInteger(value: unknown, safeCheck = true): value is number {\n return isInteger(value, safeCheck) && value > 0;\n}\n\n/**\n * 检查 value 是否为负整数\n * - 此函数中 `0` 不被视为负整数\n *\n * @param value 待检查值\n * @param safeCheck 是否附加安全数检查\n */\nexport function isNegativeInteger(value: unknown, safeCheck = true): value is number {\n return isInteger(value, safeCheck) && value < 0;\n}\n\n/**\n * 检查 value 是否为 Infinity\n * - 排除 `NaN`\n *\n * @param value 待检查值\n */\nexport function isInfinity(value: unknown): value is number {\n return isNumber(value) && (Number.POSITIVE_INFINITY === value || Number.NEGATIVE_INFINITY === value);\n}\n\n/**\n * 检查 value 是否类似 Infinity\n * - 排除 `NaN`\n *\n * @param value 待检查值\n */\nexport function isInfinityLike(value: unknown): boolean {\n const check = isInfinity(value);\n\n if (check) {\n return check;\n }\n\n if (typeof value === \"string\") {\n const v = value.trim().toLowerCase();\n\n return v === \"infinity\" || v === \"-infinity\" || v === \"+infinity\";\n }\n\n return false;\n}\n","import { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isPromise(value: unknown): value is Promise<unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.promise;\n}\n\nexport function isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return isPromise(value) || (isObject(value) && isFunction(value[\"then\"]));\n}\n","import { isFunction, isObject } from \"../index\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * Checks if a value is a WHATWG ReadableStream instance.\n *\n * - Uses `Object.prototype.toString` where supported (modern browsers, Node.js ≥18).\n * - Falls back to duck-typing in older environments.\n * - Resistant to basic forgery, but not 100% secure in all polyfill scenarios.\n *\n * ⚠️ Note: In older Node.js (<18) or with non-compliant polyfills, this may return false positives or negatives.\n */\nexport function isReadableStream(value: unknown): value is ReadableStream {\n // Modern environments (Chrome 52+, Firefox 57+, Safari 10.1+, Node.js 18+)\n if (resolvePrototypeString(value) === PROTOTYPE_TAGS.readableStream) {\n return true;\n }\n\n // Fallback for older browsers / polyfills (e.g., web-streams-polyfill)\n return isObject(value) && isFunction(value[\"getReader\"]) && isFunction(value[\"pipeThrough\"]);\n}\n","import { isBoolean, isFunction, isObject, isString } from \".\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isRegExp(value: unknown): value is RegExp {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n const regex = value as unknown as RegExp;\n\n return (\n resolvePrototypeString(value) === PROTOTYPE_TAGS.regExp &&\n isString(regex.source) &&\n isString(regex.flags) &&\n isBoolean(regex.global) &&\n isFunction(regex.test)\n );\n } catch (error) {\n return false;\n }\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isSet(value: unknown): value is Set<unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.set;\n}\n\nexport function isWeakSet(value: unknown): value is WeakSet<AnyObject> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.weakSet;\n}\n","/**\n * 检查 value 是否为 string 类型\n *\n * @param value 待检查值\n * @param checkEmpty 是否排除空字符串\n */\nexport function isString(value: unknown, checkEmpty = false): value is string {\n return typeof value === \"string\" && (!checkEmpty || !!value.length);\n}\n","export function isSymbol(value: unknown): value is symbol {\n return typeof value === \"symbol\";\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === \"undefined\";\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isURLSearchParams(value: unknown): value is URLSearchParams {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.URLSearchParams;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isWebSocket(value: unknown): value is WebSocket {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.webSocket;\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\nexport function isWindow(value: unknown): value is Window {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.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[]): T | undefined;\nexport function arrayFirst<T>(initialList: readonly T[], saveValue: T): T;\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[]): T | undefined;\nexport function arrayLast<T>(initialList: readonly T[], saveValue: T): T;\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>(promise: Readonly<Promise<T>>, errorExt?: PlainObject): 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 { isString } from \"../typeof\";\n\nconst R1 = /[^0-9.-]/g;\n\n/**\n * 从字符串中提取数字字符串\n *\n * @param input 待处理字符串\n */\nexport function stringToNumber(input: string) {\n if (!isString(input, true)) {\n return \"\";\n }\n\n const cleaned = input.replace(R1, \"\");\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 { isFalsyLike, 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 (isFalsyLike(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 | undefined, isFormat?: true): string;\nexport function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: number | undefined, isFormat?: false): BigNumber;\nexport function toMathDecimal(mathJsInstance: MathJsInstance, value: unknown, precision?: number | undefined, isFormat = true): string | BigNumber {\n const bigNumber = toMathBignumber(mathJsInstance, value);\n\n return isFormat ? mathJsInstance.format(bigNumber, { notation: \"fixed\", precision: 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<K extends PropertyKey, V, NK extends PropertyKey, NV>(obj: PlainObject<K, V>, toEntry: (key: K, value: V) => [NK, NV]): PlainObject<NK, NV> {\n const defaultResult = {} as PlainObject<NK, NV>;\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","import type { Assign } from \"radashi\";\nimport { isObject } from \"../typeof\";\n\n/**\n * 递归地将第二个对象合并到第一个对象的副本中\n * - 只有普通对象才会递归合并\n *\n * @param initial 初始对象\n * @param override 待合并对象\n */\nexport function objectAssign<I extends PlainObject, O extends PlainObject>(initial: I, override: O): Assign<I, O> {\n if (!isObject(initial) || !isObject(override)) {\n return (initial ?? override ?? {}) as Assign<I, O>;\n }\n\n const proto = Object.getPrototypeOf(initial);\n const assigned = proto ? { ...initial } : Object.assign(Object.create(proto), initial);\n\n for (const key of Object.keys(override)) {\n assigned[key] = isObject(initial[key]) && isObject(override[key]) ? objectAssign(initial[key], override[key]) : override[key];\n }\n\n return assigned;\n}\n","import type { Simplify, UnionToIntersection } from \"type-fest\";\nimport { isArray, isObject } from \"../typeof\";\n\ntype Crush<T> = T extends readonly (infer U)[]\n ? Record<string, U extends object ? unknown : U>\n : Simplify<\n UnionToIntersection<\n keyof T extends infer Prop\n ? Prop extends keyof T\n ? T[Prop] extends infer Value\n ?\n | ([Extract<Value, object>] extends [never] ? never : Record<string, unknown>)\n | ([Exclude<Value, object>] extends [never]\n ? never\n : [Extract<Value, object>] extends [never]\n ? { [P in Prop]: Value }\n : Record<string, unknown>)\n : never\n : never\n : never\n >\n >;\n\nexport function objectCrush<T extends PlainObject>(value: T): Crush<T> {\n if (!value) {\n return {} as Crush<T>;\n }\n\n function crushReducer(crushed: Crush<T>, value: unknown, path: string) {\n if (isObject(value) || isArray(value)) {\n for (const [prop, propValue] of Object.entries(value)) {\n crushReducer(crushed, propValue, path ? `${path}.${prop}` : prop);\n }\n } else {\n crushed[path as keyof Crush<T>] = value as Crush<T>[keyof Crush<T>];\n }\n\n return crushed;\n }\n\n return crushReducer({} as Crush<T>, value, \"\");\n}\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 R1 = /\\S+/g;\nconst R2 = /[^a-zA-Z\\u00C0-\\u017F]/;\n\n/**\n * 字符串首字母大小写\n * - 包含非西欧字母字符时,不处理\n * - 纯字母且全大写时,不处理\n * - 纯字母且非全大写时,首字母小写,其余保留\n * - 纯字母且非全大写时,首字母大写,其余保留\n *\n * @param input 待处理字符串\n * @param caseType 大小写类型\n */\nexport function stringInitialCase(input: string, caseType?: \"lower\" | \"upper\" | undefined) {\n if (!isString(input, true)) {\n return \"\";\n }\n\n return input.replace(R1, (word) => {\n // 非西欧字母字符(如.,'-等)→ 保留\n if (R2.test(word)) {\n return word;\n }\n // 纯字母且全大写 → 保留\n if (word === word.toLocaleUpperCase()) {\n return word;\n }\n // 纯字母且非全大写 → 首字母小写,其余保留\n if (caseType === \"lower\" && word[0]) {\n return word[0].toLocaleLowerCase() + word.slice(1);\n }\n // 纯字母且非全大写 → 首字母大写,其余保留\n if (caseType === \"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\";\nimport { isString } from \"../typeof\";\n\n/**\n * 字符串替换\n * - 替换第一个匹配项\n *\n * @param input 待处理字符串\n * @param search 匹配项\n * @param replacement 替换项\n */\nexport function stringReplace<I extends string, S extends string, R extends string>(input: I, search: S, replacement: R) {\n if (!isString(input, true)) {\n return \"\" as Replace<I, S, R>;\n }\n\n\n return input.replace(search, replacement) as Replace<I, S, R>;\n}\n","import { isString } from \"../typeof\";\n\n/**\n * 字符串模板替换\n *\n * @param input 待处理字符串\n * @param template 模板对象\n * @param regex 模板匹配正则\n */\nexport function stringTemplate(input: string, template: PlainObject, regex = /\\{\\{(.+?)\\}\\}/g) {\n if (!isString(input, true)) {\n return \"\";\n }\n\n let result = \"\";\n let from = 0;\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(input))) {\n result += input.slice(from, match.index) + template[match[1]!];\n from = regex.lastIndex;\n }\n\n return result + input.slice(from);\n}\n","import { isString } from \"../typeof\";\n\n/**\n * 处理 JSON 字符串\n *\n * @param input 待处理字符串\n * @param safeValue 安全值\n */\nexport function stringToJson<R extends AnyObject = AnyObject, D extends R = R>(input: string | null | undefined, safeValue: D): R {\n if (!isString(input, true)) {\n return safeValue;\n }\n\n try {\n const value = JSON.parse(input);\n\n return value;\n } catch (error) {\n return safeValue;\n }\n}\n","import { isString } from \"../typeof\";\n\n/**\n * 将路径转换为 POSIX 风格\n *\n * @param input 待处理字符串\n * @param removeLeadingSlash 是否移除开头斜杠,默认为 `false`\n */\nexport function stringToPosix(input: string | null | undefined, removeLeadingSlash = false) {\n if (!isString(input, true)) {\n return \"\";\n }\n\n // 1. 移除盘符(Windows)和开头的根路径(/ 或 \\)\n let normalized = input.replace(/^[A-Za-z]:[\\\\/]?/, \"\").replace(/^[\\\\/]+/, \"\");\n // 2. 替换所有反斜杠为正斜杠\n normalized = normalized.replace(/\\\\/g, \"/\");\n // 3. 合并连续斜杠\n normalized = normalized.replace(/\\/+/g, \"/\");\n // 4. 移除开头的斜杠\n if (removeLeadingSlash && normalized.startsWith(\"/\")) {\n normalized = normalized.substring(1);\n }\n\n return normalized;\n}\n","import { isString } from \"../typeof\";\n\n\n/**\n * 字符串分割为数组\n *\n * @param input 待处理字符串\n * @param valueType 数组中每一项的类型\n * @param splitSymbol 分隔符,默认为 `,`\n */\nexport function stringToValues(input: string | null | undefined, valueType?: \"number\" | undefined, splitSymbol?: string | undefined): number[];\nexport function stringToValues(input: string | null | undefined, valueType: \"string\", splitSymbol?: string | undefined): string[];\nexport function stringToValues(input: string | null | undefined, valueType: \"number\" | \"string\" = \"number\", splitSymbol = \",\"): (number | string)[] {\n if (!isString(input, true)) {\n return [];\n }\n\n try {\n const values = input.split(splitSymbol);\n\n if (valueType === \"number\") {\n return values.map((d) => Number(d));\n }\n\n return values;\n } catch (error) {\n return [];\n }\n}\n","import { isString } from \"../typeof\";\n\n/**\n * 从字符串中裁切掉所有的前缀和后缀字符\n *\n * @param input 待处理字符串\n * @param charsToTrim 裁切字符,默认为 `\" \"`\n */\nexport function stringTrim(input: string | null | undefined, charsToTrim = \" \"): string {\n if (!isString(input, true)) {\n return \"\";\n }\n const toTrim = charsToTrim.replace(/[\\W]{1}/g, \"\\\\$&\");\n const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, \"g\");\n\n return input.replace(regex, \"\");\n}\n","import { isPositiveInteger, isString } from \"../typeof\";\n\n/**\n * 截取字符串\n * - 支持中英文混排,不会在汉字中间截断\n *\n * @param input 待处理字符串\n * @param maxLength 最大长度\n * @param ellipsis 省略符,默认为 `...`\n */\nexport function stringTruncate(input: string, maxLength: number, ellipsis = \"...\") {\n if (!isString(input, true)) {\n return \"\";\n }\n\n if (!isPositiveInteger(maxLength)) {\n return input;\n }\n\n if (input.length <= maxLength) {\n return input;\n }\n\n const truncated = input.slice(0, maxLength - ellipsis.length);\n\n return truncated.length > 0 ? truncated + ellipsis : \"\";\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>(tree: T, meta: BaseCallbackMeta<T>, options: BaseInnerOptions<T, CK>): 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"],"mappings":"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"}