@pawover/kit 0.0.0-beta.2 → 0.0.0-beta.20

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-khUJYSj2.js","names":["forked: [T[], T[]]","R1","cloneDeep","strategy","R1","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/isFunction.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isDate.ts","../src/utils/typeof/isEnumeration.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isError.ts","../src/utils/typeof/isFalsy.ts","../src/utils/typeof/isIterable.ts","../src/utils/typeof/isMap.ts","../src/utils/typeof/isNull.ts","../src/utils/typeof/isNumber.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isReadableStream.ts","../src/utils/typeof/isString.ts","../src/utils/typeof/isRegExp.ts","../src/utils/typeof/isSet.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/array/arrayZip.ts","../src/utils/array/arrayZipToObject.ts","../src/utils/device/isMobile.ts","../src/utils/device/isTablet.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/number/isWithinInterval.ts","../src/utils/object/cloneDeep.ts","../src/utils/object/enumEntries.ts","../src/utils/object/enumKeys.ts","../src/utils/object/enumValues.ts","../src/utils/object/objectEntries.ts","../src/utils/object/mapEntries.ts","../src/utils/object/objectAssign.ts","../src/utils/object/objectCrush.ts","../src/utils/object/objectInvert.ts","../src/utils/object/objectKeys.ts","../src/utils/object/objectOmit.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectValues.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/time/timeZone.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 iframe: \"[object HTMLIFrameElement]\",\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\n/**\n * 检查 value 是否为 AbortSignal\n * @param value 待检查值\n * @returns 是否为 AbortSignal\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\n/**\n * 检查 value 是否为数组\n *\n * @param value 待检查值\n * @returns 是否为数组\n * @example\n * ```ts\n * isArray([]); // true\n * ```\n */\nexport function isArray (value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\n/**\n * 检查 value 是否为 TypedArray\n *\n * @param value 待检查值\n * @returns 是否为 TypedArray\n * @example\n * ```ts\n * isTypedArray(new Int8Array()); // true\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","/**\n * 检查 value 是否为 BigInt\n * @param value 待检查值\n * @returns 是否为 BigInt\n */\nexport function isBigInt (value: unknown): value is bigint {\n return typeof value === \"bigint\";\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 检查 value 是否为 Blob\n * @param value 待检查值\n * @returns 是否为 Blob\n */\nexport function isBlob (value: unknown): value is Blob {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.blob;\n}\n\nexport function isFile (value: unknown): value is File {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.file;\n}\n","/**\n * 检查 value 是否为 Boolean\n * @param value 待检查值\n * @returns 是否为 Boolean\n */\nexport function isBoolean (value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","import type { AnyAsyncFunction, AnyAsyncGeneratorFunction, AnyFunction, AnyGeneratorFunction } from \"@pawover/types\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 检查 value 是否为 Function\n * @param value 待检查值\n * @returns 是否为 Function\n */\nexport function isFunction (value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\n/**\n * 检查 value 是否为 AsyncFunction\n * @param value 待检查值\n * @returns 是否为 AsyncFunction\n */\nexport function isAsyncFunction (value: unknown): value is AnyAsyncFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncFunction;\n}\n\n/**\n * 检查 value 是否为 GeneratorFunction\n * @param value 待检查值\n * @returns 是否为 GeneratorFunction\n */\nexport function isGeneratorFunction (value: unknown): value is AnyGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.generatorFunction;\n}\n\n/**\n * 检查 value 是否为 AsyncGeneratorFunction\n * @param value 待检查值\n * @returns 是否为 AsyncGeneratorFunction\n */\nexport function isAsyncGeneratorFunction (value: unknown): value is AnyAsyncGeneratorFunction {\n return isFunction(value) && resolvePrototypeString(value) === PROTOTYPE_TAGS.asyncGeneratorFunction;\n}\n","import type { AnyFunction, AnyObject } from \"@pawover/types\";\nimport type { Class } from \"type-fest\";\nimport { isAsyncFunction, isFunction } from \"./isFunction\";\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\n/**\n * 检查 value 是否为 Class\n *\n * @param value 待检查值\n * @returns 是否为 Class\n * @example\n * ```ts\n * class A {}\n * isClass(A); // true\n * isClass(() => {}); // false\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 * 检查 value 是否为 Date 对象\n *\n * @param value 待检查值\n * @param invalidCheck 是否要求日期有效(非 Invalid Date)。默认 true\n * - true: 仅当是有效 Date 对象时返回 true(排除 new Date('invalid'))\n * - false: 只要 [[Prototype]] 是 Date 即返回 true(包含 Invalid Date)\n * @returns 是否为 Date 对象,根据 invalidCheck 返回不同语义的 Date 判定\n *\n * @example\n * ```ts\n * isDate(new Date()); // true\n * isDate(new Date('invalid')); // false\n * isDate(new Date('invalid'), false); // true\n * isDate(null); // false\n * isDate({}); // false\n * ```\n */\nexport function isDate (value: unknown, invalidCheck = true): value is Date {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n if (resolvePrototypeString(value) !== PROTOTYPE_TAGS.date) {\n return false;\n }\n\n if (!invalidCheck) {\n return true;\n }\n\n // 验证是否为有效日期(排除 Invalid Date)\n try {\n const time = (value as Date).getTime();\n\n return typeof time === \"number\" && !Number.isNaN(time);\n } catch {\n return false;\n }\n}\n","import { isObject } from \".\";\n\n/**\n * 判断一个值是否为有效的枚举\n * - 枚举不能为空\n * - 枚举所有的值必须是 string 或 number\n *\n * @param enumeration 待检查值\n * @returns 是否为有效的枚举\n */\nexport function isEnumeration (enumeration: unknown): [boolean, boolean] {\n if (!isObject(enumeration)) {\n return [false, false];\n }\n\n const keys = Object.keys(enumeration);\n if (!keys.length) {\n return [false, false];\n }\n\n const values = Object.values(enumeration);\n if (!values.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n return [false, false];\n }\n\n const isTwoWayEnum = keys.every((k) => values.some((v) => v.toString() === k));\n\n return [true, isTwoWayEnum];\n}\n","import { isDate, isRegExp } from \".\";\n\n/**\n * 深度比较两个值是否相等\n *\n * @param value 待比较值 A\n * @param other 待比较值 B\n * @returns 是否相等\n * @example\n * ```ts\n * isEqual({ a: 1 }, { a: 1 }); // true\n * ```\n */\nexport function isEqual (x: unknown, y: unknown): 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\n/**\n * 检查 value 是否为 Error 对象\n * @param value 待检查值\n * @returns 是否为 Error\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\n/**\n * 检查 value 是否为 Falsy 值 (false, 0, \"\", null, undefined, NaN)\n * @param value 待检查值\n * @returns 是否为 Falsy\n */\nexport function isFalsy (value: unknown): value is false | 0 | \"\" | null | undefined {\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 type { AnyObject } from \"@pawover/types\";\n\n/**\n * 检查 value 是否为可迭代对象 (Iterable)\n * @param value 待检查值\n * @returns 是否为 Iterable\n */\nexport function isIterable (value: unknown): value is { [Symbol.iterator]: () => Iterator<unknown> } {\n return !!value && typeof (value as AnyObject)[Symbol.iterator] === \"function\";\n}\n","import type { AnyObject } from \"@pawover/types\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 检查 value 是否为 Map\n * @param value 待检查值\n * @returns 是否为 Map\n */\nexport function isMap (value: unknown): value is Map<unknown, unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.map;\n}\n\n/**\n * 检查 value 是否为 WeakMap\n * @param value 待检查值\n * @returns 是否为 WeakMap\n */\nexport function isWeakMap (value: unknown): value is WeakMap<AnyObject, unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.weakMap;\n}\n","/**\n * 检查 value 是否为 null\n * @param value 待检查值\n * @returns 是否为 null\n */\nexport function isNull (value: unknown): value is null {\n return value === null;\n}\n","/**\n * 检查 value 是否为 number 类型\n *\n * @param value 待检查值\n * @param NaNCheck 是否排除 `NaN`,默认为 `true`\n * @returns 是否为 number\n * @example\n * ```ts\n * isNumber(1); // true\n * isNumber(NaN); // false (default)\n * isNumber(NaN, false); // true\n * ```\n */\nexport function isNumber (value: unknown, NaNCheck = true): value is number {\n return typeof value === \"number\" && (!NaNCheck || !isNaN(value));\n}\n\n/**\n * 检查 value 是否为 NaN\n *\n * @param value 待检查值\n * @returns 是否为 NaN\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 * @returns 是否为整数\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 { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 判断是否为对象类型\n * - 可选是否检查原型为 `Object.prototype`,防止原型链污染\n *\n * @param value 待检查值\n * @param prototypeCheck 是否进行原型检查,默认 `true`\n * @returns 是否为 Plain Object (当 checkPrototype=true) 或 object\n * @example\n * ```ts\n * isObject({}); // true\n * isObject(new Date()); // false (because prototype is not Object.prototype)\n * isObject(new Date(), false); // true (is object type)\n * ```\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 { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 检查 value 是否为 Promise\n * @param value 待检查值\n * @returns 是否为 Promise\n */\nexport function isPromise (value: unknown): value is Promise<unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.promise;\n}\n\n/**\n * 检查 value 是否为 PromiseLike (thenable)\n * @param value 待检查值\n * @returns 是否为 PromiseLike\n */\nexport function isPromiseLike (value: unknown): value is PromiseLike<unknown> {\n return isPromise(value) || (isObject(value) && isFunction(value[\"then\"]));\n}\n","import { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\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 */\n/**\n * 检查 value 是否为 ReadableStream\n * @param value 待检查值\n * @returns 是否为 ReadableStream\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","/**\n * 检查 value 是否为 string 类型\n *\n * @param value 待检查值\n * @param checkEmpty 是否排除空字符串\n * @returns 是否为字符串\n * @example\n * ```ts\n * isString(\"abc\"); // true\n * isString(\"\"); // true\n * isString(\"\", true); // false\n * ```\n */\nexport function isString (value: unknown, checkEmpty = false): value is string {\n return typeof value === \"string\" && (!checkEmpty || !!value.length);\n}\n","import { isBoolean } from \"./isBoolean\";\nimport { isFunction } from \"./isFunction\";\nimport { isString } from \"./isString\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 检查 value 是否为 RegExp\n * @param value 待检查值\n * @returns 是否为 RegExp\n */\nexport function isRegExp (value: unknown): value is RegExp {\n if (typeof value !== \"object\" || value === null) {\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 type { AnyObject } from \"@pawover/types\";\nimport { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 检查 value 是否为 Set\n * @param value 待检查值\n * @returns 是否为 Set\n */\nexport function isSet (value: unknown): value is Set<unknown> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.set;\n}\n\n/**\n * 检查 value 是否为 WeakSet\n * @param value 待检查值\n * @returns 是否为 WeakSet\n */\nexport function isWeakSet (value: unknown): value is WeakSet<AnyObject> {\n return resolvePrototypeString(value) === PROTOTYPE_TAGS.weakSet;\n}\n","/**\n * 检查 value 是否为 Symbol\n * @param value 待检查值\n * @returns 是否为 Symbol\n */\nexport function isSymbol (value: unknown): value is symbol {\n return typeof value === \"symbol\";\n}\n","/**\n * 检查 value 是否为 undefined\n * @param value 待检查值\n * @returns 是否为 undefined\n */\nexport function isUndefined (value: unknown): value is undefined {\n return typeof value === \"undefined\";\n}\n","import { PROTOTYPE_TAGS, resolvePrototypeString } from \"./types\";\n\n/**\n * 检查 value 是否为 URLSearchParams\n * @param value 待检查值\n * @returns 是否为 URLSearchParams\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\n/**\n * 检查 value 是否为 WebSocket\n * @param value 待检查值\n * @returns 是否为 WebSocket\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\n/**\n * 检查 value 是否为 Window\n * @param value 待检查值\n * @returns 是否为 Window\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`,默认为 `true`\n * @returns 构造后的数组\n * @example\n * ```ts\n * arrayCast(1); // [1]\n * arrayCast([1, 2]); // [1, 2]\n * arrayCast(null); // []\n * arrayCast(undefined); // []\n * arrayCast(null, false); // [null]\n * ```\n */\nexport function arrayCast<T> (candidate: T | T[] | null | undefined, checkEmpty?: true): NonNullable<T>[];\nexport function arrayCast<T> (candidate: T | T[] | null | undefined, checkEmpty?: false): T[];\nexport function arrayCast<T> (candidate: T | T[] | null | undefined, checkEmpty = true): T[] {\n if (checkEmpty && (isUndefined(candidate) || isNull(candidate))) {\n return [];\n }\n\n return isArray(candidate) ? [...candidate] : [candidate as T];\n}\n","import { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组竞争\n * - 返回在匹配函数的比较条件中获胜的最终项目,适用于更复杂的最小值/最大值计算\n *\n * @param initialList 数组\n * @param match 匹配函数\n * @returns 获胜的元素,如果数组为空或参数无效则返回 `null`\n * @example\n * ```ts\n * const list = [1, 10, 5];\n * arrayCompete(list, (a, b) => (a > b ? a : b)); // 10\n * arrayCompete(list, (a, b) => (a < b ? a : b)); // 1\n * ```\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 * @returns 统计对象\n * @example\n * ```ts\n * const list = [\"a\", \"b\", \"a\", \"c\"];\n * arrayCounting(list, (x) => x); // { a: 2, b: 1, c: 1 }\n *\n * const users = [{ id: 1, group: \"A\" }, { id: 2, group: \"B\" }, { id: 3, group: \"A\" }];\n * arrayCounting(users, (u) => u.group); // { A: 2, B: 1 }\n * ```\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 * - 返回在 `initialList` 中存在,但在 `diffList` 中不存在的元素\n *\n * @param initialList 初始数组\n * @param diffList 对比数组\n * @param match 匹配函数\n * @returns 差集数组\n * @example\n * ```ts\n * arrayDifference([1, 2, 3], [2, 3, 4]); // [1]\n * arrayDifference([{ id: 1 }, { id: 2 }], [{ id: 2 }], (x) => x.id); // [{ id: 1 }]\n * ```\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 [];\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 * @returns 数组第一项,如果为空则返回安全值\n * @example\n * ```ts\n * arrayFirst([1, 2]); // 1\n * arrayFirst([], 0); // 0\n * ```\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 * @returns [满足条件的项[], 不满足条件的项[]]\n * @example\n * ```ts\n * arrayFork([1, 2, 3, 4], (n) => n % 2 === 0); // [[2, 4], [1, 3]]\n * ```\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 * - 返回在 `initialList` 和 `diffList` 中都存在的元素\n *\n * @param initialList 初始数组\n * @param diffList 对比数组\n * @param match 匹配函数\n * @returns 交集数组\n * @example\n * ```ts\n * arrayIntersection([1, 2], [2, 3]); // [2]\n * arrayIntersection([{ id: 1 }, { id: 2 }], [{ id: 2 }], (x) => x.id); // [{ id: 2 }]\n * ```\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 (!initialList.length || !diffList.length) {\n return [];\n }\n\n if (!isFunction(match)) {\n const diffSet = new Set(diffList);\n\n return initialList.filter((item) => diffSet.has(item));\n }\n\n const diffKeys = new Set(diffList.map((item) => match(item)));\n\n return initialList.filter((item) => diffKeys.has(match(item)));\n}\n","import { isArray } from \"../typeof\";\n\n/**\n * 获取数组最后一项\n *\n * @param initialList 初始数组\n * @param saveValue 安全值\n * @returns 数组最后一项,如果为空则返回安全值\n * @example\n * ```ts\n * arrayLast([1, 2, 3]); // 3\n * arrayLast([], 0); // 0\n * ```\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 * - 如果未提供 `match` 函数,则合并两个数组并去重(Union)\n * - 如果提供了 `match` 函数,则仅更新 `initialList` 中匹配到的项(Left Join Update),不会追加 `mergeList` 中新增的项\n *\n * @param initialList 初始数组\n * @param mergeList 待合并数组\n * @param match 匹配函数\n * @returns 合并后的数组\n * @example\n * ```ts\n * // 基础合并去重\n * arrayMerge([1, 2], [2, 3]); // [1, 2, 3]\n *\n * // 按条件更新\n * const source = [{ id: 1, val: \"a\" }, { id: 2, val: \"b\" }];\n * const update = [{ id: 2, val: \"new\" }, { id: 3, val: \"c\" }];\n * arrayMerge(source, update, (x) => x.id);\n * // [{ id: 1, val: \"a\" }, { id: 2, val: \"new\" }] -> id:3 被忽略\n * ```\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 * @returns 处理后的新数组\n * @example\n * ```ts\n * const list = [1, 2, 3, 4];\n * arrayPick(list, (n) => n % 2 === 0); // [2, 4]\n * arrayPick(list, (n) => n % 2 === 0, (n) => n * 2); // [4, 8]\n * ```\n */\nexport function arrayPick<const T> (initialList: readonly T[], filter: (row: T, index: number) => boolean): T[];\nexport function arrayPick<const T, K = T> (initialList: readonly T[], filter: (row: T, index: number) => boolean, mapper: ((row: T, index: number) => K)): K[];\nexport function arrayPick<const 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 * @returns 替换后的新数组\n * @example\n * ```ts\n * arrayReplace([1, 2, 3], 4, (n) => n === 2); // [1, 4, 3]\n * ```\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 * @returns 切分后的二维数组\n * @example\n * ```ts\n * arraySplit([1, 2, 3, 4, 5], 2); // [[1, 2], [3, 4], [5]]\n * ```\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","import { isArray } from \"../typeof\";\n\n/**\n * 数组解压\n * - `arrayZip` 的反向操作\n *\n * @param arrays 压缩后的数组\n * @returns 解压后的二维数组\n * @example\n * ```ts\n * arrayUnzip([[1, \"a\"], [2, \"b\"]]); // [[1, 2], [\"a\", \"b\"]]\n * ```\n */\nexport function arrayUnzip<T> (arrays: readonly (readonly T[])[]): T[][] {\n if (!isArray(arrays) || !arrays.length) {\n return [];\n }\n const out = new Array(arrays.reduce((max, arr) => Math.max(max, arr.length), 0));\n let index = 0;\n const get = (array: T[]) => array[index];\n\n for (; index < out.length; index++) {\n out[index] = Array.from(arrays as { length: number }, get);\n }\n\n return out;\n}\n\n/**\n * 数组压缩\n * - 将多个数组的元素按索引组合成元组\n *\n * @param arrays 多个数组\n * @returns 压缩后的元组数组\n * @example\n * ```ts\n * arrayZip([1, 2], [\"a\", \"b\"]); // [[1, \"a\"], [2, \"b\"]]\n * ```\n */\nexport function arrayZip<T1, T2, T3, T4, T5> (array1: readonly T1[], array2: readonly T2[], array3: readonly T3[], array4: readonly T4[], array5: readonly T5[]): [T1, T2, T3, T4, T5][];\nexport function arrayZip<T1, T2, T3, T4> (array1: readonly T1[], array2: readonly T2[], array3: readonly T3[], array4: readonly T4[]): [T1, T2, T3, T4][];\nexport function arrayZip<T1, T2, T3> (array1: readonly T1[], array2: readonly T2[], array3: readonly T3[]): [T1, T2, T3][];\nexport function arrayZip<T1, T2> (array1: readonly T1[], array2: readonly T2[]): [T1, T2][];\nexport function arrayZip (): [];\nexport function arrayZip<T> (...arrays: (readonly T[])[]): T[][] {\n return arrayUnzip(arrays);\n}\n","import type { PlainObject } from \"@pawover/types\";\nimport { isArray, isFunction } from \"../typeof\";\n\n/**\n * 数组压缩为对象\n * - 将键数组和值(数组、函数或静态值)组合成对象\n *\n * @param keys 键数组\n * @param values 值数组、生成值的函数或静态值\n * @returns 生成的对象\n * @example\n * ```ts\n * arrayZipToObject([\"a\", \"b\"], [1, 2]); // { a: 1, b: 2 }\n * arrayZipToObject([\"a\", \"b\"], (k, i) => k + i); // { a: \"a0\", b: \"b1\" }\n * arrayZipToObject([\"a\", \"b\"], 1); // { a: 1, b: 1 }\n * ```\n */\nexport function arrayZipToObject<const K extends PropertyKey, const V> (keys: readonly K[], array: readonly V[]): Record<K, V>;\nexport function arrayZipToObject<const K extends PropertyKey, const V> (keys: readonly K[], match: ((key: K, index: number) => V)): Record<K, V>;\nexport function arrayZipToObject<const K extends PropertyKey, const V> (keys: readonly K[], value: V): Record<K, V>;\nexport function arrayZipToObject<const K extends PropertyKey, const V> (keys: readonly K[], values: V | ((key: K, index: number) => V) | readonly V[]): Record<K, V> {\n const result = {} as PlainObject<K, V>;\n\n if (!isArray(keys) || !keys.length) {\n return result;\n }\n\n const getValue = isFunction(values)\n ? values\n : isArray(values)\n ? (_k: K, i: number) => values[i]\n : (_k: K, _i: number) => values;\n\n return keys.reduce(\n (acc, key, idx) => {\n acc[key] = getValue(key, idx) as V;\n\n return acc;\n },\n result,\n );\n}\n","import { isTablet } from \".\";\nimport { isPositiveInteger } from \"../typeof\";\n\n/**\n * 检测当前设备是否为移动设备\n *\n * @param maxWidth - 移动设备最大宽度(默认 768px)\n * @param dpi - 标准 DPI 基准(默认 160)\n * @returns 是否为移动设备\n * @example\n * ```ts\n * // 假设 window.innerWidth = 500\n * isMobile(); // true\n * ```\n */\nexport function isMobile (maxWidth = 768, dpi = 160) {\n if (typeof window === \"undefined\" || !isPositiveInteger(maxWidth)) {\n return false;\n }\n\n return !isTablet(maxWidth, 1200, dpi);\n}\n\n/**\n * 检测当前设备是否为IOS移动设备\n *\n * @param maxWidth - 移动设备最大宽度(默认 768px)\n * @param dpi - 标准 DPI 基准(默认 160)\n * @returns 是否为 iOS 移动设备 (iPhone/iPad/iPod 且非平板)\n * @example\n * ```ts\n * // UA contains iPhone\n * isIOSMobile(); // true\n * ```\n */\nexport function isIOSMobile (maxWidth = 768, dpi = 160) {\n if (typeof navigator === \"undefined\" || !navigator.userAgent || !isPositiveInteger(maxWidth)) {\n return false;\n }\n\n const isIOS = (/iPhone|iPad|iPod/i).test(navigator.userAgent);\n\n return isIOS && !isTablet(maxWidth, 1200, dpi);\n}\n","import { isPositiveInteger } from \"../typeof\";\n\n/**\n * 检测当前设备是否为平板\n *\n * @param minWidth - 平板最小宽度(默认 768px)\n * @param maxWidth - 平板最大宽度(默认 1200px)\n * @param dpi - 标准 DPI 基准(默认 160)\n * @returns 是否为平板设备\n * @example\n * ```ts\n * // 假设 window.innerWidth = 1000\n * isTablet(); // true\n * ```\n */\nexport function isTablet (minWidth = 768, maxWidth = 1200, dpi = 160) {\n if (typeof window === \"undefined\" || !isPositiveInteger(minWidth) || !isPositiveInteger(maxWidth)) {\n return false;\n }\n\n // 逻辑 1: 检查屏幕宽度\n const width = window.innerWidth;\n const isWithinWidthRange = width >= minWidth && width <= maxWidth;\n\n try {\n // 逻辑 2: 计算屏幕尺寸(英寸)\n const widthPx = window.screen.width;\n const heightPx = window.screen.height;\n const DPR = window.devicePixelRatio || 1;\n const DPI = dpi * DPR;\n\n const widthInch = widthPx / DPI;\n const heightInch = heightPx / DPI;\n const screenInches = Math.sqrt(widthInch ** 2 + heightInch ** 2);\n\n return isWithinWidthRange || screenInches >= 7.0;\n } catch {\n // 备用方案:如果计算失败(如无 screen API),仅用宽度判断\n return isWithinWidthRange;\n }\n}\n","import type { PlainObject } from \"@pawover/types\";\n\n/**\n *将 Promise 转换为 `[err, result]` 格式,方便 async/await 错误处理\n *\n * @param promise 待处理的 Promise\n * @param errorExt 附加到 error 对象的扩展信息(注意:如果原 error 是 Error 实例,扩展属性可能会覆盖或无法正确合并非枚举属性)\n * @returns `[err, null]` 或 `[null, data]`\n * @example\n * ```ts\n * const [err, data] = await to(someAsyncFunc());\n * if (err) return;\n * console.log(data);\n * ```\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 if (err instanceof Error) {\n (parsedError as Record<string, unknown>)[\"message\"] = err.message;\n (parsedError as Record<string, unknown>)[\"stack\"] = err.stack;\n }\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/**\n * 从字符串中提取数字字符串\n * - 移除非数字字符,保留符号和小数点\n *\n * @param input 待处理字符串\n * @returns 提取出的数字字符串\n * @example\n * ```ts\n * stringToNumber(\"$1,234.56\"); // \"1234.56\"\n * stringToNumber(\"abc-123\"); // \"-123\"\n * ```\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 * @returns 转换后的 BigNumber\n * @example\n * ```ts\n * import { create, all } from \"mathjs\";\n * const math = create(all);\n * toMathBignumber(math, \"0.1\");\n * ```\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 * @returns 格式化后的字符串或 BigNumber\n * @example\n * ```ts\n * toMathDecimal(math, 0.12345, 2); // \"0.12\"\n * ```\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 * @returns 计算结果的字符串表示\n * @example\n * ```ts\n * toMathEvaluate(math, \"a + b\", { a: 1, b: 2 }); // \"3\"\n * ```\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 { isInfinity, isNumber } from \"../typeof\";\n\n/**\n * 数字区间检查函数\n *\n * @param input 待检查数字\n * @param interval 由两个数字组成的元组 [left, right]\n * @param includeLeft 是否包含左边界(默认 true)\n * @param includeRight 是否包含右边界(默认 false)\n * @returns 是否在区间内\n * @example\n * ```ts\n * isWithinInterval(5, [1, 10]); // true\n * isWithinInterval(1, [1, 10], false); // false\n * ```\n */\nexport function isWithinInterval (input: number, interval: [number, number], includeLeft = true, includeRight = false) {\n if (!isNumber(input)) {\n throw new Error(\"params [input] mast be a number.\");\n }\n\n if (isInfinity(input)) {\n throw new Error(\"params [input] mast be a finite number.\");\n }\n\n const [left, right] = interval;\n\n if (left > right) {\n throw new Error(`Invalid interval: left (${left}) must be <= right (${right}).`);\n }\n\n if (includeLeft && includeRight) {\n return input >= left && input <= right;\n } else if (includeLeft) {\n return input >= left && input < right;\n } else if (includeRight) {\n return input > left && input <= right;\n } else {\n return input > left && input < right;\n }\n}\n","import type { AnyObject } from \"@pawover/types\";\nimport { isArray, isDate, isMap, isObject, isSet } from \"../typeof\";\n\ninterface CloningStrategy {\n cloneMap: typeof cloneMap;\n cloneSet: typeof cloneSet;\n cloneDate: typeof cloneDate;\n cloneArray: typeof cloneArray;\n cloneObject: typeof cloneObject;\n cloneOther: typeof cloneOther;\n}\n\nconst defaultCloneStrategy = {\n cloneMap,\n cloneSet,\n cloneDate,\n cloneArray,\n cloneObject,\n cloneOther,\n};\n\nfunction 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\nfunction 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\nfunction cloneDate (input: Date, track: (newParent: Date) => Date): Date {\n return track(new Date(input));\n}\n\nfunction 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\nfunction 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\nfunction cloneOther<T> (input: T, track: (newParent: T) => T): T {\n return track(input);\n}\n\n/**\n * 深度拷贝对象\n * - 支持 Array, Object, Map, Set\n * - 自动处理循环引用\n *\n * @param root 需要拷贝的对象\n * @param customStrategy 自定义拷贝策略\n * @returns 拷贝后的对象\n * @example\n * ```ts\n * const original = { a: 1, b: { c: 2 } };\n * const copy = cloneDeep(original);\n * copy.b.c = 3;\n * // original.b.c === 2\n * ```\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 = { ...defaultCloneStrategy, ...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 : isDate(parent, false)\n ? strategy.cloneDate\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, defaultCloneStrategy);\n }\n\n tracked.set(parent, newParent);\n\n return newParent;\n };\n\n return cloneDeep(root, strategy) as T;\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport { objectEntries } from \"..\";\nimport { isEnumeration } from \"../typeof\";\n\n/**\n * 返回枚举的属性的键/值数组\n *\n * @param enumeration 枚举对象\n * @returns 键值对数组\n * @example\n * ```ts\n * enum A { k = \"v\" }\n * enumEntries(A); // [[\"k\", \"v\"]]\n * ```\n */\nexport function enumEntries<E extends PlainObject> (enumeration: E): [keyof E, E[keyof E]][];\nexport function enumEntries<E extends AnyObject> (enumeration: E): [keyof E, E[keyof E]][];\nexport function enumEntries (enumeration: AnyObject) {\n const [isEnum, isTwoWayEnum] = isEnumeration(enumeration);\n\n if (!isEnum) {\n throw Error(\"function enumEntries expected parameter is a enum, and requires at least one member\");\n }\n\n const entries = objectEntries(enumeration);\n\n if (isTwoWayEnum) {\n return entries.splice(entries.length / 2, entries.length / 2);\n }\n\n return entries;\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport { objectKeys } from \"..\";\nimport { isEnumeration } from \"../typeof\";\n\n/**\n * 获取枚举所有属性的键\n *\n * @param enumeration 枚举对象\n * @returns 键数组\n * @example\n * ```ts\n * enum A { k = \"v\" }\n * enumKeys(A); // [\"k\"]\n * ```\n */\nexport function enumKeys<E extends PlainObject> (enumeration: E): (keyof E)[];\nexport function enumKeys<E extends AnyObject> (enumeration: E): (keyof E)[];\nexport function enumKeys (enumeration: AnyObject) {\n const [isEnum, isTwoWayEnum] = isEnumeration(enumeration);\n\n if (!isEnum) {\n throw Error(\"function enumKeys expected parameter is a enum, and requires at least one member\");\n }\n\n const keys = objectKeys(enumeration);\n\n if (isTwoWayEnum) {\n return keys.splice(keys.length / 2, keys.length / 2);\n }\n\n return keys;\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport type { UnionToTuple, ValueOf } from \"type-fest\";\nimport { objectValues } from \"..\";\nimport { isEnumeration } from \"../typeof\";\n\n/**\n * 获取枚举所有属性的值\n *\n * @param enumeration 枚举对象\n * @returns 值数组\n * @example\n * ```ts\n * enum A { k = \"v\" }\n * enumValues(A); // [\"v\"]\n * ```\n */\nexport function enumValues<E extends PlainObject> (enumeration: E): UnionToTuple<ValueOf<E>>;\nexport function enumValues<E extends AnyObject> (enumeration: E): UnionToTuple<ValueOf<E>>;\nexport function enumValues (enumeration: AnyObject) {\n const [isEnum, isTwoWayEnum] = isEnumeration(enumeration);\n\n if (!isEnum) {\n throw Error(\"function enumValues expected parameter is a enum, and requires at least one member\");\n }\n\n const values = objectValues(enumeration);\n\n if (isTwoWayEnum) {\n return values.splice(values.length / 2, values.length / 2);\n }\n\n return values;\n}\n\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport type { Split } from \"type-fest\";\nimport type { TupleToEntries, TupleToGroups } from \"../../types/index.type\";\n\n/**\n * 返回对象的可枚举属性的键/值数组\n *\n * @param value 对象\n * @returns 键值对数组\n * @example\n * ```ts\n * objectEntries({ a: 1 }); // [[\"a\", 1]]\n * ```\n */\nexport function objectEntries<const S extends string> (string: S): TupleToEntries<Split<S, \"\">>;\nexport function objectEntries<const A extends readonly unknown[]> (array: A): TupleToGroups<A>;\nexport function objectEntries<const O extends PlainObject> (plainObject: O): [string & keyof O, O[keyof O]][];\nexport function objectEntries<const O extends AnyObject> (anyObject: O): [string & keyof O, O[keyof O]][];\nexport function objectEntries (value: object) {\n return Object.entries(value) as unknown;\n}\n","import type { PlainObject } from \"@pawover/types\";\nimport { objectEntries } from \"./objectEntries\";\n\n/**\n * 映射对象条目\n * - 将对象的键值对映射为新的键值对\n *\n * @param obj 对象\n * @param toEntry 映射函数\n * @returns 映射后的新对象\n * @example\n * ```ts\n * const obj = { a: 1, b: 2 };\n * mapEntries(obj, (k, v) => [k, v * 2]); // { a: 2, b: 4 }\n * ```\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 { AnyObject, PlainObject } from \"@pawover/types\";\nimport type { Assign } from \"radashi\";\nimport { isObject } from \"../typeof\";\n\n/**\n * 递归地将第二个对象合并到第一个对象的副本中\n * - 只有普通对象才会递归合并\n *\n * @param initial 初始对象\n * @param override 待合并对象\n * @returns 合并后的新对象\n * @example\n * ```ts\n * const base = { a: 1, b: { c: 2 } };\n * const override = { b: { d: 3 } };\n * objectAssign(base, override); // { a: 1, b: { c: 2, d: 3 } }\n * ```\n */\nexport function objectAssign<I extends PlainObject, O extends PlainObject> (initial: I, override: O): Assign<I, O>;\nexport function objectAssign<I extends AnyObject, O extends AnyObject> (initial: I, override: O): Assign<I, O>;\nexport function objectAssign (initial: AnyObject, override: AnyObject) {\n if (!isObject(initial) || !isObject(override)) {\n return (initial ?? override ?? {});\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]\n = isObject(initial[key]) && isObject(override[key]) ? objectAssign(initial[key], override[key]) : override[key];\n }\n\n return assigned;\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport 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 ? | ([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\n/**\n * 压平对象\n * - 将多层级的对象转换为单层级的对象,键名使用点号连接\n *\n * @param plainObject 平面对象\n * @returns 压平后的对象\n * @example\n * ```ts\n * const obj = { a: { b: 1 } };\n * objectCrush(obj); // { \"a.b\": 1 }\n * ```\n */\nexport function objectCrush<T extends PlainObject> (plainObject: T): Crush<T>;\nexport function objectCrush<T extends AnyObject> (anyObject: T): Crush<T>;\nexport function objectCrush<T extends AnyObject> (obj: T): Crush<T> {\n if (!obj) {\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>, obj, \"\");\n}\n","import type { AnyObject } from \"@pawover/types\";\nimport type { Object } from \"ts-toolbelt\";\nimport { isNumber, isObject, isString, isSymbol } from \"../typeof\";\nimport { objectEntries } from \"./objectEntries\";\n\n/**\n * 尽可能地交换对象的键和值\n *\n/**\n * 尽可能地交换对象的键和值\n *\n * @param obj 对象\n * @returns 键值互换后的对象\n * @example\n * ```ts\n * const obj = { a: \"1\", b: 2 };\n * objectInvert(obj); // { \"1\": \"a\", 2: \"b\" }\n * ```\n */\nexport function objectInvert<const O extends Record<keyof O, PropertyKey>> (plainObject: O): Object.Invert<O>;\nexport function objectInvert<const O extends AnyObject> (anyObject: O): Object.Invert<O>;\nexport function objectInvert (obj: AnyObject) {\n const result = {} as Object.Invert<AnyObject>;\n\n if (!isObject(obj)) {\n return result;\n }\n\n for (const [k, v] of objectEntries(obj)) {\n if (isString(v) || isNumber(v) || isSymbol(v)) {\n (result as AnyObject)[v] = k;\n }\n }\n\n return result;\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport type { Split, UnionToTuple } from \"type-fest\";\nimport type { Range } from \"../../types/index.type\";\n\n\n/**\n * 返回对象可枚举属性和方法的名称\n * - `Object.keys` 始终返回 `string[]` 类型,此函数可以返回具体类型\n *\n * @param value 对象\n * @returns 键数组\n * @example\n * ```ts\n * objectKeys({ a: 1, b: 2 }); // [\"a\", \"b\"]\n * ```\n */\nexport function objectKeys<const S extends string> (string: S): UnionToTuple<Range<0, Split<S, \"\">[\"length\"]>>;\nexport function objectKeys<const A extends ArrayLike<unknown>> (array: A): UnionToTuple<Range<0, A[\"length\"]>>;\nexport function objectKeys<O extends PlainObject> (plainObject: O): `${Extract<keyof O, string | number>}`[];\nexport function objectKeys<O extends AnyObject> (anyObject: O): `${Extract<keyof O, string | number>}`[];\nexport function objectKeys (value: object) {\n return Object.keys(value);\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport { isArray, isObject } from \"../typeof\";\n\n/**\n * 排除对象的指定属性\n *\n * @param plainObject 对象\n * @param keys 要排除的属性键数组\n * @returns 排除指定属性后的新对象\n * @example\n * ```ts\n * objectOmit({ a: 1, b: 2 }, [\"a\"]); // { b: 2 }\n * ```\n */\nexport function objectOmit<O extends PlainObject, K extends keyof O> (plainObject: O, keys: readonly K[]): Omit<O, K>;\nexport function objectOmit<O extends AnyObject, K extends keyof O> (anyObject: O, keys: readonly K[]): Omit<O, K>;\nexport function objectOmit (obj: object, keys: readonly string[]) {\n const result = {} as PlainObject;\n\n if (!isObject(obj)) {\n return result;\n }\n if (!isArray(keys)) {\n return obj;\n }\n\n const keysToOmit = new Set(keys);\n\n return Object.keys(obj).reduce((acc, key) => {\n if (!keysToOmit.has(key)) {\n acc[key] = obj[key];\n }\n\n return acc;\n }, result);\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport { isArray, isObject } from \"../typeof\";\n\n/**\n * 选取对象的指定属性\n *\n * @param plainObject 对象\n * @param keys 要选取的属性键数组\n * @returns 包含指定属性的新对象\n * @example\n * ```ts\n * objectPick({ a: 1, b: 2 }, [\"a\"]); // { a: 1 }\n * ```\n */\nexport function objectPick<O extends PlainObject, K extends keyof O> (plainObject: O, keys: readonly K[]): Pick<O, K>;\nexport function objectPick<O extends AnyObject, K extends keyof O> (anyObject: O, keys: readonly K[]): Pick<O, K>;\nexport function objectPick (obj: object, keys: readonly string[]) {\n const result = {} as PlainObject;\n\n if (!isObject(obj)) {\n return result;\n }\n if (!isArray(keys)) {\n return obj;\n }\n\n return keys.reduce((acc, key) => {\n if (key in obj) {\n acc[key] = obj[key];\n }\n\n return acc;\n }, result);\n}\n","import type { AnyObject, PlainObject } from \"@pawover/types\";\nimport type { Split, UnionToTuple, ValueOf } from \"type-fest\";\n\n/**\n * 返回对象可枚举属性的值的数组\n *\n * @param value 对象\n * @returns 值数组\n * @example\n * ```ts\n * objectValues({ a: 1, b: 2 }); // [1, 2]\n * ```\n */\nexport function objectValues<S extends string> (string: S): Split<S, \"\">;\nexport function objectValues<A extends ArrayLike<unknown>> (array: A): A;\nexport function objectValues<O extends PlainObject> (plainObject: O): UnionToTuple<ValueOf<O>>;\nexport function objectValues<O extends AnyObject> (anyObject: O): UnionToTuple<ValueOf<O>>;\nexport function objectValues (value: object) {\n return Object.values(value);\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/**\n * 字符串首字母大小写\n * - 包含非西欧字母字符时,不处理\n * - 纯字母且全大写时,不处理\n * - 纯字母且非全大写时,首字母小写,其余保留\n * - 纯字母且非全大写时,首字母大写,其余保留\n *\n * @param input 待处理字符串\n * @param caseType 大小写类型\n * @returns 处理后的字符串\n * @example\n * ```ts\n * stringInitialCase(\"Hello\", \"lower\"); // \"hello\"\n * stringInitialCase(\"hello\", \"upper\"); // \"Hello\"\n * ```\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/**\n * 字符串替换\n * - 替换第一个匹配项\n *\n * @param input 待处理字符串\n * @param search 匹配项\n * @param replacement 替换项\n * @returns 替换后的字符串\n * @example\n * ```ts\n * stringReplace(\"hello world\", \"world\", \"context\"); // \"hello context\"\n * ```\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 type { PlainObject } from \"@pawover/types\";\nimport { isString } from \"../typeof\";\n\nconst R1 = /\\{\\{(.+?)\\}\\}/g;\n\n/**\n * 字符串模板替换\n *\n/**\n * 字符串模板替换\n *\n * @param input 待处理字符串\n * @param template 模板对象\n * @param regex 模板匹配正则 (默认: `\\{\\{(.+?)\\}\\}`)\n * @returns 替换后的字符串\n * @example\n * ```ts\n * stringTemplate(\"Hello {{name}}\", { name: \"World\" }); // \"Hello World\"\n * ```\n */\nexport function stringTemplate (input: string, template: PlainObject, regex = R1) {\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 type { AnyObject } from \"@pawover/types\";\nimport { isString } from \"../typeof\";\n\n/**\n * 处理 JSON 字符串\n *\n/**\n * 处理 JSON 字符串\n *\n * @param input 待处理字符串\n * @param safeValue 安全值 (当解析失败或输入无效时返回)\n * @returns 解析后的对象 或 安全值\n * @example\n * ```ts\n * stringToJson('{\"a\": 1}', {}); // { a: 1 }\n * stringToJson('invalid', {}); // {}\n * ```\n */\nexport function stringToJson<D extends AnyObject = AnyObject> (input: string | null | undefined, safeValue: D): D {\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/**\n * 将路径转换为 POSIX 风格\n * - 统一使用正斜杠\n * - 处理 Windows 盘符\n *\n * @param input 待处理字符串\n * @param removeLeadingSlash 是否移除开头斜杠,默认为 `false`\n * @returns 转换后的路径\n * @example\n * ```ts\n * stringToPosix(\"C:\\\\Windows\\\\System32\"); // \"/Windows/System32\"\n * ```\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 *\n * @param input 待处理字符串\n * @param valueType 数组中每一项的类型,默认为 \"number\"\n * @param splitSymbol 分隔符,默认为 `,`\n * @returns 分割后的数组\n * @example\n * ```ts\n * stringToValues(\"1,2,3\"); // [1, 2, 3]\n * stringToValues(\"a-b-c\", \"string\", \"-\"); // [\"a\", \"b\", \"c\"]\n * ```\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 * @returns 裁切后的字符串\n * @example\n * ```ts\n * stringTrim(\" hello \"); // \"hello\"\n * stringTrim(\"__hello__\", \"_\"); // \"hello\"\n * ```\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 * - 支持自定义省略符,不会截断在汉字中间(因为JS字符串本身按字符处理)\n *\n * @param input 待处理字符串\n * @param maxLength 最大长度 (包含省略符)\n * @param ellipsis 省略符,默认为 `...`\n * @returns 截取后的字符串\n * @example\n * ```ts\n * stringTruncate(\"hello world\", 8); // \"hello...\"\n * ```\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","/**\n * 获取当前时区信息\n *\n * @returns 时区信息对象 (UTC偏移和时区名称)\n * @example\n * ```ts\n * getTimeZone(); // { UTC: \"UTC+8\", timeZone: \"Asia/Shanghai\" }\n * ```\n */\nexport function getTimeZone () {\n const hour = 0 - new Date().getTimezoneOffset() / 60;\n\n return {\n UTC: \"UTC\" + (hour >= 0 ? \"+\" + hour : hour),\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\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 type { AnyObject } from \"@pawover/types\";\nimport { 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\n/**\n * 过滤树节点\n * - 返回新的树结构,包含所有回调返回 true 的节点\n * - 如果父节点被过滤,则其子节点也会被过滤 (pre 策略下)\n *\n * @param tree 树结构数据\n * @param callback 回调函数\n * @param options 配置项 (childrenKey, strategy等)\n * @returns 过滤后的树结构数组\n * @example\n * ```ts\n * const tree = [{ id: 1, visible: true, children: [{ id: 2, visible: false }] }];\n * treeFilter(tree, (node) => node.visible);\n * // [{ id: 1, visible: true, children: [] }]\n * ```\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 type { AnyObject } from \"@pawover/types\";\nimport { 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 * - 返回第一个回调返回 true 的节点\n *\n * @param tree 树结构数据\n * @param callback 回调函数\n * @param options 配置项\n * @returns 找到的节点,未找到则返回 undefined\n * @example\n * ```ts\n * const tree = [{ id: 1, children: [{ id: 2 }] }];\n * treeFind(tree, (node) => node.id === 2); // { id: 2, ... }\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 type { AnyObject } from \"@pawover/types\";\nimport { 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\n/**\n * 遍历树节点\n *\n * @param tree 树结构数据\n * @param callback 回调函数\n * @param options 配置项\n * @example\n * ```ts\n * const tree = [{ id: 1, children: [{ id: 2 }] }];\n * const ids: number[] = [];\n * treeForEach(tree, (node) => ids.push(node.id));\n * // ids: [1, 2] (pre-order default)\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 type { AnyObject, TreeLike } from \"@pawover/types\";\nimport { 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\n/**\n * 映射树节点\n * - 返回新的树结构,保持层级关系\n *\n * @param tree 树结构数据\n * @param callback 回调函数 (返回映射后的节点内容)\n * @param options 配置项\n * @returns 映射后的树结构数组\n * @example\n * ```ts\n * const tree = [{ id: 1, val: 10, children: [{ id: 2, val: 20 }] }];\n * treeMap(tree, (node) => ({ ...node, val: node.val * 2 }));\n * // [{ id: 1, val: 20, children: [{ id: 2, val: 40 }] }]\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 type { AnyObject, TreeLike } from \"@pawover/types\";\nimport { 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 * - 将平铺的数组转换为树形结构\n *\n * @param rows 行数据数组\n * @param options 配置项\n * @returns 树结构数组\n * @example\n * ```ts\n * const rows = [\n * { id: 1, parentId: null },\n * { id: 2, parentId: 1 },\n * ];\n * rowsToTree(rows);\n * // [{ id: 1, parentId: null, children: [{ id: 2, parentId: 1 }] }]\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 { AnyObject } from \"@pawover/types\";\nimport 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 * - 将树形结构扁平化为数组\n *\n * @param tree 树结构数据 (单个节点或节点数组)\n * @param options 配置项\n * @returns 扁平化后的数组\n * @example\n * ```ts\n * const tree = [{ id: 1, children: [{ id: 2 }] }];\n * treeToRows(tree);\n * // [{ id: 1, children: undefined }, { id: 2, children: undefined }]\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 +1 @@
1
- {"version":3,"file":"vite.d.ts","names":[],"sources":["../src/vite/proxy.ts"],"sourcesContent":[],"mappings":";;;;;;AAQA;;;AAAiI,iBAAjH,gBAAiH,CAAA,UAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,SAAA,EAAvD,CAAuD,EAAA,OAAA,CAAA,EAA1C,YAA0C,GAAA,SAAA,CAAA,EAAf,MAAe,CAAA,MAAA,EAAA,YAAA,CAAA"}
1
+ {"version":3,"file":"vite.d.ts","names":[],"sources":["../src/vite/proxy.ts"],"sourcesContent":[],"mappings":";;;;;;AAQA;;;AAAkI,iBAAlH,gBAAkH,CAAA,UAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,SAAA,EAAvD,CAAuD,EAAA,OAAA,CAAA,EAA1C,YAA0C,GAAA,SAAA,CAAA,EAAf,MAAe,CAAA,MAAA,EAAA,YAAA,CAAA"}
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","names":["result: Record<string, ProxyOptions>"],"sources":["../src/vite/proxy.ts"],"sourcesContent":["import type { ProxyOptions } from \"vite\";\n\n\n/**\n * 开发服务器反向代理配置\n *\n * @param proxyList 代理配置项\n */\nexport function resolveViteProxy<L extends [string, string][]>(proxyList: L, options?: ProxyOptions | undefined): Record<string, ProxyOptions> {\n const httpsRE = /^https:\\/\\//;\n const result: Record<string, ProxyOptions> = {};\n\n if (typeof proxyList === \"object\") {\n for (const [prefix, target] of proxyList) {\n const isHttps = httpsRE.test(target);\n\n // https://github.com/http-party/node-http-proxy#options\n result[prefix] = {\n target,\n changeOrigin: true,\n ws: true,\n rewrite: (path) => path.replace(new RegExp(`^${prefix}`), \"\"),\n // https 需要开启 secure = false\n ...isHttps ? { secure: false } : {},\n ...options,\n };\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,iBAA+C,WAAc,SAAkE;CAC7I,MAAM,UAAU;CAChB,MAAMA,SAAuC,EAAE;AAE/C,KAAI,OAAO,cAAc,SACvB,MAAK,MAAM,CAAC,QAAQ,WAAW,UAI7B,QAAO,UAAU;EACf;EACA,cAAc;EACd,IAAI;EACJ,UAAU,SAAS,KAAK,wBAAQ,IAAI,OAAO,IAAI,SAAS,EAAE,GAAG;EAE7D,GATc,QAAQ,KAAK,OAAO,GASrB,EAAE,QAAQ,OAAO,GAAG,EAAE;EACnC,GAAG;EACJ;AAIL,QAAO"}
1
+ {"version":3,"file":"vite.js","names":["result: Record<string, ProxyOptions>"],"sources":["../src/vite/proxy.ts"],"sourcesContent":["import type { ProxyOptions } from \"vite\";\n\n\n/**\n * 开发服务器反向代理配置\n *\n * @param proxyList 代理配置项\n */\nexport function resolveViteProxy<L extends [string, string][]> (proxyList: L, options?: ProxyOptions | undefined): Record<string, ProxyOptions> {\n const httpsRE = /^https:\\/\\//;\n const result: Record<string, ProxyOptions> = {};\n\n if (typeof proxyList === \"object\") {\n for (const [prefix, target] of proxyList) {\n const isHttps = httpsRE.test(target);\n\n // https://github.com/http-party/node-http-proxy#options\n result[prefix] = {\n target,\n changeOrigin: true,\n ws: true,\n rewrite: (path) => path.replace(new RegExp(`^${prefix}`), \"\"),\n // https 需要开启 secure = false\n ...isHttps ? { secure: false } : {},\n ...options,\n };\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,iBAAgD,WAAc,SAAkE;CAC9I,MAAM,UAAU;CAChB,MAAMA,SAAuC,EAAE;AAE/C,KAAI,OAAO,cAAc,SACvB,MAAK,MAAM,CAAC,QAAQ,WAAW,UAI7B,QAAO,UAAU;EACf;EACA,cAAc;EACd,IAAI;EACJ,UAAU,SAAS,KAAK,wBAAQ,IAAI,OAAO,IAAI,SAAS,EAAE,GAAG;EAE7D,GATc,QAAQ,KAAK,OAAO,GASrB,EAAE,QAAQ,OAAO,GAAG,EAAE;EACnC,GAAG;EACJ;AAIL,QAAO"}
package/dist/zod.d.ts CHANGED
@@ -33,6 +33,10 @@ declare const any: z.ZodAny;
33
33
  declare const unknown: z.ZodUnknown;
34
34
  declare const never: z.ZodNever;
35
35
  //#endregion
36
+ //#region src/zod/server.d.ts
37
+ declare const id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
38
+ declare const idAllowEmpty: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
39
+ //#endregion
36
40
  //#region src/zod/validator/input.d.ts
37
41
  /** 字母 */
38
42
  declare const alphabet: z.ZodString;
@@ -101,5 +105,5 @@ declare const chinaProvince: z.ZodString;
101
105
  /** 民族 */
102
106
  declare const nation: z.ZodString;
103
107
  //#endregion
104
- export { ID, IMEI, USCC, USCC_S, alphabet, alphabetLowercase, alphabetOmit, alphabetUppercase, any, bigint, boolean, booleanAllowEmpty, carCodeGreen, carCodeNotGreen, chinaProvince, chineseName, dirPathLinux, dirPathWindows, email, empty, filePathLinux, filePathWindows, int, intAllowEmpty, link, linkPort, nation, natural, naturalAllowEmpty, never, number, numberAllowEmpty, numberAlphabet, phone, spaceEnd, spaceInclude, spaceStart, spaceStartEnd, string, stringAllowEmpty, stringEmpty, stringNoEmpty, stringSignedDecimalismFloat, stringSignedDecimalismInt, stringUnsignedDecimalismFloat, stringUnsignedDecimalismInt, symbol, telephone, thunder, unknown };
108
+ export { ID, IMEI, USCC, USCC_S, alphabet, alphabetLowercase, alphabetOmit, alphabetUppercase, any, bigint, boolean, booleanAllowEmpty, carCodeGreen, carCodeNotGreen, chinaProvince, chineseName, dirPathLinux, dirPathWindows, email, empty, filePathLinux, filePathWindows, id, idAllowEmpty, int, intAllowEmpty, link, linkPort, nation, natural, naturalAllowEmpty, never, number, numberAllowEmpty, numberAlphabet, phone, spaceEnd, spaceInclude, spaceStart, spaceStartEnd, string, stringAllowEmpty, stringEmpty, stringNoEmpty, stringSignedDecimalismFloat, stringSignedDecimalismInt, stringUnsignedDecimalismFloat, stringUnsignedDecimalismInt, symbol, telephone, thunder, unknown };
105
109
  //# sourceMappingURL=zod.d.ts.map
package/dist/zod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"zod.d.ts","names":[],"sources":["../src/zod/primitive.ts","../src/zod/validator/input.ts","../src/zod/validator/societal.ts"],"sourcesContent":[],"mappings":";;;;cAGa,OAAK,CAAA,CAAA,mBAAA,CAAA,CAAA,SAAA,CAAA,CAAA;AAAlB;AAAkB,cAGL,MAHK,EAGC,CAAA,CAAA,SAHD;;AAAA,cAKL,WALK,EAKM,CAAA,CAAA,WALN,CAKM,CAAA,CAAA,WALN,CAKM,CAAA,CAAA,UALN,CAAA,EAAA,CAAA,CAAA,CAAA;;AAGL,cAIA,aAJM,EAIO,CAAA,CAAA,SAJM;AAEhC;AAAwB,cAIX,gBAJW,EAIK,CAAA,CAAA,WAJL,CAIK,CAAA,CAAA,WAJL,CAIK,CAAA,CAAA,SAJL,CAAA,CAAA;;AAAA,cAOX,MAPW,EAOL,CAAA,CAAA,SAPK;;AAEX,cAOA,gBAPa,EAOG,CAAA,CAAA,WAPiB,CAOjB,CAAA,CAAA,WAPiB,CAOjB,CAAA,CAAA,SAPiB,CAAA,CAAA;AAE9C;AAA6B,cAOhB,GAPgB,EAOb,CAAA,CAAA,SAPa;;AAAA,cAShB,aATgB,EASH,CAAA,CAAA,WATG,CASH,CAAA,CAAA,WATG,CASH,CAAA,CAAA,SATG,CAAA,CAAA;;AAGhB,cAQA,OARM,EAQC,CAAA,CAAA,SARY;AAEhC;AAA6B,cAQhB,iBARgB,EAQC,CAAA,CAAA,WARD,CAQC,CAAA,CAAA,WARD,CAQC,CAAA,CAAA,SARD,CAAA,CAAA;;AAAA,cAWhB,OAXgB,EAWT,CAAA,CAAA,UAXS;;AAEhB,cAWA,iBAXuC,EAWtB,CAAA,CAAA,WAXsB,CAWtB,CAAA,CAAA,WAXsB,CAWtB,CAAA,CAAA,UAXsB,CAAA,CAAA;AAEvC,cAWA,MAX6B,EAWvB,CAAA,CAAA,SAXuB;AAAhB,cAab,MAba,EAaP,CAAA,CAAA,SAbO;AAAA,cAeb,GAfa,EAeV,CAAA,CAAA,MAfU;AAAA,cAiBb,OAjBa,EAiBN,CAAA,CAAA,UAjBM;AAAA,cAmBb,KAnBa,EAmBR,CAAA,CAAA,QAnBQ;;;;cCjBb,UAAQ,CAAA,CAAA;ADDrB;AAAkB,cCKL,iBDLK,ECKY,CAAA,CAAA,SDLZ;;AAAA,cCSL,iBDTK,ECSY,CAAA,CAAA,SDTZ;;AAGL,cCUA,YDVM,ECUM,CAAA,CAAA,SDVO;AAEhC;AAAwB,cCYX,cDZW,ECYG,CAAA,CAAA,SDZH;;AAAA,cCgBX,2BDhBW,ECgBgB,CAAA,CAAA,SDhBhB;;AAEX,cCkBA,6BDlBiC,ECkBJ,CAAA,CAAA,SDlBI;AAE9C;AAA6B,cCoBhB,yBDpBgB,ECoBS,CAAA,CAAA,SDpBT;;AAAA,cCwBhB,2BDxBgB,ECwBW,CAAA,CAAA,SDxBX;;AAGhB,cCyBA,YDzBM,ECyBM,CAAA,CAAA,SDzBO;AAEhC;AAA6B,cC2BhB,UD3BgB,EC2BN,CAAA,CAAA,SD3BM;;AAAA,cC+BhB,QD/BgB,EC+BR,CAAA,CAAA,SD/BQ;;AAEhB,cCgCA,aDhCuC,ECgC1B,CAAA,CAAA,eDhC0B,CCgC1B,CAAA,CAAA,SDhC0B,ECgC1B,CAAA,CAAA,SDhC0B,CAAA;;;;cEfvC,OAAK,CAAA,CAAA;AFDlB;AAAkB,cEKL,SFLK,EEKI,CAAA,CAAA,SFLJ;;AAAA,cESL,KFTK,EESA,CAAA,CAAA,SFTA;;AAGL,cEUA,WFVM,EEUK,CAAA,CAAA,SFVQ;AAEhC;AAAwB,cEWX,IFXW,EEWP,CAAA,CAAA,SFXO;;AAAA,cEeX,EFfW,EEeT,CAAA,CAAA,SFfS;;AAEX,cEiBA,IFjBiC,EEiB7B,CAAA,CAAA,SFjBS;AAE1B;AAA6B,cEmBhB,QFnBgB,EEmBR,CAAA,CAAA,SFnBQ;;AAAA,cEuBhB,MFvBgB,EEuBV,CAAA,CAAA,SFvBU;;AAGhB,cEwBA,IFxBM,EEwBF,CAAA,CAAA,SFxBe;AAEhC;AAA6B,cE0BhB,OF1BgB,EE0BT,CAAA,CAAA,SF1BS;;AAAA,cE8BhB,cF9BgB,EE8BF,CAAA,CAAA,SF9BE;;AAEhB,cEgCA,eFhCuC,EEgCxB,CAAA,CAAA,SFhCwB;AAEpD;AAA0B,cEkCb,YFlCa,EEkCD,CAAA,CAAA,SFlCC;;AAAA,cEsCb,aFtCa,EEsCA,CAAA,CAAA,SFtCA;;AAEb,cEwCA,YFxCO,EEwCK,CAAA,CAAA,SFxCiC;AAE1D;AAA8B,cE0CjB,eF1CiB,EE0CF,CAAA,CAAA,SF1CE;;AAAA,cE8CjB,aF9CiB,EE8CJ,CAAA,CAAA,SF9CI;;AAGjB,cE+CA,MF/CO,EE+CD,CAAA,CAAA,SF/Ce"}
1
+ {"version":3,"file":"zod.d.ts","names":[],"sources":["../src/zod/primitive.ts","../src/zod/server.ts","../src/zod/validator/input.ts","../src/zod/validator/societal.ts"],"sourcesContent":[],"mappings":";;;;cAGa,OAAK,CAAA,CAAA,mBAAA,CAAA,CAAA,SAAA,CAAA,CAAA;AAAlB;AAAkB,cAGL,MAHK,EAGC,CAAA,CAAA,SAHD;;AAAA,cAKL,WALK,EAKM,CAAA,CAAA,WALN,CAKM,CAAA,CAAA,WALN,CAKM,CAAA,CAAA,UALN,CAAA,EAAA,CAAA,CAAA,CAAA;;AAGL,cAIA,aAJM,EAIO,CAAA,CAAA,SAJM;AAEhC;AAAwB,cAIX,gBAJW,EAIK,CAAA,CAAA,WAJL,CAIK,CAAA,CAAA,WAJL,CAIK,CAAA,CAAA,SAJL,CAAA,CAAA;;AAAA,cAOX,MAPW,EAOL,CAAA,CAAA,SAPK;;AAEX,cAOA,gBAPa,EAOG,CAAA,CAAA,WAPiB,CAOjB,CAAA,CAAA,WAPiB,CAOjB,CAAA,CAAA,SAPiB,CAAA,CAAA;AAE9C;AAA6B,cAOhB,GAPgB,EAOb,CAAA,CAAA,SAPa;;AAAA,cAShB,aATgB,EASH,CAAA,CAAA,WATG,CASH,CAAA,CAAA,WATG,CASH,CAAA,CAAA,SATG,CAAA,CAAA;;AAGhB,cAQA,OARM,EAQC,CAAA,CAAA,SARY;AAEhC;AAA6B,cAQhB,iBARgB,EAQC,CAAA,CAAA,WARD,CAQC,CAAA,CAAA,WARD,CAQC,CAAA,CAAA,SARD,CAAA,CAAA;;AAAA,cAWhB,OAXgB,EAWT,CAAA,CAAA,UAXS;;AAEhB,cAWA,iBAXuC,EAWtB,CAAA,CAAA,WAXsB,CAWtB,CAAA,CAAA,WAXsB,CAWtB,CAAA,CAAA,UAXsB,CAAA,CAAA;AAEvC,cAWA,MAX6B,EAWvB,CAAA,CAAA,SAXuB;AAAhB,cAab,MAba,EAaP,CAAA,CAAA,SAbO;AAAA,cAeb,GAfa,EAeV,CAAA,CAAA,MAfU;AAAA,cAiBb,OAjBa,EAiBN,CAAA,CAAA,UAjBM;AAAA,cAmBb,KAnBa,EAmBR,CAAA,CAAA,QAnBQ;;;cCnBb,IAAE,CAAA,CAAA,mBAAA,CAAA,CAAA,WAAA,CAAA,CAAA;cAEF,cAAY,CAAA,CAAA,YAAA,CAAA,CAAA,YAAA,CAAA,CAAA,mBAAA,CAAA,CAAA,WAAA,CAAA,CAAA;;;;cCAZ,UAAQ,CAAA,CAAA;AFDrB;AAAkB,cEKL,iBFLK,EEKY,CAAA,CAAA,SFLZ;;AAAA,cESL,iBFTK,EESY,CAAA,CAAA,SFTZ;;AAGL,cEUA,YFVM,EEUM,CAAA,CAAA,SFVO;AAEhC;AAAwB,cEYX,cFZW,EEYG,CAAA,CAAA,SFZH;;AAAA,cEgBX,2BFhBW,EEgBgB,CAAA,CAAA,SFhBhB;;AAEX,cEkBA,6BFlBiC,EEkBJ,CAAA,CAAA,SFlBI;AAE9C;AAA6B,cEoBhB,yBFpBgB,EEoBS,CAAA,CAAA,SFpBT;;AAAA,cEwBhB,2BFxBgB,EEwBW,CAAA,CAAA,SFxBX;;AAGhB,cEyBA,YFzBM,EEyBM,CAAA,CAAA,SFzBO;AAEhC;AAA6B,cE2BhB,UF3BgB,EE2BN,CAAA,CAAA,SF3BM;;AAAA,cE+BhB,QF/BgB,EE+BR,CAAA,CAAA,SF/BQ;;AAEhB,cEgCA,aFhCuC,EEgC1B,CAAA,CAAA,eFhC0B,CEgC1B,CAAA,CAAA,SFhC0B,EEgC1B,CAAA,CAAA,SFhC0B,CAAA;;;;cGfvC,OAAK,CAAA,CAAA;AHDlB;AAAkB,cGKL,SHLK,EGKI,CAAA,CAAA,SHLJ;;AAAA,cGSL,KHTK,EGSA,CAAA,CAAA,SHTA;;AAGL,cGUA,WHVM,EGUK,CAAA,CAAA,SHVQ;AAEhC;AAAwB,cGWX,IHXW,EGWP,CAAA,CAAA,SHXO;;AAAA,cGeX,EHfW,EGeT,CAAA,CAAA,SHfS;;AAEX,cGiBA,IHjBiC,EGiB7B,CAAA,CAAA,SHjBS;AAE1B;AAA6B,cGmBhB,QHnBgB,EGmBR,CAAA,CAAA,SHnBQ;;AAAA,cGuBhB,MHvBgB,EGuBV,CAAA,CAAA,SHvBU;;AAGhB,cGwBA,IHxBM,EGwBF,CAAA,CAAA,SHxBe;AAEhC;AAA6B,cG0BhB,OH1BgB,EG0BT,CAAA,CAAA,SH1BS;;AAAA,cG8BhB,cH9BgB,EG8BF,CAAA,CAAA,SH9BE;;AAEhB,cGgCA,eHhCuC,EGgCxB,CAAA,CAAA,SHhCwB;AAEpD;AAA0B,cGkCb,YHlCa,EGkCD,CAAA,CAAA,SHlCC;;AAAA,cGsCb,aHtCa,EGsCA,CAAA,CAAA,SHtCA;;AAEb,cGwCA,YHxCO,EGwCK,CAAA,CAAA,SHxCiC;AAE1D;AAA8B,cG0CjB,eH1CiB,EG0CF,CAAA,CAAA,SH1CE;;AAAA,cG8CjB,aH9CiB,EG8CJ,CAAA,CAAA,SH9CI;;AAGjB,cG+CA,MH/CO,EG+CD,CAAA,CAAA,SH/Ce"}
package/dist/zod.js CHANGED
@@ -33,6 +33,11 @@ const any = z.any();
33
33
  const unknown = z.unknown();
34
34
  const never = z.never();
35
35
 
36
+ //#endregion
37
+ //#region src/zod/server.ts
38
+ const id = z.union([z.string().min(1), z.number().int()]);
39
+ const idAllowEmpty = id.nullish();
40
+
36
41
  //#endregion
37
42
  //#region src/zod/validator/input.ts
38
43
  const _alphabet = /^[a-z]+$/i;
@@ -134,5 +139,5 @@ const _nation = /^汉族|蒙古族|回族|藏族|维吾尔族|苗族|彝族|壮
134
139
  const nation = z.string().regex(_nation, { error: "应为民族" });
135
140
 
136
141
  //#endregion
137
- export { ID, IMEI, USCC, USCC_S, alphabet, alphabetLowercase, alphabetOmit, alphabetUppercase, any, bigint, boolean, booleanAllowEmpty, carCodeGreen, carCodeNotGreen, chinaProvince, chineseName, dirPathLinux, dirPathWindows, email, empty, filePathLinux, filePathWindows, int, intAllowEmpty, link, linkPort, nation, natural, naturalAllowEmpty, never, number, numberAllowEmpty, numberAlphabet, phone, spaceEnd, spaceInclude, spaceStart, spaceStartEnd, string, stringAllowEmpty, stringEmpty, stringNoEmpty, stringSignedDecimalismFloat, stringSignedDecimalismInt, stringUnsignedDecimalismFloat, stringUnsignedDecimalismInt, symbol, telephone, thunder, unknown };
142
+ export { ID, IMEI, USCC, USCC_S, alphabet, alphabetLowercase, alphabetOmit, alphabetUppercase, any, bigint, boolean, booleanAllowEmpty, carCodeGreen, carCodeNotGreen, chinaProvince, chineseName, dirPathLinux, dirPathWindows, email, empty, filePathLinux, filePathWindows, id, idAllowEmpty, int, intAllowEmpty, link, linkPort, nation, natural, naturalAllowEmpty, never, number, numberAllowEmpty, numberAlphabet, phone, spaceEnd, spaceInclude, spaceStart, spaceStartEnd, string, stringAllowEmpty, stringEmpty, stringNoEmpty, stringSignedDecimalismFloat, stringSignedDecimalismInt, stringUnsignedDecimalismFloat, stringUnsignedDecimalismInt, symbol, telephone, thunder, unknown };
138
143
  //# sourceMappingURL=zod.js.map
package/dist/zod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"zod.js","names":[],"sources":["../src/zod/primitive.ts","../src/zod/validator/input.ts","../src/zod/validator/societal.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** 空 */\nexport const empty = z.union([z.null(), z.undefined()]);\n\n/** 字符串 */\nexport const string = z.string();\n/** 字符串-空 */\nexport const stringEmpty = z.literal(\"\").nullish();\n/** 字符串-非空 */\nexport const stringNoEmpty = z.string().min(1);\n/** 字符串-可空 */\nexport const stringAllowEmpty = z.string().nullish();\n\n/** 数字 */\nexport const number = z.number();\n/** 数字-可空 */\nexport const numberAllowEmpty = number.nullish();\n/** 整数 */\nexport const int = z.number().int({ error: \"应为整数\" });\n/** 整数-可空 */\nexport const intAllowEmpty = int.nullish();\n/** 自然数 */\nexport const natural = int.nonnegative({ error: \"应为非负数\" });\n/** 自然数-可空 */\nexport const naturalAllowEmpty = natural.nullish();\n\n/** 布尔值 */\nexport const boolean = z.boolean();\n/** 布尔值-可空 */\nexport const booleanAllowEmpty = z.boolean().nullish();\n\nexport const bigint = z.bigint();\n\nexport const symbol = z.symbol();\n\nexport const any = z.any();\n\nexport const unknown = z.unknown();\n\nexport const never = z.never();\n","import { z } from \"zod\";\n\nconst _alphabet = /^[a-z]+$/i;\n/** 字母 */\nexport const alphabet = z.string().regex(_alphabet, { error: \"应为字母\" });\n\nconst _alphabetLowercase = /^[a-z]+$/;\n/** 小写字母 */\nexport const alphabetLowercase = z.string().regex(_alphabetLowercase, { error: \"应为小写字母\" });\n\nconst _alphabetUppercase = /^[A-Z]+$/;\n/** 大写字母 */\nexport const alphabetUppercase = z.string().regex(_alphabetUppercase, { error: \"应为大写字母\" });\n\nconst _alphabetOmit = /^[^A-Z]*$/i;\n/** 不包含字母 */\nexport const alphabetOmit = z.string().regex(_alphabetOmit, { error: \"应不包含字母\" });\n\nconst _numberAlphabet = /^[A-Z0-9]+$/i;\n/** 数字和字母 */\nexport const numberAlphabet = z.string().regex(_numberAlphabet, { error: \"应为数字和字母组合\" });\n\nconst _stringSignedDecimalismFloat = /^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)$/;\n/** 有符号十进制浮点数字符串 */\nexport const stringSignedDecimalismFloat = z.string().regex(_stringSignedDecimalismFloat, { error: \"应为十进制数字\" });\n\nconst _stringUnsignedDecimalismFloat = /^\\+?(\\d+(\\.\\d+)?|\\.\\d+)$/;\n/** 无符号十进制浮点数字符串 */\nexport const stringUnsignedDecimalismFloat = z.string().regex(_stringUnsignedDecimalismFloat, { error: \"应为十进制正数\" });\n\nconst _stringSignedDecimalismInt = /^[+-]?\\d+$/;\n/** 有符号十进制整数字符串 */\nexport const stringSignedDecimalismInt = z.string().regex(_stringSignedDecimalismInt, { error: \"应为十进制整数\" });\n\nconst _stringUnsignedDecimalismInt = /^\\+?\\d+$/;\n/** 无符号十进制整数字符串 */\nexport const stringUnsignedDecimalismInt = z.string().regex(_stringUnsignedDecimalismInt, { error: \"应为十进制正整数\" });\n\nconst _spaceInclude = /^[^ ]+$/;\n/** 包含空格 */\nexport const spaceInclude = z.string().regex(_spaceInclude, { error: \"应不包含空格\" });\n\nconst _spaceStart = /^\\S/g;\n/** 首空格 */\nexport const spaceStart = z.string().regex(_spaceStart, { error: \"应不包含首空格\" });\n\nconst _spaceEnd = /\\s$/g;\n/** 尾空格 */\nexport const spaceEnd = z.string().regex(_spaceEnd, { error: \"应不包含尾空格\" });\n\n/** 首尾空格 */\nexport const spaceStartEnd = spaceStart.and(spaceEnd);\n","import { z } from \"zod\";\n\nconst _phone = /^1(3\\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\\d|9[0-35-9])\\d{8}$/;\n/** 手机号码 */\nexport const phone = z.string().regex(_phone, { error: \"手机号码格式错误\" });\n\nconst _telephone = /0\\d{2,3}-\\d{7,9}$/;\n/** 固定电话 */\nexport const telephone = z.string().regex(_telephone, { error: \"电话号码格式错误\" });\n\nconst _email = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\])|(([a-z\\-0-9]+\\.)+[a-z]{2,}))$/i;\n/** 电子邮箱 */\nexport const email = z.string().regex(_email, { error: \"电子邮箱格式错误\" });\n\nconst _chineseName = /^[一-龢][一·-龢]*$/;\n/** 中文姓名 */\nexport const chineseName = z.string().regex(_chineseName, { error: \"应为中文姓名\" });\n\n/** 手机机身码 */\nexport const IMEI = z.string().regex(/^\\d{15,17}$/, { error: \"手机机身码格式错误\" });\n\nconst _ID = /^\\d{6}((((((19|20)\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|(((19|20)\\d{2})(0[13578]|1[02])31)|((19|20)\\d{2})02(0[1-9]|1\\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\\d{3})|((((\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((\\d{2})(0[13578]|1[02])31)|((\\d{2})02(0[1-9]|1\\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\\d{2}))([\\dX])$/i;\n/** 身份证号 */\nexport const ID = z.string().regex(_ID, { error: \"身份证号格式错误\" });\n\nconst _link = /^(((ht|f)tps?):\\/\\/)?(([\\w-]+(\\.[\\w-]+)*\\.[a-z]{2,6})|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d+)?(\\/\\S*)?$/;\n/** 链接 */\nexport const link = z.string().regex(_link, { error: \"链接格式错误\" });\n\nconst _linkPort = /^((ht|f)tps?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+:\\d{1,5}\\/?$/;\n/** 端口号网址 */\nexport const linkPort = z.string().regex(_linkPort, { error: \"网址格式错误\" });\n\nconst _USCC_S = /^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;\n/** 统一社会信用代码 */\nexport const USCC_S = z.string().regex(_USCC_S, { error: \"统一社会信用代码格式错误\" });\n\nconst _USCC = /^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;\n/** 统一社会信用代码 - 15位/18位/20位数字/字母 */\nexport const USCC = z.string().regex(_USCC, { error: \"统一社会信用代码格式错误\" });\n\nconst _thunder = /^thunderx?:\\/\\/[a-zA-Z\\d]+=$/;\n/** 迅雷链接 */\nexport const thunder = z.string().regex(_thunder, { error: \"迅雷链接格式错误\" });\n\nconst _dirPathWindows = /^[a-z]:\\\\(?:\\w+\\\\?)*$/i;\n/** windows 文件夹路径 */\nexport const dirPathWindows = z.string().regex(_dirPathWindows, { error: \"路径格式错误\" });\n\nconst _filePathWindows = /^[a-z]:\\\\(?:\\w+\\\\)*\\w+\\.\\w+$/i;\n/** windows 文件路径 */\nexport const filePathWindows = z.string().regex(_filePathWindows, { error: \"路径格式错误\" });\n\nconst _dirPathLinux = /^\\/(?:[^\\\\/\\s]+\\/)*$/;\n/** linux 文件夹路径 */\nexport const dirPathLinux = z.string().regex(_dirPathLinux, { error: \"路径格式错误\" });\n\nconst _filePathLinux = /^(\\/$|\\/(?:[^\\\\/\\s]+\\/)*[^\\\\/\\s]+$)/;\n/** linux 文件路径 */\nexport const filePathLinux = z.string().regex(_filePathLinux, { error: \"路径格式错误\" });\n\nconst _carCodeGreen = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](([DF]((?![IO])[a-zA-Z0-9](?![IO]))\\d{4})|(\\d{5}[DF]))$/;\n/** 车牌号 新能源 */\nexport const carCodeGreen = z.string().regex(_carCodeGreen, { error: \"车牌号格式错误\" });\n\nconst _carCodeNotGreen = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/;\n/** 车牌号 非新能源 */\nexport const carCodeNotGreen = z.string().regex(_carCodeNotGreen, { error: \"车牌号格式错误\" });\n\nconst _chinaProvince = /^安徽|澳门|北京|重庆|福建|甘肃|广东|广西|贵州|海南|河北|河南|黑龙江|湖北|湖南|吉林|江苏|江西|辽宁|内蒙古|宁夏|青海|山东|山西|陕西|上海|四川|台湾|天津|西藏|香港|新疆|云南|浙江$/;\n/** 中国省份 */\nexport const chinaProvince = z.string().regex(_chinaProvince, { error: \"应为中国省份\" });\n\nconst _nation = /^汉族|蒙古族|回族|藏族|维吾尔族|苗族|彝族|壮族|布依族|朝鲜族|满族|侗族|瑶族|白族|土家族|哈尼族|哈萨克族|傣族|黎族|傈僳族|佤族|畲族|高山族|拉祜族|水族|东乡族|纳西族|景颇族|柯尔克孜族|土族|达斡尔族|仫佬族|羌族|布朗族|撒拉族|毛南族|仡佬族|锡伯族|阿昌族|普米族|塔吉克族|怒族|乌孜别克族|俄罗斯族|鄂温克族|德昂族|保安族|裕固族|京族|塔塔尔族|独龙族|鄂伦春族|赫哲族|门巴族|珞巴族|基诺族|其它未识别民族|外国人入中国籍$/;\n/** 民族 */\nexport const nation = z.string().regex(_nation, { error: \"应为民族\" });\n"],"mappings":"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"}
1
+ {"version":3,"file":"zod.js","names":[],"sources":["../src/zod/primitive.ts","../src/zod/server.ts","../src/zod/validator/input.ts","../src/zod/validator/societal.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** 空 */\nexport const empty = z.union([z.null(), z.undefined()]);\n\n/** 字符串 */\nexport const string = z.string();\n/** 字符串-空 */\nexport const stringEmpty = z.literal(\"\").nullish();\n/** 字符串-非空 */\nexport const stringNoEmpty = z.string().min(1);\n/** 字符串-可空 */\nexport const stringAllowEmpty = z.string().nullish();\n\n/** 数字 */\nexport const number = z.number();\n/** 数字-可空 */\nexport const numberAllowEmpty = number.nullish();\n/** 整数 */\nexport const int = z.number().int({ error: \"应为整数\" });\n/** 整数-可空 */\nexport const intAllowEmpty = int.nullish();\n/** 自然数 */\nexport const natural = int.nonnegative({ error: \"应为非负数\" });\n/** 自然数-可空 */\nexport const naturalAllowEmpty = natural.nullish();\n\n/** 布尔值 */\nexport const boolean = z.boolean();\n/** 布尔值-可空 */\nexport const booleanAllowEmpty = z.boolean().nullish();\n\nexport const bigint = z.bigint();\n\nexport const symbol = z.symbol();\n\nexport const any = z.any();\n\nexport const unknown = z.unknown();\n\nexport const never = z.never();\n","import { z } from \"zod\";\n\nexport const id = z.union([z.string().min(1), z.number().int()]);\n\nexport const idAllowEmpty = id.nullish();\n","import { z } from \"zod\";\n\nconst _alphabet = /^[a-z]+$/i;\n/** 字母 */\nexport const alphabet = z.string().regex(_alphabet, { error: \"应为字母\" });\n\nconst _alphabetLowercase = /^[a-z]+$/;\n/** 小写字母 */\nexport const alphabetLowercase = z.string().regex(_alphabetLowercase, { error: \"应为小写字母\" });\n\nconst _alphabetUppercase = /^[A-Z]+$/;\n/** 大写字母 */\nexport const alphabetUppercase = z.string().regex(_alphabetUppercase, { error: \"应为大写字母\" });\n\nconst _alphabetOmit = /^[^A-Z]*$/i;\n/** 不包含字母 */\nexport const alphabetOmit = z.string().regex(_alphabetOmit, { error: \"应不包含字母\" });\n\nconst _numberAlphabet = /^[A-Z0-9]+$/i;\n/** 数字和字母 */\nexport const numberAlphabet = z.string().regex(_numberAlphabet, { error: \"应为数字和字母组合\" });\n\nconst _stringSignedDecimalismFloat = /^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)$/;\n/** 有符号十进制浮点数字符串 */\nexport const stringSignedDecimalismFloat = z.string().regex(_stringSignedDecimalismFloat, { error: \"应为十进制数字\" });\n\nconst _stringUnsignedDecimalismFloat = /^\\+?(\\d+(\\.\\d+)?|\\.\\d+)$/;\n/** 无符号十进制浮点数字符串 */\nexport const stringUnsignedDecimalismFloat = z.string().regex(_stringUnsignedDecimalismFloat, { error: \"应为十进制正数\" });\n\nconst _stringSignedDecimalismInt = /^[+-]?\\d+$/;\n/** 有符号十进制整数字符串 */\nexport const stringSignedDecimalismInt = z.string().regex(_stringSignedDecimalismInt, { error: \"应为十进制整数\" });\n\nconst _stringUnsignedDecimalismInt = /^\\+?\\d+$/;\n/** 无符号十进制整数字符串 */\nexport const stringUnsignedDecimalismInt = z.string().regex(_stringUnsignedDecimalismInt, { error: \"应为十进制正整数\" });\n\nconst _spaceInclude = /^[^ ]+$/;\n/** 包含空格 */\nexport const spaceInclude = z.string().regex(_spaceInclude, { error: \"应不包含空格\" });\n\nconst _spaceStart = /^\\S/g;\n/** 首空格 */\nexport const spaceStart = z.string().regex(_spaceStart, { error: \"应不包含首空格\" });\n\nconst _spaceEnd = /\\s$/g;\n/** 尾空格 */\nexport const spaceEnd = z.string().regex(_spaceEnd, { error: \"应不包含尾空格\" });\n\n/** 首尾空格 */\nexport const spaceStartEnd = spaceStart.and(spaceEnd);\n","import { z } from \"zod\";\n\nconst _phone = /^1(3\\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\\d|9[0-35-9])\\d{8}$/;\n/** 手机号码 */\nexport const phone = z.string().regex(_phone, { error: \"手机号码格式错误\" });\n\nconst _telephone = /0\\d{2,3}-\\d{7,9}$/;\n/** 固定电话 */\nexport const telephone = z.string().regex(_telephone, { error: \"电话号码格式错误\" });\n\nconst _email = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\])|(([a-z\\-0-9]+\\.)+[a-z]{2,}))$/i;\n/** 电子邮箱 */\nexport const email = z.string().regex(_email, { error: \"电子邮箱格式错误\" });\n\nconst _chineseName = /^[一-龢][一·-龢]*$/;\n/** 中文姓名 */\nexport const chineseName = z.string().regex(_chineseName, { error: \"应为中文姓名\" });\n\n/** 手机机身码 */\nexport const IMEI = z.string().regex(/^\\d{15,17}$/, { error: \"手机机身码格式错误\" });\n\nconst _ID = /^\\d{6}((((((19|20)\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|(((19|20)\\d{2})(0[13578]|1[02])31)|((19|20)\\d{2})02(0[1-9]|1\\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\\d{3})|((((\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((\\d{2})(0[13578]|1[02])31)|((\\d{2})02(0[1-9]|1\\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\\d{2}))([\\dX])$/i;\n/** 身份证号 */\nexport const ID = z.string().regex(_ID, { error: \"身份证号格式错误\" });\n\nconst _link = /^(((ht|f)tps?):\\/\\/)?(([\\w-]+(\\.[\\w-]+)*\\.[a-z]{2,6})|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d+)?(\\/\\S*)?$/;\n/** 链接 */\nexport const link = z.string().regex(_link, { error: \"链接格式错误\" });\n\nconst _linkPort = /^((ht|f)tps?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+:\\d{1,5}\\/?$/;\n/** 端口号网址 */\nexport const linkPort = z.string().regex(_linkPort, { error: \"网址格式错误\" });\n\nconst _USCC_S = /^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;\n/** 统一社会信用代码 */\nexport const USCC_S = z.string().regex(_USCC_S, { error: \"统一社会信用代码格式错误\" });\n\nconst _USCC = /^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;\n/** 统一社会信用代码 - 15位/18位/20位数字/字母 */\nexport const USCC = z.string().regex(_USCC, { error: \"统一社会信用代码格式错误\" });\n\nconst _thunder = /^thunderx?:\\/\\/[a-zA-Z\\d]+=$/;\n/** 迅雷链接 */\nexport const thunder = z.string().regex(_thunder, { error: \"迅雷链接格式错误\" });\n\nconst _dirPathWindows = /^[a-z]:\\\\(?:\\w+\\\\?)*$/i;\n/** windows 文件夹路径 */\nexport const dirPathWindows = z.string().regex(_dirPathWindows, { error: \"路径格式错误\" });\n\nconst _filePathWindows = /^[a-z]:\\\\(?:\\w+\\\\)*\\w+\\.\\w+$/i;\n/** windows 文件路径 */\nexport const filePathWindows = z.string().regex(_filePathWindows, { error: \"路径格式错误\" });\n\nconst _dirPathLinux = /^\\/(?:[^\\\\/\\s]+\\/)*$/;\n/** linux 文件夹路径 */\nexport const dirPathLinux = z.string().regex(_dirPathLinux, { error: \"路径格式错误\" });\n\nconst _filePathLinux = /^(\\/$|\\/(?:[^\\\\/\\s]+\\/)*[^\\\\/\\s]+$)/;\n/** linux 文件路径 */\nexport const filePathLinux = z.string().regex(_filePathLinux, { error: \"路径格式错误\" });\n\nconst _carCodeGreen = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](([DF]((?![IO])[a-zA-Z0-9](?![IO]))\\d{4})|(\\d{5}[DF]))$/;\n/** 车牌号 新能源 */\nexport const carCodeGreen = z.string().regex(_carCodeGreen, { error: \"车牌号格式错误\" });\n\nconst _carCodeNotGreen = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/;\n/** 车牌号 非新能源 */\nexport const carCodeNotGreen = z.string().regex(_carCodeNotGreen, { error: \"车牌号格式错误\" });\n\nconst _chinaProvince = /^安徽|澳门|北京|重庆|福建|甘肃|广东|广西|贵州|海南|河北|河南|黑龙江|湖北|湖南|吉林|江苏|江西|辽宁|内蒙古|宁夏|青海|山东|山西|陕西|上海|四川|台湾|天津|西藏|香港|新疆|云南|浙江$/;\n/** 中国省份 */\nexport const chinaProvince = z.string().regex(_chinaProvince, { error: \"应为中国省份\" });\n\nconst _nation = /^汉族|蒙古族|回族|藏族|维吾尔族|苗族|彝族|壮族|布依族|朝鲜族|满族|侗族|瑶族|白族|土家族|哈尼族|哈萨克族|傣族|黎族|傈僳族|佤族|畲族|高山族|拉祜族|水族|东乡族|纳西族|景颇族|柯尔克孜族|土族|达斡尔族|仫佬族|羌族|布朗族|撒拉族|毛南族|仡佬族|锡伯族|阿昌族|普米族|塔吉克族|怒族|乌孜别克族|俄罗斯族|鄂温克族|德昂族|保安族|裕固族|京族|塔塔尔族|独龙族|鄂伦春族|赫哲族|门巴族|珞巴族|基诺族|其它未识别民族|外国人入中国籍$/;\n/** 民族 */\nexport const nation = z.string().regex(_nation, { error: \"应为民族\" });\n"],"mappings":";;;;AAGA,MAAa,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;;AAGvD,MAAa,SAAS,EAAE,QAAQ;;AAEhC,MAAa,cAAc,EAAE,QAAQ,GAAG,CAAC,SAAS;;AAElD,MAAa,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE;;AAE9C,MAAa,mBAAmB,EAAE,QAAQ,CAAC,SAAS;;AAGpD,MAAa,SAAS,EAAE,QAAQ;;AAEhC,MAAa,mBAAmB,OAAO,SAAS;;AAEhD,MAAa,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,QAAQ,CAAC;;AAEpD,MAAa,gBAAgB,IAAI,SAAS;;AAE1C,MAAa,UAAU,IAAI,YAAY,EAAE,OAAO,SAAS,CAAC;;AAE1D,MAAa,oBAAoB,QAAQ,SAAS;;AAGlD,MAAa,UAAU,EAAE,SAAS;;AAElC,MAAa,oBAAoB,EAAE,SAAS,CAAC,SAAS;AAEtD,MAAa,SAAS,EAAE,QAAQ;AAEhC,MAAa,SAAS,EAAE,QAAQ;AAEhC,MAAa,MAAM,EAAE,KAAK;AAE1B,MAAa,UAAU,EAAE,SAAS;AAElC,MAAa,QAAQ,EAAE,OAAO;;;;ACtC9B,MAAa,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEhE,MAAa,eAAe,GAAG,SAAS;;;;ACFxC,MAAM,YAAY;;AAElB,MAAa,WAAW,EAAE,QAAQ,CAAC,MAAM,WAAW,EAAE,OAAO,QAAQ,CAAC;AAEtE,MAAM,qBAAqB;;AAE3B,MAAa,oBAAoB,EAAE,QAAQ,CAAC,MAAM,oBAAoB,EAAE,OAAO,UAAU,CAAC;AAE1F,MAAM,qBAAqB;;AAE3B,MAAa,oBAAoB,EAAE,QAAQ,CAAC,MAAM,oBAAoB,EAAE,OAAO,UAAU,CAAC;AAE1F,MAAM,gBAAgB;;AAEtB,MAAa,eAAe,EAAE,QAAQ,CAAC,MAAM,eAAe,EAAE,OAAO,UAAU,CAAC;AAEhF,MAAM,kBAAkB;;AAExB,MAAa,iBAAiB,EAAE,QAAQ,CAAC,MAAM,iBAAiB,EAAE,OAAO,aAAa,CAAC;AAEvF,MAAM,+BAA+B;;AAErC,MAAa,8BAA8B,EAAE,QAAQ,CAAC,MAAM,8BAA8B,EAAE,OAAO,WAAW,CAAC;AAE/G,MAAM,iCAAiC;;AAEvC,MAAa,gCAAgC,EAAE,QAAQ,CAAC,MAAM,gCAAgC,EAAE,OAAO,WAAW,CAAC;AAEnH,MAAM,6BAA6B;;AAEnC,MAAa,4BAA4B,EAAE,QAAQ,CAAC,MAAM,4BAA4B,EAAE,OAAO,WAAW,CAAC;AAE3G,MAAM,+BAA+B;;AAErC,MAAa,8BAA8B,EAAE,QAAQ,CAAC,MAAM,8BAA8B,EAAE,OAAO,YAAY,CAAC;AAEhH,MAAM,gBAAgB;;AAEtB,MAAa,eAAe,EAAE,QAAQ,CAAC,MAAM,eAAe,EAAE,OAAO,UAAU,CAAC;AAEhF,MAAM,cAAc;;AAEpB,MAAa,aAAa,EAAE,QAAQ,CAAC,MAAM,aAAa,EAAE,OAAO,WAAW,CAAC;AAE7E,MAAM,YAAY;;AAElB,MAAa,WAAW,EAAE,QAAQ,CAAC,MAAM,WAAW,EAAE,OAAO,WAAW,CAAC;;AAGzE,MAAa,gBAAgB,WAAW,IAAI,SAAS;;;;ACjDrD,MAAM,SAAS;;AAEf,MAAa,QAAQ,EAAE,QAAQ,CAAC,MAAM,QAAQ,EAAE,OAAO,YAAY,CAAC;AAEpE,MAAM,aAAa;;AAEnB,MAAa,YAAY,EAAE,QAAQ,CAAC,MAAM,YAAY,EAAE,OAAO,YAAY,CAAC;AAE5E,MAAM,SAAS;;AAEf,MAAa,QAAQ,EAAE,QAAQ,CAAC,MAAM,QAAQ,EAAE,OAAO,YAAY,CAAC;AAEpE,MAAM,eAAe;;AAErB,MAAa,cAAc,EAAE,QAAQ,CAAC,MAAM,cAAc,EAAE,OAAO,UAAU,CAAC;;AAG9E,MAAa,OAAO,EAAE,QAAQ,CAAC,MAAM,eAAe,EAAE,OAAO,aAAa,CAAC;AAE3E,MAAM,MAAM;;AAEZ,MAAa,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,EAAE,OAAO,YAAY,CAAC;AAE9D,MAAM,QAAQ;;AAEd,MAAa,OAAO,EAAE,QAAQ,CAAC,MAAM,OAAO,EAAE,OAAO,UAAU,CAAC;AAEhE,MAAM,YAAY;;AAElB,MAAa,WAAW,EAAE,QAAQ,CAAC,MAAM,WAAW,EAAE,OAAO,UAAU,CAAC;AAExE,MAAM,UAAU;;AAEhB,MAAa,SAAS,EAAE,QAAQ,CAAC,MAAM,SAAS,EAAE,OAAO,gBAAgB,CAAC;AAE1E,MAAM,QAAQ;;AAEd,MAAa,OAAO,EAAE,QAAQ,CAAC,MAAM,OAAO,EAAE,OAAO,gBAAgB,CAAC;AAEtE,MAAM,WAAW;;AAEjB,MAAa,UAAU,EAAE,QAAQ,CAAC,MAAM,UAAU,EAAE,OAAO,YAAY,CAAC;AAExE,MAAM,kBAAkB;;AAExB,MAAa,iBAAiB,EAAE,QAAQ,CAAC,MAAM,iBAAiB,EAAE,OAAO,UAAU,CAAC;AAEpF,MAAM,mBAAmB;;AAEzB,MAAa,kBAAkB,EAAE,QAAQ,CAAC,MAAM,kBAAkB,EAAE,OAAO,UAAU,CAAC;AAEtF,MAAM,gBAAgB;;AAEtB,MAAa,eAAe,EAAE,QAAQ,CAAC,MAAM,eAAe,EAAE,OAAO,UAAU,CAAC;AAEhF,MAAM,iBAAiB;;AAEvB,MAAa,gBAAgB,EAAE,QAAQ,CAAC,MAAM,gBAAgB,EAAE,OAAO,UAAU,CAAC;AAElF,MAAM,gBAAgB;;AAEtB,MAAa,eAAe,EAAE,QAAQ,CAAC,MAAM,eAAe,EAAE,OAAO,WAAW,CAAC;AAEjF,MAAM,mBAAmB;;AAEzB,MAAa,kBAAkB,EAAE,QAAQ,CAAC,MAAM,kBAAkB,EAAE,OAAO,WAAW,CAAC;AAEvF,MAAM,iBAAiB;;AAEvB,MAAa,gBAAgB,EAAE,QAAQ,CAAC,MAAM,gBAAgB,EAAE,OAAO,UAAU,CAAC;AAElF,MAAM,UAAU;;AAEhB,MAAa,SAAS,EAAE,QAAQ,CAAC,MAAM,SAAS,EAAE,OAAO,QAAQ,CAAC"}
package/metadata.json CHANGED
@@ -12,11 +12,14 @@
12
12
  "arrayPick",
13
13
  "arrayReplace",
14
14
  "arraySplit",
15
+ "arrayUnzip",
16
+ "arrayZip",
17
+ "arrayZipToObject",
15
18
  "cloneDeep",
16
19
  "enumEntries",
17
20
  "enumKeys",
18
- "enumTypeCheck",
19
21
  "enumValues",
22
+ "getTimeZone",
20
23
  "isAbortSignal",
21
24
  "isArray",
22
25
  "isAsyncFunction",
@@ -26,6 +29,7 @@
26
29
  "isBoolean",
27
30
  "isClass",
28
31
  "isDate",
32
+ "isEnumeration",
29
33
  "isEqual",
30
34
  "isError",
31
35
  "isFalsy",
@@ -33,11 +37,13 @@
33
37
  "isFile",
34
38
  "isFunction",
35
39
  "isGeneratorFunction",
40
+ "isIOSMobile",
36
41
  "isInfinity",
37
42
  "isInfinityLike",
38
43
  "isInteger",
39
44
  "isIterable",
40
45
  "isMap",
46
+ "isMobile",
41
47
  "isNaN",
42
48
  "isNegativeInteger",
43
49
  "isNull",
@@ -51,6 +57,7 @@
51
57
  "isSet",
52
58
  "isString",
53
59
  "isSymbol",
60
+ "isTablet",
54
61
  "isTypedArray",
55
62
  "isURLSearchParams",
56
63
  "isUndefined",
@@ -58,13 +65,15 @@
58
65
  "isWeakSet",
59
66
  "isWebSocket",
60
67
  "isWindow",
68
+ "isWithinInterval",
61
69
  "mapEntries",
62
70
  "objectAssign",
63
71
  "objectCrush",
64
72
  "objectEntries",
73
+ "objectInvert",
65
74
  "objectKeys",
75
+ "objectOmit",
66
76
  "objectPick",
67
- "objectSwitch",
68
77
  "objectValues",
69
78
  "rowsToTree",
70
79
  "stringInitialCase",
@@ -112,6 +121,8 @@
112
121
  "empty",
113
122
  "filePathLinux",
114
123
  "filePathWindows",
124
+ "id",
125
+ "idAllowEmpty",
115
126
  "int",
116
127
  "intAllowEmpty",
117
128
  "link",
@@ -142,7 +153,8 @@
142
153
  "unknown"
143
154
  ],
144
155
  "enums": [
145
- "BREAK_POINT_TOKEN_ENUM"
156
+ "BREAK_POINT_TOKEN_ENUM",
157
+ "MIME"
146
158
  ],
147
159
  "hooks": {
148
160
  "alova": [
package/package.json CHANGED
@@ -4,8 +4,8 @@
4
4
  "description": "pawover's kit",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
- "version": "0.0.0-beta.2",
8
- "packageManager": "pnpm@10.20.0",
7
+ "version": "0.0.0-beta.20",
8
+ "packageManager": "pnpm@10.28.2",
9
9
  "engines": {
10
10
  "node": ">=22.20.0"
11
11
  },
@@ -37,6 +37,7 @@
37
37
  "./package.json": "./package.json"
38
38
  },
39
39
  "scripts": {
40
+ "test": "vitest",
40
41
  "build": "tsdown && pnpm build:metadata",
41
42
  "build:metadata": "node scripts/metadata.ts",
42
43
  "public": "pnpm build && npm publish --access public",
@@ -52,32 +53,34 @@
52
53
  "lib:up": "taze -I -r --exclude pnpm"
53
54
  },
54
55
  "dependencies": {
55
- "alova": "^3.4.1",
56
+ "alova": "^3.5.0",
56
57
  "mathjs": "^15.1.0",
57
- "react": "^19.2.3",
58
- "vite": "^7.3.0",
59
- "vue": "^3.5.26",
60
- "zod": "^4.2.1"
58
+ "react": "^19.2.4",
59
+ "vite": "^7.3.1",
60
+ "vue": "^3.5.27",
61
+ "zod": "^4.3.6"
61
62
  },
62
63
  "devDependencies": {
63
- "@pawover/eslint-rules": "^0.0.0-alpha.24",
64
- "@pawover/types": "^0.0.0-alpha.8",
65
- "@stylistic/eslint-plugin": "^5.6.1",
64
+ "@pawover/eslint-rules": "^0.0.0-beta.2",
65
+ "@pawover/types": "^0.0.0-alpha.10",
66
+ "@stylistic/eslint-plugin": "^5.7.1",
66
67
  "@types/fs-extra": "^11.0.4",
67
- "@types/node": "^25.0.3",
68
- "@types/react": "^19.2.7",
68
+ "@types/node": "^25.2.0",
69
+ "@types/react": "^19.2.10",
69
70
  "eslint": "^9.39.2",
70
- "eslint-plugin-antfu": "^3.1.1",
71
+ "eslint-plugin-antfu": "^3.1.3",
71
72
  "fs-extra": "^11.3.3",
72
- "prettier": "^3.7.4",
73
+ "prettier": "^3.8.1",
73
74
  "radashi": "^12.7.1",
74
75
  "rimraf": "^6.1.2",
75
76
  "taze": "^19.9.2",
77
+ "ts-toolbelt": "^9.6.0",
76
78
  "tsdown": "^0.17.4",
77
- "type-fest": "^5.3.1",
79
+ "type-fest": "^5.4.3",
78
80
  "typescript": "^5.9.3",
79
- "typescript-eslint": "^8.50.1",
80
- "vue-tsc": "^3.2.1"
81
+ "typescript-eslint": "^8.54.0",
82
+ "vitest": "^4.0.18",
83
+ "vue-tsc": "^3.2.4"
81
84
  },
82
85
  "peerDependencies": {
83
86
  "alova": ">=3.3.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"enums.d.ts","names":[],"sources":["../src/enums/grid.ts"],"sourcesContent":[],"mappings":";KAAY,sBAAA,GAAyB,oBAAoB;AAAzD;AAEa,cAAA,sBAkBH,EAAA"}
package/dist/enums.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"enums.js","names":[],"sources":["../src/enums/grid.ts"],"sourcesContent":["export type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;\n/** 屏幕响应断点 token 配置 */\nexport const BREAK_POINT_TOKEN_ENUM = {\n XS: 576,\n XSMin: 576,\n XSMax: 767,\n SM: 768,\n SMMin: 768,\n SMMax: 991,\n MD: 992,\n MDMin: 992,\n MDMax: 1199,\n LG: 1200,\n LGMin: 1200,\n LGMax: 1599,\n XL: 1600,\n XLMin: 1600,\n XLMax: 1919,\n XXL: 1920,\n XXLMin: 1920,\n} as const;\n"],"mappings":";;AAEA,MAAa,yBAAyB;CACpC,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,IAAI;CACJ,OAAO;CACP,OAAO;CACP,KAAK;CACL,QAAQ;CACT"}