@antsoo-lib/utils 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -127,6 +127,7 @@ __export(index_exports, {
127
127
  isWindow: () => isWindow,
128
128
  isXMLString: () => isXMLString,
129
129
  multiplyFn: () => multiplyFn,
130
+ noop: () => noop,
130
131
  removeCookie: () => removeCookie,
131
132
  setCookie: () => setCookie,
132
133
  subtractFn: () => subtractFn,
@@ -585,6 +586,8 @@ function generateUniqueId(prefix) {
585
586
  const random = Math.random().toString(36).substring(2, 8);
586
587
  return `${prefix || ""}${timestamp}_${random}`;
587
588
  }
589
+ var noop = () => {
590
+ };
588
591
 
589
592
  // src/env.ts
590
593
  function env(appEnv) {
@@ -698,6 +701,7 @@ function env(appEnv) {
698
701
  isWindow,
699
702
  isXMLString,
700
703
  multiplyFn,
704
+ noop,
701
705
  removeCookie,
702
706
  setCookie,
703
707
  subtractFn,
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts","../src/date.ts","../src/math.ts","../src/is.ts","../src/format.ts","../src/cookie.ts","../src/function.ts","../src/env.ts"],"sourcesContent":["export * from './src/date'\nexport * from './src/math'\nexport * from './src/format'\nexport * from './src/cookie'\nexport * from './src/is'\nexport * from './src/function'\nexport * from './src/env'\n","import dayjs from 'dayjs'\nimport type { Dayjs } from 'dayjs'\n\n/**\n * 校验日期是否与指定日期相同或晚于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或晚于指定日期\n */\nexport function isSameOrAfterDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isAfter(dayjs(day), 'day')\n}\n\n/**\n * 校验日期是否与指定日期相同或早于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或早于指定日期\n */\nexport function isSameOrBeforeDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isBefore(dayjs(day), 'day')\n}\n","import { add, bignumber, divide, multiply, subtract } from 'mathjs'\n\nimport { isFinite } from './is'\n\n// 含税金额 = 重量 * 含税单价\nexport const computeTaxAmountFn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税金额 = 重量 * 含税单价(负数反向四舍五入)\nexport const computeTaxAmount2Fn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税单价 = 含税金额 / 重量\nexport const computePriceFn = (taxAmount: number, weight: number): number => {\n if (!isFinite(taxAmount) || !isFinite(weight) || weight <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(taxAmountBig, weightBig))\n return value\n}\n\n// 重量 = 含税金额 / 含税单价\nexport const computeWeightFn = (taxAmount: number, price: number): number => {\n if (!isFinite(taxAmount) || !isFinite(price) || price <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const priceBig = bignumber(price)\n const value = Number(divide(taxAmountBig, priceBig))\n return value\n}\n\n// 含税单价 = 无税单价 * (1 + 税率)\nexport const computePrice2Fn = (noTaxPrice: number, taxRate: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(taxRate)) return 0\n const noTaxPriceBig = bignumber(noTaxPrice)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(multiply(noTaxPriceBig, add(1, taxRateBig)))\n return value\n}\n\n// 无税单价 = 含税单价 / (1 + 税率)\nexport const computeNoTaxPriceFn = (price: number, taxRate: number): number => {\n if (!isFinite(price) || !isFinite(taxRate)) return 0\n const priceBig = bignumber(price)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(priceBig, add(1, taxRateBig)))\n return value\n}\n\n// 税率 = 含税单价 / 无税单价 - 1\nexport const computeTaxRateFn = (price: number, noTaxPrice: number): number => {\n if (!isFinite(price) || !isFinite(noTaxPrice)) return 0\n const priceBig = bignumber(price)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(subtract(divide(priceBig, noTaxPriceBig), 1))\n return value\n}\n\n// 无税单价 = 无税金额 / 重量\nexport const computeNoTaxPrice2Fn = (noTaxAmount: number, weight: number): number => {\n if (!isFinite(noTaxAmount) || !isFinite(weight) || weight <= 0) return 0\n const noTaxAmountBig = bignumber(noTaxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(noTaxAmountBig, weightBig))\n return value\n}\n\n// 无税金额 = 重量 * 无税单价\nexport const computeNoTaxAmountFn = (weight: number, noTaxPrice: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(multiply(weightBig, noTaxPriceBig))\n return value\n}\n\n// 无税金额 = 含税金额 / (1 + 税率)\nexport const computeNoTaxAmount2Fn = (taxAmount: number, taxRate: number): number => {\n if (!isFinite(taxAmount) || !isFinite(taxRate)) return 0\n const taxAmountBig = bignumber(taxAmount)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(taxAmountBig, add(1, taxRateBig)))\n return value\n}\n\n// 税额 = 含税金额 - 无税金额\nexport const computeTaxFn = (taxAmount: number, noTaxAmount: number): number => {\n const taxAmountBig = bignumber(taxAmount || 0)\n const noTaxAmountBig = bignumber(noTaxAmount || 0)\n const value = Number(subtract(taxAmountBig, noTaxAmountBig))\n return value\n}\n\n// 数量 = 重量 / 单重\nexport const computeGoodsNumFn = (weight: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(weight) || weight1 <= 0) return 0\n const weightBig = bignumber(weight)\n const weight1Big = bignumber(weight1)\n const value = Number(divide(weightBig, weight1Big))\n return value\n}\n\n// 重量 = 数量 * 单重\nexport const computeGoodsWeightFn = (num: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(num) || weight1 <= 0) return 0\n const numBig = bignumber(num)\n const weight1Big = bignumber(weight1)\n const value = Number(multiply(numBig, weight1Big))\n return value\n}\n\n// ==================== 通用:加减乘除(BigNumber 计算) ====================\n// 加法:a + b\nexport const addFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(add(aBig, bBig))\n}\n\n/**\n * 合计\n * @param arr 数组\n * @param key 键名\n * @returns 合计值\n */\nexport function sumBy<T>(arr: T[], key: keyof T): number {\n return arr.reduce((acc, cur) => addFn(acc, Number(cur[key])), 0)\n}\n\n// 减法:a - b\nexport const subtractFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(subtract(aBig, bBig))\n}\n\n// 乘法:a × b\nexport const multiplyFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(multiply(aBig, bBig))\n}\n\n// 除法:a ÷ b(b <= 0 时返回 0)\nexport const divideFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b) || b === 0) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(divide(aBig, bBig))\n}\n","import {\n isArguments as _isArguments,\n isArray as _isArray,\n isArrayBuffer as _isArrayBuffer,\n isArrayLike as _isArrayLike,\n isArrayLikeObject as _isArrayLikeObject,\n isBoolean as _isBoolean,\n isDate as _isDate,\n isElement as _isElement,\n isEqual as _isEqual,\n isError as _isError,\n isFinite as _isFinite,\n isInteger as _isInteger,\n isLength as _isLength,\n isMap as _isMap,\n isMatch as _isMatch,\n isNative as _isNative,\n isNull as _isNull,\n isObjectLike as _isObjectLike,\n isPlainObject as _isPlainObject,\n isRegExp as _isRegExp,\n isSafeInteger as _isSafeInteger,\n isSet as _isSet,\n isSymbol as _isSymbol,\n isTypedArray as _isTypedArray,\n isWeakMap as _isWeakMap,\n isWeakSet as _isWeakSet,\n isEmpty as lodashIsEmpty,\n isFunction as lodashIsFunction,\n isNaN as lodashIsNaN,\n isNil as lodashIsNil,\n isNumber as lodashIsNumber,\n isObject as lodashIsObject,\n isString as lodashIsString,\n isUndefined as lodashIsUndefined,\n} from 'lodash-es'\n\n// 类型定义\ntype AnyFunction = (...args: any[]) => any\ntype AnyObject = Record<string, any>\ntype Primitive = string | number | boolean | symbol | bigint | null | undefined\n\n/**\n * 获取值的类型标签\n */\nconst getTag = (value: unknown): string => {\n return Object.prototype.toString.call(value)\n}\n\n/**\n * 检查是否为数组 - 使用 lodash-es 的实现\n */\nexport const isArray: (value: unknown) => value is any[] = _isArray\n\n/**\n * 检查是否为 ArrayBuffer\n */\nexport const isArrayBuffer: (value: unknown) => value is ArrayBuffer = _isArrayBuffer\n\n/**\n * 检查是否为 AsyncFunction\n */\nexport function isAsyncFunction(value: unknown): value is AnyFunction {\n return (\n getTag(value) === '[object AsyncFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'AsyncFunction')\n )\n}\n\n/**\n * 检查是否为 BigInt\n */\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint' || getTag(value) === '[object BigInt]'\n}\n\n/**\n * 检查是否为 Blob 对象(浏览器环境)\n */\nexport function isBlob(value: unknown): value is Blob {\n return typeof Blob !== 'undefined' && value instanceof Blob\n}\n\n/**\n * 检查是否为布尔值 - 使用 lodash-es 的实现\n */\nexport const isBoolean: (value: unknown) => value is boolean = _isBoolean\n\n/**\n * 检查是否为类数组\n */\nexport const isArrayLike: (value: unknown) => boolean = _isArrayLike\n\n/**\n * 检查是否为类数组对象\n */\nexport const isArrayLikeObject: (value: unknown) => boolean = _isArrayLikeObject\n\n/**\n * 检查是否为类数组参数\n */\nexport const isArguments: (value: unknown) => boolean = _isArguments\n\n/**\n * 检查是否为 Date 对象 - 使用 lodash-es 的实现\n */\nexport const isDate: (value: unknown) => value is Date = _isDate\n\n/**\n * 检查是否为 DOM 元素 - 使用 lodash-es 的实现\n */\nexport const isElement: (value: unknown) => boolean = _isElement\n\n/**\n * 检查是否为空值 - 使用 lodash-es 的实现\n */\nexport const isEmpty: (value: unknown) => boolean = lodashIsEmpty\n\n/**\n * 检查是否严格相等 - 使用 lodash-es 的实现\n */\nexport const isEqual: (value: unknown, other: unknown) => boolean = _isEqual\n\n/**\n * 检查是否为 Error 对象 - 使用 lodash-es 的实现\n */\nexport const isError: (value: unknown) => value is Error = _isError\n\n/**\n * 检查是否为 File 对象(浏览器环境)\n */\nexport function isFile(value: unknown): value is File {\n return typeof File !== 'undefined' && value instanceof File\n}\n\n/**\n * 检查是否为 FormData 对象(浏览器环境)\n */\nexport function isFormData(value: unknown): value is FormData {\n return typeof FormData !== 'undefined' && value instanceof FormData\n}\n\n/**\n * 检查是否为函数 - 使用 lodash-es 的实现\n */\nexport const isFunction: (value: unknown) => value is AnyFunction = lodashIsFunction\n\n/**\n * 检查是否为 GeneratorFunction\n */\nexport function isGeneratorFunction(value: unknown): value is GeneratorFunction {\n return (\n getTag(value) === '[object GeneratorFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'GeneratorFunction')\n )\n}\n\n/**\n * 检查是否为整数 - 使用 lodash-es 的实现\n */\nexport const isInteger: (value: unknown) => boolean = _isInteger\n\n/**\n * 检查是否为有限数 - 使用 lodash-es 的实现\n */\nexport const isFinite: (value: unknown) => boolean = _isFinite\n\n/**\n * 检查是否为有效长度 - 使用 lodash-es 的实现\n */\nexport const isLength: (value: unknown) => boolean = _isLength\n\n/**\n * 检查是否为 Map - 使用 lodash-es 的实现\n */\nexport const isMap: (value: unknown) => value is Map<any, any> = _isMap\n\n/**\n * 检查是否为 NaN - 使用 lodash-es 的实现\n */\nexport const isNaN: (value: unknown) => boolean = lodashIsNaN\n\n/**\n * 检查是否为 null 或 undefined - 使用 lodash-es 的实现\n */\nexport const isNil: (value: unknown) => value is null | undefined = lodashIsNil\n\n/**\n * 检查是否为 null - 使用 lodash-es 的实现\n */\nexport const isNull: (value: unknown) => value is null = _isNull\n\n/**\n * 检查是否为数字 - 使用 lodash-es 的实现\n */\nexport const isNumber: (value: unknown) => value is number = lodashIsNumber\n\n/**\n * 检查是否为对象 - 使用 lodash-es 的实现\n */\nexport const isObject: (value: unknown) => value is object = lodashIsObject\n\n/**\n * 检查是否为类对象 - 使用 lodash-es 的实现\n */\nexport const isObjectLike: (value: unknown) => boolean = _isObjectLike\n\n/**\n * 检查是否为普通对象 - 使用 lodash-es 的实现\n */\nexport const isPlainObject: (value: unknown) => boolean = _isPlainObject\n\n/**\n * 检查是否匹配对象 - 使用 lodash-es 的实现\n */\nexport const isMatch: (object: object, source: object) => boolean = _isMatch\n\n/**\n * 检查是否为原生函数 - 使用 lodash-es 的实现\n */\nexport const isNative: (value: unknown) => boolean = _isNative\n\n/**\n * 检查是否为浏览器环境\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined'\n}\n\n/**\n * 检查是否为 Promise\n */\nexport function isPromise(value: unknown): value is Promise<any> {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as any).then === 'function'\n )\n}\n\n/**\n * 检查是否为 RegExp - 使用 lodash-es 的实现\n */\nexport const isRegExp: (value: unknown) => value is RegExp = _isRegExp\n\n/**\n * 检查是否为安全整数 - 使用 lodash-es 的实现\n */\nexport const isSafeInteger: (value: unknown) => boolean = _isSafeInteger\n\n/**\n * 检查是否为 Set - 使用 lodash-es 的实现\n */\nexport const isSet: (value: unknown) => value is Set<any> = _isSet\n\n/**\n * 检查是否为字符串 - 使用 lodash-es 的实现\n */\nexport const isString: (value: unknown) => value is string = lodashIsString\n\n/**\n * 检查是否为 Symbol - 使用 lodash-es 的实现\n */\nexport const isSymbol: (value: unknown) => value is symbol = _isSymbol\n\n/**\n * 检查是否为 TypedArray - 使用 lodash-es 的实现\n */\nexport const isTypedArray: (value: unknown) => boolean = _isTypedArray\n\n/**\n * 检查是否为 undefined - 使用 lodash-es 的实现\n */\nexport const isUndefined: (value: unknown) => value is undefined = lodashIsUndefined\n\n/**\n * 检查是否为 URL 对象(浏览器环境)\n */\nexport function isURL(value: unknown): value is URL {\n return typeof URL !== 'undefined' && value instanceof URL\n}\n\n/**\n * 检查是否为 URLSearchParams 对象(浏览器环境)\n */\nexport function isURLSearchParams(value: unknown): value is URLSearchParams {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams\n}\n\n/**\n * 检查是否为 WeakMap - 使用 lodash-es 的实现\n */\nexport const isWeakMap: (value: unknown) => value is WeakMap<object, any> = _isWeakMap\n\n/**\n * 检查是否为 WeakSet - 使用 lodash-es 的实现\n */\nexport const isWeakSet: (value: unknown) => value is WeakSet<object> = _isWeakSet\n\n/**\n * 检查是否为 Window 对象(浏览器环境)\n */\nexport function isWindow(value: unknown): value is Window {\n return isBrowser() && value === window\n}\n\n/**\n * 检查是否为 Document 对象(浏览器环境)\n */\nexport function isDocument(value: unknown): value is Document {\n return isBrowser() && value === document\n}\n\n/**\n * 检查是否为 Event 对象(浏览器环境)\n */\nexport function isEvent(value: unknown): value is Event {\n return isBrowser() && value instanceof Event\n}\n\n/**\n * 检查是否为 Primitive 类型\n */\nexport function isPrimitive(value: unknown): value is Primitive {\n return (\n isString(value) ||\n isNumber(value) ||\n isBoolean(value) ||\n isSymbol(value) ||\n isBigInt(value) ||\n isNull(value) ||\n isUndefined(value)\n )\n}\n\n/**\n * 检查是否为 Iterable 对象\n */\nexport function isIterable(value: unknown): value is Iterable<any> {\n return value != null && typeof (value as any)[Symbol.iterator] === 'function'\n}\n\n/**\n * 检查是否为 AsyncIterable 对象\n */\nexport function isAsyncIterable(value: unknown): value is AsyncIterable<any> {\n return value != null && typeof (value as any)[Symbol.asyncIterator] === 'function'\n}\n\n/**\n * 检查是否为 Iterator 对象\n */\nexport function isIterator(value: unknown): value is Iterator<any> {\n return value != null && typeof (value as any).next === 'function'\n}\n\n/**\n * 检查是否为 Array Iterator\n */\nexport function isArrayIterator(value: unknown): boolean {\n return getTag(value) === '[object Array Iterator]'\n}\n\n/**\n * 检查是否为 Map Iterator\n */\nexport function isMapIterator(value: unknown): boolean {\n return getTag(value) === '[object Map Iterator]'\n}\n\n/**\n * 检查是否为 Set Iterator\n */\nexport function isSetIterator(value: unknown): boolean {\n return getTag(value) === '[object Set Iterator]'\n}\n\n/**\n * 检查是否为 String Iterator\n */\nexport function isStringIterator(value: unknown): boolean {\n return getTag(value) === '[object String Iterator]'\n}\n\n/**\n * 检查是否为可序列化的 JSON 值\n */\nexport function isJSONSerializable(value: unknown): boolean {\n if (isPrimitive(value)) {\n return !isUndefined(value)\n }\n\n if (isArray(value)) {\n return value.every(isJSONSerializable)\n }\n\n if (isPlainObject(value)) {\n return Object.values(value as AnyObject).every(isJSONSerializable)\n }\n\n return false\n}\n\n/**\n * 检查是否为有效的数组索引\n */\nexport function isArrayIndex(value: unknown): boolean {\n if (!isNumber(value) && !isString(value)) {\n return false\n }\n\n const num = Number(value)\n return (\n isInteger(num) && num >= 0 && num < Number.MAX_SAFE_INTEGER && String(num) === String(value)\n )\n}\n\n/**\n * 检查是否为有效的 Email 地址\n */\nexport function isEmail(value: unknown): value is string {\n if (!isString(value)) return false\n\n const emailRegex = /^[^\\s@]+@[^\\s@][^\\s.@]*\\.[^\\s@]+$/\n return emailRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 URL 字符串\n */\nexport function isURLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new URL(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的手机号码(中国)\n */\nexport function isChinesePhone(value: unknown): value is string {\n if (!isString(value)) return false\n\n const phoneRegex = /^1[3-9]\\d{9}$/\n return phoneRegex.test(value)\n}\n\n/**\n * 检查是否为有效的身份证号码(中国)\n */\nexport function isChineseIDCard(value: unknown): value is string {\n if (!isString(value)) return false\n\n const idCardRegex =\n /^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|1[0-2])(?:[0-2][1-9]|10|20|30|31)\\d{3}[0-9X]$/i\n if (!idCardRegex.test(value)) return false\n\n // 验证校验码\n const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]\n const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']\n\n let sum = 0\n for (let i = 0; i < 17; i++) {\n sum += Number.parseInt(value[i]) * weights[i]\n }\n\n const checkCode = checkCodes[sum % 11]\n return checkCode === value[17].toUpperCase()\n}\n\n/**\n * 检查是否为有效的邮政编码(中国)\n */\nexport function isChinesePostalCode(value: unknown): value is string {\n if (!isString(value)) return false\n\n const postalCodeRegex = /^[1-9]\\d{5}$/\n return postalCodeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 JSON 字符串\n */\nexport function isJSONString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n JSON.parse(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为 Base64 字符串\n */\nexport function isBase64(value: unknown): value is string {\n if (!isString(value)) return false\n\n const base64Regex = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i\n return base64Regex.test(value)\n}\n\n/**\n * 检查是否为 Hex 颜色值\n */\nexport function isHexColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hexColorRegex = /^#?[a-f0-9]{6}$|^#?[a-f0-9]{3}$/i\n return hexColorRegex.test(value)\n}\n\n/**\n * 检查是否为 RGB 颜色值\n */\nexport function isRGBColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const rgbColorRegex = /^rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)$/\n return rgbColorRegex.test(value)\n}\n\n/**\n * 检查是否为 HSL 颜色值\n */\nexport function isHSLColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hslColorRegex = /^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/\n return hslColorRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期字符串\n */\nexport function isDateString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const date = new Date(value)\n return !isNaN(date.getTime())\n}\n\n/**\n * 检查是否为有效的时间字符串\n */\nexport function isTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const timeRegex = /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/\n return timeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期时间字符串\n */\nexport function isDateTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?$/\n return dateTimeRegex.test(value) && !isNaN(new Date(value).getTime())\n}\n\n/**\n * 检查是否为有效的时区\n */\nexport function isTimezone(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n Intl.DateTimeFormat(undefined, { timeZone: value })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的正则表达式字符串\n */\nexport function isRegExpString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new RegExp(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 XML 字符串\n */\nexport function isXMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const xmlDoc = parser.parseFromString(value, 'application/xml')\n return xmlDoc.getElementsByTagName('parsererror').length === 0\n }\n return false\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 HTML 字符串\n */\nexport function isHTMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const htmlDoc = parser.parseFromString(value, 'text/html')\n return htmlDoc.body.children.length > 0\n }\n return false\n } catch {\n return false\n }\n}\n","/**\n * 格式化数字\n * @param number 输入的数字\n * @param decimals 保留小数位数\n * @param thousands_sep 千分位分隔符\n * @returns 格式化后的字符串\n */\nexport function formatNumber(\n number: number | string | null | undefined,\n decimals = 2,\n thousands_sep = ',',\n): string {\n if (number === null || number === undefined || number === '') return ''\n\n let num = Number.parseFloat(String(number))\n if (Number.isNaN(num)) return ''\n\n num = Math.round(num * 10 ** decimals) / 10 ** decimals\n const numStr = num.toFixed(decimals)\n\n const parts = numStr.split('.')\n if (thousands_sep) {\n const re = /(-?\\d+)(\\d{3})/\n while (re.test(parts[0])) {\n parts[0] = parts[0].replace(re, `$1${thousands_sep}$2`)\n }\n }\n\n return parts.join('.')\n}\n\n/**\n * 格式化数字\n * @param number 输入的数字\n */\nexport function toThousands(number: number | string): string {\n if (number === null || number === undefined || number === '') return ''\n\n const n = Number(number)\n if (Number.isNaN(n)) return ''\n\n return n.toLocaleString('en-US')\n}\n","/**\n * 设置 Cookie\n * @param name Cookie 名称\n * @param value Cookie 值\n * @param days 过期天数,默认 7 天\n * @param path 路径,默认 '/'\n * @param domain 域名\n * @param secure 是否仅在 HTTPS 下传输\n */\nexport function setCookie(\n name: string,\n value: string,\n days: number = 1,\n path: string = '/',\n domain?: string,\n secure: boolean = false,\n): void {\n let expires = ''\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = `; expires=${date.toUTCString()}`\n }\n let cookieString = `${name}=${encodeURIComponent(value)}${expires}; path=${path}`\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n if (secure) {\n cookieString += '; secure'\n }\n // 添加 SameSite 属性以提高安全性\n cookieString += '; SameSite=Lax'\n document.cookie = cookieString\n}\n\n/**\n * 获取 Cookie\n * @param name Cookie 名称\n * @returns Cookie 值,如果不存在则返回 null\n */\nexport function getCookie(name: string): string | null {\n const nameEQ = `${name}=`\n const ca = document.cookie.split(';')\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length)\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length))\n }\n }\n return null\n}\n\n/**\n * 删除 Cookie\n * @param name Cookie 名称\n * @param path 路径,默认 '/'\n * @param domain 域名\n */\nexport function removeCookie(name: string, path: string = '/', domain?: string): void {\n let cookieString = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${path}`\n\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n\n document.cookie = cookieString\n}\n\n/**\n * 检查 Cookie 是否存在\n * @param name Cookie 名称\n * @returns 是否存在\n */\nexport function hasCookie(name: string): boolean {\n return getCookie(name) !== null\n}\n","/**\n * 生成唯一标识(时间戳 + 随机数)\n * @param prefix 前缀\n * @returns 唯一标识\n */\nexport function generateUniqueId(prefix?: string) {\n const timestamp = Date.now().toString(36)\n const random = Math.random().toString(36).substring(2, 8)\n return `${prefix || ''}${timestamp}_${random}`\n}\n","/**\n * 环境变量\n * @param appEnv 环境变量 import.meta.env.APP_ENV\n * @returns 环境变量对象\n */\nexport function env(appEnv?: string) {\n const isDev = appEnv === 'development'\n const isTest = appEnv === 'test'\n const isPre = appEnv === 'pre-release'\n const isProd = appEnv === 'production'\n return {\n isDev,\n isTest,\n isPre,\n isProd,\n }\n}\n"],"mappings":"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","names":["dayjs","_isArray","_isArrayBuffer","_isBoolean","_isArrayLike","_isArrayLikeObject","_isArguments","_isDate","_isElement","lodashIsEmpty","_isEqual","_isError","lodashIsFunction","_isInteger","_isFinite","_isLength","_isMap","lodashIsNaN","lodashIsNil","_isNull","lodashIsNumber","lodashIsObject","_isObjectLike","_isPlainObject","_isMatch","_isNative","_isRegExp","_isSafeInteger","_isSet","lodashIsString","_isSymbol","_isTypedArray","lodashIsUndefined","_isWeakMap","_isWeakSet"]}
1
+ {"version":3,"sources":["../index.ts","../src/date.ts","../src/math.ts","../src/is.ts","../src/format.ts","../src/cookie.ts","../src/function.ts","../src/env.ts"],"sourcesContent":["export * from './src/date'\nexport * from './src/math'\nexport * from './src/format'\nexport * from './src/cookie'\nexport * from './src/is'\nexport * from './src/function'\nexport * from './src/env'\n","import dayjs from 'dayjs'\nimport type { Dayjs } from 'dayjs'\n\n/**\n * 校验日期是否与指定日期相同或晚于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或晚于指定日期\n */\nexport function isSameOrAfterDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isAfter(dayjs(day), 'day')\n}\n\n/**\n * 校验日期是否与指定日期相同或早于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或早于指定日期\n */\nexport function isSameOrBeforeDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isBefore(dayjs(day), 'day')\n}\n","import { add, bignumber, divide, multiply, subtract } from 'mathjs'\n\nimport { isFinite } from './is'\n\n// 含税金额 = 重量 * 含税单价\nexport const computeTaxAmountFn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税金额 = 重量 * 含税单价(负数反向四舍五入)\nexport const computeTaxAmount2Fn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税单价 = 含税金额 / 重量\nexport const computePriceFn = (taxAmount: number, weight: number): number => {\n if (!isFinite(taxAmount) || !isFinite(weight) || weight <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(taxAmountBig, weightBig))\n return value\n}\n\n// 重量 = 含税金额 / 含税单价\nexport const computeWeightFn = (taxAmount: number, price: number): number => {\n if (!isFinite(taxAmount) || !isFinite(price) || price <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const priceBig = bignumber(price)\n const value = Number(divide(taxAmountBig, priceBig))\n return value\n}\n\n// 含税单价 = 无税单价 * (1 + 税率)\nexport const computePrice2Fn = (noTaxPrice: number, taxRate: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(taxRate)) return 0\n const noTaxPriceBig = bignumber(noTaxPrice)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(multiply(noTaxPriceBig, add(1, taxRateBig)))\n return value\n}\n\n// 无税单价 = 含税单价 / (1 + 税率)\nexport const computeNoTaxPriceFn = (price: number, taxRate: number): number => {\n if (!isFinite(price) || !isFinite(taxRate)) return 0\n const priceBig = bignumber(price)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(priceBig, add(1, taxRateBig)))\n return value\n}\n\n// 税率 = 含税单价 / 无税单价 - 1\nexport const computeTaxRateFn = (price: number, noTaxPrice: number): number => {\n if (!isFinite(price) || !isFinite(noTaxPrice)) return 0\n const priceBig = bignumber(price)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(subtract(divide(priceBig, noTaxPriceBig), 1))\n return value\n}\n\n// 无税单价 = 无税金额 / 重量\nexport const computeNoTaxPrice2Fn = (noTaxAmount: number, weight: number): number => {\n if (!isFinite(noTaxAmount) || !isFinite(weight) || weight <= 0) return 0\n const noTaxAmountBig = bignumber(noTaxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(noTaxAmountBig, weightBig))\n return value\n}\n\n// 无税金额 = 重量 * 无税单价\nexport const computeNoTaxAmountFn = (weight: number, noTaxPrice: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(multiply(weightBig, noTaxPriceBig))\n return value\n}\n\n// 无税金额 = 含税金额 / (1 + 税率)\nexport const computeNoTaxAmount2Fn = (taxAmount: number, taxRate: number): number => {\n if (!isFinite(taxAmount) || !isFinite(taxRate)) return 0\n const taxAmountBig = bignumber(taxAmount)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(taxAmountBig, add(1, taxRateBig)))\n return value\n}\n\n// 税额 = 含税金额 - 无税金额\nexport const computeTaxFn = (taxAmount: number, noTaxAmount: number): number => {\n const taxAmountBig = bignumber(taxAmount || 0)\n const noTaxAmountBig = bignumber(noTaxAmount || 0)\n const value = Number(subtract(taxAmountBig, noTaxAmountBig))\n return value\n}\n\n// 数量 = 重量 / 单重\nexport const computeGoodsNumFn = (weight: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(weight) || weight1 <= 0) return 0\n const weightBig = bignumber(weight)\n const weight1Big = bignumber(weight1)\n const value = Number(divide(weightBig, weight1Big))\n return value\n}\n\n// 重量 = 数量 * 单重\nexport const computeGoodsWeightFn = (num: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(num) || weight1 <= 0) return 0\n const numBig = bignumber(num)\n const weight1Big = bignumber(weight1)\n const value = Number(multiply(numBig, weight1Big))\n return value\n}\n\n// ==================== 通用:加减乘除(BigNumber 计算) ====================\n// 加法:a + b\nexport const addFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(add(aBig, bBig))\n}\n\n/**\n * 合计\n * @param arr 数组\n * @param key 键名\n * @returns 合计值\n */\nexport function sumBy<T>(arr: T[], key: keyof T): number {\n return arr.reduce((acc, cur) => addFn(acc, Number(cur[key])), 0)\n}\n\n// 减法:a - b\nexport const subtractFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(subtract(aBig, bBig))\n}\n\n// 乘法:a × b\nexport const multiplyFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(multiply(aBig, bBig))\n}\n\n// 除法:a ÷ b(b <= 0 时返回 0)\nexport const divideFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b) || b === 0) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(divide(aBig, bBig))\n}\n","import {\n isArguments as _isArguments,\n isArray as _isArray,\n isArrayBuffer as _isArrayBuffer,\n isArrayLike as _isArrayLike,\n isArrayLikeObject as _isArrayLikeObject,\n isBoolean as _isBoolean,\n isDate as _isDate,\n isElement as _isElement,\n isEqual as _isEqual,\n isError as _isError,\n isFinite as _isFinite,\n isInteger as _isInteger,\n isLength as _isLength,\n isMap as _isMap,\n isMatch as _isMatch,\n isNative as _isNative,\n isNull as _isNull,\n isObjectLike as _isObjectLike,\n isPlainObject as _isPlainObject,\n isRegExp as _isRegExp,\n isSafeInteger as _isSafeInteger,\n isSet as _isSet,\n isSymbol as _isSymbol,\n isTypedArray as _isTypedArray,\n isWeakMap as _isWeakMap,\n isWeakSet as _isWeakSet,\n isEmpty as lodashIsEmpty,\n isFunction as lodashIsFunction,\n isNaN as lodashIsNaN,\n isNil as lodashIsNil,\n isNumber as lodashIsNumber,\n isObject as lodashIsObject,\n isString as lodashIsString,\n isUndefined as lodashIsUndefined,\n} from 'lodash-es'\n\n// 类型定义\ntype AnyFunction = (...args: any[]) => any\ntype AnyObject = Record<string, any>\ntype Primitive = string | number | boolean | symbol | bigint | null | undefined\n\n/**\n * 获取值的类型标签\n */\nconst getTag = (value: unknown): string => {\n return Object.prototype.toString.call(value)\n}\n\n/**\n * 检查是否为数组 - 使用 lodash-es 的实现\n */\nexport const isArray: (value: unknown) => value is any[] = _isArray\n\n/**\n * 检查是否为 ArrayBuffer\n */\nexport const isArrayBuffer: (value: unknown) => value is ArrayBuffer = _isArrayBuffer\n\n/**\n * 检查是否为 AsyncFunction\n */\nexport function isAsyncFunction(value: unknown): value is AnyFunction {\n return (\n getTag(value) === '[object AsyncFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'AsyncFunction')\n )\n}\n\n/**\n * 检查是否为 BigInt\n */\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint' || getTag(value) === '[object BigInt]'\n}\n\n/**\n * 检查是否为 Blob 对象(浏览器环境)\n */\nexport function isBlob(value: unknown): value is Blob {\n return typeof Blob !== 'undefined' && value instanceof Blob\n}\n\n/**\n * 检查是否为布尔值 - 使用 lodash-es 的实现\n */\nexport const isBoolean: (value: unknown) => value is boolean = _isBoolean\n\n/**\n * 检查是否为类数组\n */\nexport const isArrayLike: (value: unknown) => boolean = _isArrayLike\n\n/**\n * 检查是否为类数组对象\n */\nexport const isArrayLikeObject: (value: unknown) => boolean = _isArrayLikeObject\n\n/**\n * 检查是否为类数组参数\n */\nexport const isArguments: (value: unknown) => boolean = _isArguments\n\n/**\n * 检查是否为 Date 对象 - 使用 lodash-es 的实现\n */\nexport const isDate: (value: unknown) => value is Date = _isDate\n\n/**\n * 检查是否为 DOM 元素 - 使用 lodash-es 的实现\n */\nexport const isElement: (value: unknown) => boolean = _isElement\n\n/**\n * 检查是否为空值 - 使用 lodash-es 的实现\n */\nexport const isEmpty: (value: unknown) => boolean = lodashIsEmpty\n\n/**\n * 检查是否严格相等 - 使用 lodash-es 的实现\n */\nexport const isEqual: (value: unknown, other: unknown) => boolean = _isEqual\n\n/**\n * 检查是否为 Error 对象 - 使用 lodash-es 的实现\n */\nexport const isError: (value: unknown) => value is Error = _isError\n\n/**\n * 检查是否为 File 对象(浏览器环境)\n */\nexport function isFile(value: unknown): value is File {\n return typeof File !== 'undefined' && value instanceof File\n}\n\n/**\n * 检查是否为 FormData 对象(浏览器环境)\n */\nexport function isFormData(value: unknown): value is FormData {\n return typeof FormData !== 'undefined' && value instanceof FormData\n}\n\n/**\n * 检查是否为函数 - 使用 lodash-es 的实现\n */\nexport const isFunction: (value: unknown) => value is AnyFunction = lodashIsFunction\n\n/**\n * 检查是否为 GeneratorFunction\n */\nexport function isGeneratorFunction(value: unknown): value is GeneratorFunction {\n return (\n getTag(value) === '[object GeneratorFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'GeneratorFunction')\n )\n}\n\n/**\n * 检查是否为整数 - 使用 lodash-es 的实现\n */\nexport const isInteger: (value: unknown) => boolean = _isInteger\n\n/**\n * 检查是否为有限数 - 使用 lodash-es 的实现\n */\nexport const isFinite: (value: unknown) => boolean = _isFinite\n\n/**\n * 检查是否为有效长度 - 使用 lodash-es 的实现\n */\nexport const isLength: (value: unknown) => boolean = _isLength\n\n/**\n * 检查是否为 Map - 使用 lodash-es 的实现\n */\nexport const isMap: (value: unknown) => value is Map<any, any> = _isMap\n\n/**\n * 检查是否为 NaN - 使用 lodash-es 的实现\n */\nexport const isNaN: (value: unknown) => boolean = lodashIsNaN\n\n/**\n * 检查是否为 null 或 undefined - 使用 lodash-es 的实现\n */\nexport const isNil: (value: unknown) => value is null | undefined = lodashIsNil\n\n/**\n * 检查是否为 null - 使用 lodash-es 的实现\n */\nexport const isNull: (value: unknown) => value is null = _isNull\n\n/**\n * 检查是否为数字 - 使用 lodash-es 的实现\n */\nexport const isNumber: (value: unknown) => value is number = lodashIsNumber\n\n/**\n * 检查是否为对象 - 使用 lodash-es 的实现\n */\nexport const isObject: (value: unknown) => value is object = lodashIsObject\n\n/**\n * 检查是否为类对象 - 使用 lodash-es 的实现\n */\nexport const isObjectLike: (value: unknown) => boolean = _isObjectLike\n\n/**\n * 检查是否为普通对象 - 使用 lodash-es 的实现\n */\nexport const isPlainObject: (value: unknown) => boolean = _isPlainObject\n\n/**\n * 检查是否匹配对象 - 使用 lodash-es 的实现\n */\nexport const isMatch: (object: object, source: object) => boolean = _isMatch\n\n/**\n * 检查是否为原生函数 - 使用 lodash-es 的实现\n */\nexport const isNative: (value: unknown) => boolean = _isNative\n\n/**\n * 检查是否为浏览器环境\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined'\n}\n\n/**\n * 检查是否为 Promise\n */\nexport function isPromise(value: unknown): value is Promise<any> {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as any).then === 'function'\n )\n}\n\n/**\n * 检查是否为 RegExp - 使用 lodash-es 的实现\n */\nexport const isRegExp: (value: unknown) => value is RegExp = _isRegExp\n\n/**\n * 检查是否为安全整数 - 使用 lodash-es 的实现\n */\nexport const isSafeInteger: (value: unknown) => boolean = _isSafeInteger\n\n/**\n * 检查是否为 Set - 使用 lodash-es 的实现\n */\nexport const isSet: (value: unknown) => value is Set<any> = _isSet\n\n/**\n * 检查是否为字符串 - 使用 lodash-es 的实现\n */\nexport const isString: (value: unknown) => value is string = lodashIsString\n\n/**\n * 检查是否为 Symbol - 使用 lodash-es 的实现\n */\nexport const isSymbol: (value: unknown) => value is symbol = _isSymbol\n\n/**\n * 检查是否为 TypedArray - 使用 lodash-es 的实现\n */\nexport const isTypedArray: (value: unknown) => boolean = _isTypedArray\n\n/**\n * 检查是否为 undefined - 使用 lodash-es 的实现\n */\nexport const isUndefined: (value: unknown) => value is undefined = lodashIsUndefined\n\n/**\n * 检查是否为 URL 对象(浏览器环境)\n */\nexport function isURL(value: unknown): value is URL {\n return typeof URL !== 'undefined' && value instanceof URL\n}\n\n/**\n * 检查是否为 URLSearchParams 对象(浏览器环境)\n */\nexport function isURLSearchParams(value: unknown): value is URLSearchParams {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams\n}\n\n/**\n * 检查是否为 WeakMap - 使用 lodash-es 的实现\n */\nexport const isWeakMap: (value: unknown) => value is WeakMap<object, any> = _isWeakMap\n\n/**\n * 检查是否为 WeakSet - 使用 lodash-es 的实现\n */\nexport const isWeakSet: (value: unknown) => value is WeakSet<object> = _isWeakSet\n\n/**\n * 检查是否为 Window 对象(浏览器环境)\n */\nexport function isWindow(value: unknown): value is Window {\n return isBrowser() && value === window\n}\n\n/**\n * 检查是否为 Document 对象(浏览器环境)\n */\nexport function isDocument(value: unknown): value is Document {\n return isBrowser() && value === document\n}\n\n/**\n * 检查是否为 Event 对象(浏览器环境)\n */\nexport function isEvent(value: unknown): value is Event {\n return isBrowser() && value instanceof Event\n}\n\n/**\n * 检查是否为 Primitive 类型\n */\nexport function isPrimitive(value: unknown): value is Primitive {\n return (\n isString(value) ||\n isNumber(value) ||\n isBoolean(value) ||\n isSymbol(value) ||\n isBigInt(value) ||\n isNull(value) ||\n isUndefined(value)\n )\n}\n\n/**\n * 检查是否为 Iterable 对象\n */\nexport function isIterable(value: unknown): value is Iterable<any> {\n return value != null && typeof (value as any)[Symbol.iterator] === 'function'\n}\n\n/**\n * 检查是否为 AsyncIterable 对象\n */\nexport function isAsyncIterable(value: unknown): value is AsyncIterable<any> {\n return value != null && typeof (value as any)[Symbol.asyncIterator] === 'function'\n}\n\n/**\n * 检查是否为 Iterator 对象\n */\nexport function isIterator(value: unknown): value is Iterator<any> {\n return value != null && typeof (value as any).next === 'function'\n}\n\n/**\n * 检查是否为 Array Iterator\n */\nexport function isArrayIterator(value: unknown): boolean {\n return getTag(value) === '[object Array Iterator]'\n}\n\n/**\n * 检查是否为 Map Iterator\n */\nexport function isMapIterator(value: unknown): boolean {\n return getTag(value) === '[object Map Iterator]'\n}\n\n/**\n * 检查是否为 Set Iterator\n */\nexport function isSetIterator(value: unknown): boolean {\n return getTag(value) === '[object Set Iterator]'\n}\n\n/**\n * 检查是否为 String Iterator\n */\nexport function isStringIterator(value: unknown): boolean {\n return getTag(value) === '[object String Iterator]'\n}\n\n/**\n * 检查是否为可序列化的 JSON 值\n */\nexport function isJSONSerializable(value: unknown): boolean {\n if (isPrimitive(value)) {\n return !isUndefined(value)\n }\n\n if (isArray(value)) {\n return value.every(isJSONSerializable)\n }\n\n if (isPlainObject(value)) {\n return Object.values(value as AnyObject).every(isJSONSerializable)\n }\n\n return false\n}\n\n/**\n * 检查是否为有效的数组索引\n */\nexport function isArrayIndex(value: unknown): boolean {\n if (!isNumber(value) && !isString(value)) {\n return false\n }\n\n const num = Number(value)\n return (\n isInteger(num) && num >= 0 && num < Number.MAX_SAFE_INTEGER && String(num) === String(value)\n )\n}\n\n/**\n * 检查是否为有效的 Email 地址\n */\nexport function isEmail(value: unknown): value is string {\n if (!isString(value)) return false\n\n const emailRegex = /^[^\\s@]+@[^\\s@][^\\s.@]*\\.[^\\s@]+$/\n return emailRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 URL 字符串\n */\nexport function isURLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new URL(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的手机号码(中国)\n */\nexport function isChinesePhone(value: unknown): value is string {\n if (!isString(value)) return false\n\n const phoneRegex = /^1[3-9]\\d{9}$/\n return phoneRegex.test(value)\n}\n\n/**\n * 检查是否为有效的身份证号码(中国)\n */\nexport function isChineseIDCard(value: unknown): value is string {\n if (!isString(value)) return false\n\n const idCardRegex =\n /^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|1[0-2])(?:[0-2][1-9]|10|20|30|31)\\d{3}[0-9X]$/i\n if (!idCardRegex.test(value)) return false\n\n // 验证校验码\n const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]\n const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']\n\n let sum = 0\n for (let i = 0; i < 17; i++) {\n sum += Number.parseInt(value[i]) * weights[i]\n }\n\n const checkCode = checkCodes[sum % 11]\n return checkCode === value[17].toUpperCase()\n}\n\n/**\n * 检查是否为有效的邮政编码(中国)\n */\nexport function isChinesePostalCode(value: unknown): value is string {\n if (!isString(value)) return false\n\n const postalCodeRegex = /^[1-9]\\d{5}$/\n return postalCodeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 JSON 字符串\n */\nexport function isJSONString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n JSON.parse(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为 Base64 字符串\n */\nexport function isBase64(value: unknown): value is string {\n if (!isString(value)) return false\n\n const base64Regex = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i\n return base64Regex.test(value)\n}\n\n/**\n * 检查是否为 Hex 颜色值\n */\nexport function isHexColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hexColorRegex = /^#?[a-f0-9]{6}$|^#?[a-f0-9]{3}$/i\n return hexColorRegex.test(value)\n}\n\n/**\n * 检查是否为 RGB 颜色值\n */\nexport function isRGBColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const rgbColorRegex = /^rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)$/\n return rgbColorRegex.test(value)\n}\n\n/**\n * 检查是否为 HSL 颜色值\n */\nexport function isHSLColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hslColorRegex = /^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/\n return hslColorRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期字符串\n */\nexport function isDateString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const date = new Date(value)\n return !isNaN(date.getTime())\n}\n\n/**\n * 检查是否为有效的时间字符串\n */\nexport function isTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const timeRegex = /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/\n return timeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期时间字符串\n */\nexport function isDateTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?$/\n return dateTimeRegex.test(value) && !isNaN(new Date(value).getTime())\n}\n\n/**\n * 检查是否为有效的时区\n */\nexport function isTimezone(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n Intl.DateTimeFormat(undefined, { timeZone: value })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的正则表达式字符串\n */\nexport function isRegExpString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new RegExp(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 XML 字符串\n */\nexport function isXMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const xmlDoc = parser.parseFromString(value, 'application/xml')\n return xmlDoc.getElementsByTagName('parsererror').length === 0\n }\n return false\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 HTML 字符串\n */\nexport function isHTMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const htmlDoc = parser.parseFromString(value, 'text/html')\n return htmlDoc.body.children.length > 0\n }\n return false\n } catch {\n return false\n }\n}\n","/**\n * 格式化数字\n * @param number 输入的数字\n * @param decimals 保留小数位数\n * @param thousands_sep 千分位分隔符\n * @returns 格式化后的字符串\n */\nexport function formatNumber(\n number: number | string | null | undefined,\n decimals = 2,\n thousands_sep = ',',\n): string {\n if (number === null || number === undefined || number === '') return ''\n\n let num = Number.parseFloat(String(number))\n if (Number.isNaN(num)) return ''\n\n num = Math.round(num * 10 ** decimals) / 10 ** decimals\n const numStr = num.toFixed(decimals)\n\n const parts = numStr.split('.')\n if (thousands_sep) {\n const re = /(-?\\d+)(\\d{3})/\n while (re.test(parts[0])) {\n parts[0] = parts[0].replace(re, `$1${thousands_sep}$2`)\n }\n }\n\n return parts.join('.')\n}\n\n/**\n * 格式化数字\n * @param number 输入的数字\n */\nexport function toThousands(number: number | string): string {\n if (number === null || number === undefined || number === '') return ''\n\n const n = Number(number)\n if (Number.isNaN(n)) return ''\n\n return n.toLocaleString('en-US')\n}\n","/**\n * 设置 Cookie\n * @param name Cookie 名称\n * @param value Cookie 值\n * @param days 过期天数,默认 7 天\n * @param path 路径,默认 '/'\n * @param domain 域名\n * @param secure 是否仅在 HTTPS 下传输\n */\nexport function setCookie(\n name: string,\n value: string,\n days: number = 1,\n path: string = '/',\n domain?: string,\n secure: boolean = false,\n): void {\n let expires = ''\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = `; expires=${date.toUTCString()}`\n }\n let cookieString = `${name}=${encodeURIComponent(value)}${expires}; path=${path}`\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n if (secure) {\n cookieString += '; secure'\n }\n // 添加 SameSite 属性以提高安全性\n cookieString += '; SameSite=Lax'\n document.cookie = cookieString\n}\n\n/**\n * 获取 Cookie\n * @param name Cookie 名称\n * @returns Cookie 值,如果不存在则返回 null\n */\nexport function getCookie(name: string): string | null {\n const nameEQ = `${name}=`\n const ca = document.cookie.split(';')\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length)\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length))\n }\n }\n return null\n}\n\n/**\n * 删除 Cookie\n * @param name Cookie 名称\n * @param path 路径,默认 '/'\n * @param domain 域名\n */\nexport function removeCookie(name: string, path: string = '/', domain?: string): void {\n let cookieString = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${path}`\n\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n\n document.cookie = cookieString\n}\n\n/**\n * 检查 Cookie 是否存在\n * @param name Cookie 名称\n * @returns 是否存在\n */\nexport function hasCookie(name: string): boolean {\n return getCookie(name) !== null\n}\n","/**\n * 生成唯一标识(时间戳 + 随机数)\n * @param prefix 前缀\n * @returns 唯一标识\n */\nexport function generateUniqueId(prefix?: string) {\n const timestamp = Date.now().toString(36)\n const random = Math.random().toString(36).substring(2, 8)\n return `${prefix || ''}${timestamp}_${random}`\n}\n\n/**\n * 空函数\n */\nexport const noop = () => {}\n","/**\n * 环境变量\n * @param appEnv 环境变量 import.meta.env.APP_ENV\n * @returns 环境变量对象\n */\nexport function env(appEnv?: string) {\n const isDev = appEnv === 'development'\n const isTest = appEnv === 'test'\n const isPre = appEnv === 'pre-release'\n const isProd = appEnv === 'production'\n return {\n isDev,\n isTest,\n isPre,\n isProd,\n }\n}\n"],"mappings":"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","names":["dayjs","_isArray","_isArrayBuffer","_isBoolean","_isArrayLike","_isArrayLikeObject","_isArguments","_isDate","_isElement","lodashIsEmpty","_isEqual","_isError","lodashIsFunction","_isInteger","_isFinite","_isLength","_isMap","lodashIsNaN","lodashIsNil","_isNull","lodashIsNumber","lodashIsObject","_isObjectLike","_isPlainObject","_isMatch","_isNative","_isRegExp","_isSafeInteger","_isSet","lodashIsString","_isSymbol","_isTypedArray","lodashIsUndefined","_isWeakMap","_isWeakSet"]}
package/dist/index.d.cts CHANGED
@@ -389,6 +389,10 @@ declare function isHTMLString(value: unknown): value is string;
389
389
  * @returns 唯一标识
390
390
  */
391
391
  declare function generateUniqueId(prefix?: string): string;
392
+ /**
393
+ * 空函数
394
+ */
395
+ declare const noop: () => void;
392
396
 
393
397
  /**
394
398
  * 环境变量
@@ -402,4 +406,4 @@ declare function env(appEnv?: string): {
402
406
  isProd: boolean;
403
407
  };
404
408
 
405
- export { addFn, computeGoodsNumFn, computeGoodsWeightFn, computeNoTaxAmount2Fn, computeNoTaxAmountFn, computeNoTaxPrice2Fn, computeNoTaxPriceFn, computePrice2Fn, computePriceFn, computeTaxAmount2Fn, computeTaxAmountFn, computeTaxFn, computeTaxRateFn, computeWeightFn, divideFn, env, formatNumber, generateUniqueId, getCookie, hasCookie, isArguments, isArray, isArrayBuffer, isArrayIndex, isArrayIterator, isArrayLike, isArrayLikeObject, isAsyncFunction, isAsyncIterable, isBase64, isBigInt, isBlob, isBoolean, isBrowser, isChineseIDCard, isChinesePhone, isChinesePostalCode, isDate, isDateString, isDateTimeString, isDocument, isElement, isEmail, isEmpty, isEqual, isError, isEvent, isFile, isFinite, isFormData, isFunction, isGeneratorFunction, isHSLColor, isHTMLString, isHexColor, isInteger, isIterable, isIterator, isJSONSerializable, isJSONString, isLength, isMap, isMapIterator, isMatch, isNaN, isNative, isNil, isNull, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isPromise, isRGBColor, isRegExp, isRegExpString, isSafeInteger, isSameOrAfterDay, isSameOrBeforeDay, isSet, isSetIterator, isString, isStringIterator, isSymbol, isTimeString, isTimezone, isTypedArray, isURL, isURLSearchParams, isURLString, isUndefined, isWeakMap, isWeakSet, isWindow, isXMLString, multiplyFn, removeCookie, setCookie, subtractFn, sumBy, toThousands };
409
+ export { addFn, computeGoodsNumFn, computeGoodsWeightFn, computeNoTaxAmount2Fn, computeNoTaxAmountFn, computeNoTaxPrice2Fn, computeNoTaxPriceFn, computePrice2Fn, computePriceFn, computeTaxAmount2Fn, computeTaxAmountFn, computeTaxFn, computeTaxRateFn, computeWeightFn, divideFn, env, formatNumber, generateUniqueId, getCookie, hasCookie, isArguments, isArray, isArrayBuffer, isArrayIndex, isArrayIterator, isArrayLike, isArrayLikeObject, isAsyncFunction, isAsyncIterable, isBase64, isBigInt, isBlob, isBoolean, isBrowser, isChineseIDCard, isChinesePhone, isChinesePostalCode, isDate, isDateString, isDateTimeString, isDocument, isElement, isEmail, isEmpty, isEqual, isError, isEvent, isFile, isFinite, isFormData, isFunction, isGeneratorFunction, isHSLColor, isHTMLString, isHexColor, isInteger, isIterable, isIterator, isJSONSerializable, isJSONString, isLength, isMap, isMapIterator, isMatch, isNaN, isNative, isNil, isNull, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isPromise, isRGBColor, isRegExp, isRegExpString, isSafeInteger, isSameOrAfterDay, isSameOrBeforeDay, isSet, isSetIterator, isString, isStringIterator, isSymbol, isTimeString, isTimezone, isTypedArray, isURL, isURLSearchParams, isURLString, isUndefined, isWeakMap, isWeakSet, isWindow, isXMLString, multiplyFn, noop, removeCookie, setCookie, subtractFn, sumBy, toThousands };
package/dist/index.d.ts CHANGED
@@ -389,6 +389,10 @@ declare function isHTMLString(value: unknown): value is string;
389
389
  * @returns 唯一标识
390
390
  */
391
391
  declare function generateUniqueId(prefix?: string): string;
392
+ /**
393
+ * 空函数
394
+ */
395
+ declare const noop: () => void;
392
396
 
393
397
  /**
394
398
  * 环境变量
@@ -402,4 +406,4 @@ declare function env(appEnv?: string): {
402
406
  isProd: boolean;
403
407
  };
404
408
 
405
- export { addFn, computeGoodsNumFn, computeGoodsWeightFn, computeNoTaxAmount2Fn, computeNoTaxAmountFn, computeNoTaxPrice2Fn, computeNoTaxPriceFn, computePrice2Fn, computePriceFn, computeTaxAmount2Fn, computeTaxAmountFn, computeTaxFn, computeTaxRateFn, computeWeightFn, divideFn, env, formatNumber, generateUniqueId, getCookie, hasCookie, isArguments, isArray, isArrayBuffer, isArrayIndex, isArrayIterator, isArrayLike, isArrayLikeObject, isAsyncFunction, isAsyncIterable, isBase64, isBigInt, isBlob, isBoolean, isBrowser, isChineseIDCard, isChinesePhone, isChinesePostalCode, isDate, isDateString, isDateTimeString, isDocument, isElement, isEmail, isEmpty, isEqual, isError, isEvent, isFile, isFinite, isFormData, isFunction, isGeneratorFunction, isHSLColor, isHTMLString, isHexColor, isInteger, isIterable, isIterator, isJSONSerializable, isJSONString, isLength, isMap, isMapIterator, isMatch, isNaN, isNative, isNil, isNull, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isPromise, isRGBColor, isRegExp, isRegExpString, isSafeInteger, isSameOrAfterDay, isSameOrBeforeDay, isSet, isSetIterator, isString, isStringIterator, isSymbol, isTimeString, isTimezone, isTypedArray, isURL, isURLSearchParams, isURLString, isUndefined, isWeakMap, isWeakSet, isWindow, isXMLString, multiplyFn, removeCookie, setCookie, subtractFn, sumBy, toThousands };
409
+ export { addFn, computeGoodsNumFn, computeGoodsWeightFn, computeNoTaxAmount2Fn, computeNoTaxAmountFn, computeNoTaxPrice2Fn, computeNoTaxPriceFn, computePrice2Fn, computePriceFn, computeTaxAmount2Fn, computeTaxAmountFn, computeTaxFn, computeTaxRateFn, computeWeightFn, divideFn, env, formatNumber, generateUniqueId, getCookie, hasCookie, isArguments, isArray, isArrayBuffer, isArrayIndex, isArrayIterator, isArrayLike, isArrayLikeObject, isAsyncFunction, isAsyncIterable, isBase64, isBigInt, isBlob, isBoolean, isBrowser, isChineseIDCard, isChinesePhone, isChinesePostalCode, isDate, isDateString, isDateTimeString, isDocument, isElement, isEmail, isEmpty, isEqual, isError, isEvent, isFile, isFinite, isFormData, isFunction, isGeneratorFunction, isHSLColor, isHTMLString, isHexColor, isInteger, isIterable, isIterator, isJSONSerializable, isJSONString, isLength, isMap, isMapIterator, isMatch, isNaN, isNative, isNil, isNull, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isPromise, isRGBColor, isRegExp, isRegExpString, isSafeInteger, isSameOrAfterDay, isSameOrBeforeDay, isSet, isSetIterator, isString, isStringIterator, isSymbol, isTimeString, isTimezone, isTypedArray, isURL, isURLSearchParams, isURLString, isUndefined, isWeakMap, isWeakSet, isWindow, isXMLString, multiplyFn, noop, removeCookie, setCookie, subtractFn, sumBy, toThousands };
package/dist/index.js CHANGED
@@ -483,6 +483,8 @@ function generateUniqueId(prefix) {
483
483
  const random = Math.random().toString(36).substring(2, 8);
484
484
  return `${prefix || ""}${timestamp}_${random}`;
485
485
  }
486
+ var noop = () => {
487
+ };
486
488
 
487
489
  // src/env.ts
488
490
  function env(appEnv) {
@@ -595,6 +597,7 @@ export {
595
597
  isWindow,
596
598
  isXMLString,
597
599
  multiplyFn,
600
+ noop,
598
601
  removeCookie,
599
602
  setCookie,
600
603
  subtractFn,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/date.ts","../src/math.ts","../src/is.ts","../src/format.ts","../src/cookie.ts","../src/function.ts","../src/env.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport type { Dayjs } from 'dayjs'\n\n/**\n * 校验日期是否与指定日期相同或晚于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或晚于指定日期\n */\nexport function isSameOrAfterDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isAfter(dayjs(day), 'day')\n}\n\n/**\n * 校验日期是否与指定日期相同或早于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或早于指定日期\n */\nexport function isSameOrBeforeDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isBefore(dayjs(day), 'day')\n}\n","import { add, bignumber, divide, multiply, subtract } from 'mathjs'\n\nimport { isFinite } from './is'\n\n// 含税金额 = 重量 * 含税单价\nexport const computeTaxAmountFn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税金额 = 重量 * 含税单价(负数反向四舍五入)\nexport const computeTaxAmount2Fn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税单价 = 含税金额 / 重量\nexport const computePriceFn = (taxAmount: number, weight: number): number => {\n if (!isFinite(taxAmount) || !isFinite(weight) || weight <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(taxAmountBig, weightBig))\n return value\n}\n\n// 重量 = 含税金额 / 含税单价\nexport const computeWeightFn = (taxAmount: number, price: number): number => {\n if (!isFinite(taxAmount) || !isFinite(price) || price <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const priceBig = bignumber(price)\n const value = Number(divide(taxAmountBig, priceBig))\n return value\n}\n\n// 含税单价 = 无税单价 * (1 + 税率)\nexport const computePrice2Fn = (noTaxPrice: number, taxRate: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(taxRate)) return 0\n const noTaxPriceBig = bignumber(noTaxPrice)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(multiply(noTaxPriceBig, add(1, taxRateBig)))\n return value\n}\n\n// 无税单价 = 含税单价 / (1 + 税率)\nexport const computeNoTaxPriceFn = (price: number, taxRate: number): number => {\n if (!isFinite(price) || !isFinite(taxRate)) return 0\n const priceBig = bignumber(price)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(priceBig, add(1, taxRateBig)))\n return value\n}\n\n// 税率 = 含税单价 / 无税单价 - 1\nexport const computeTaxRateFn = (price: number, noTaxPrice: number): number => {\n if (!isFinite(price) || !isFinite(noTaxPrice)) return 0\n const priceBig = bignumber(price)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(subtract(divide(priceBig, noTaxPriceBig), 1))\n return value\n}\n\n// 无税单价 = 无税金额 / 重量\nexport const computeNoTaxPrice2Fn = (noTaxAmount: number, weight: number): number => {\n if (!isFinite(noTaxAmount) || !isFinite(weight) || weight <= 0) return 0\n const noTaxAmountBig = bignumber(noTaxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(noTaxAmountBig, weightBig))\n return value\n}\n\n// 无税金额 = 重量 * 无税单价\nexport const computeNoTaxAmountFn = (weight: number, noTaxPrice: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(multiply(weightBig, noTaxPriceBig))\n return value\n}\n\n// 无税金额 = 含税金额 / (1 + 税率)\nexport const computeNoTaxAmount2Fn = (taxAmount: number, taxRate: number): number => {\n if (!isFinite(taxAmount) || !isFinite(taxRate)) return 0\n const taxAmountBig = bignumber(taxAmount)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(taxAmountBig, add(1, taxRateBig)))\n return value\n}\n\n// 税额 = 含税金额 - 无税金额\nexport const computeTaxFn = (taxAmount: number, noTaxAmount: number): number => {\n const taxAmountBig = bignumber(taxAmount || 0)\n const noTaxAmountBig = bignumber(noTaxAmount || 0)\n const value = Number(subtract(taxAmountBig, noTaxAmountBig))\n return value\n}\n\n// 数量 = 重量 / 单重\nexport const computeGoodsNumFn = (weight: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(weight) || weight1 <= 0) return 0\n const weightBig = bignumber(weight)\n const weight1Big = bignumber(weight1)\n const value = Number(divide(weightBig, weight1Big))\n return value\n}\n\n// 重量 = 数量 * 单重\nexport const computeGoodsWeightFn = (num: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(num) || weight1 <= 0) return 0\n const numBig = bignumber(num)\n const weight1Big = bignumber(weight1)\n const value = Number(multiply(numBig, weight1Big))\n return value\n}\n\n// ==================== 通用:加减乘除(BigNumber 计算) ====================\n// 加法:a + b\nexport const addFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(add(aBig, bBig))\n}\n\n/**\n * 合计\n * @param arr 数组\n * @param key 键名\n * @returns 合计值\n */\nexport function sumBy<T>(arr: T[], key: keyof T): number {\n return arr.reduce((acc, cur) => addFn(acc, Number(cur[key])), 0)\n}\n\n// 减法:a - b\nexport const subtractFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(subtract(aBig, bBig))\n}\n\n// 乘法:a × b\nexport const multiplyFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(multiply(aBig, bBig))\n}\n\n// 除法:a ÷ b(b <= 0 时返回 0)\nexport const divideFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b) || b === 0) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(divide(aBig, bBig))\n}\n","import {\n isArguments as _isArguments,\n isArray as _isArray,\n isArrayBuffer as _isArrayBuffer,\n isArrayLike as _isArrayLike,\n isArrayLikeObject as _isArrayLikeObject,\n isBoolean as _isBoolean,\n isDate as _isDate,\n isElement as _isElement,\n isEqual as _isEqual,\n isError as _isError,\n isFinite as _isFinite,\n isInteger as _isInteger,\n isLength as _isLength,\n isMap as _isMap,\n isMatch as _isMatch,\n isNative as _isNative,\n isNull as _isNull,\n isObjectLike as _isObjectLike,\n isPlainObject as _isPlainObject,\n isRegExp as _isRegExp,\n isSafeInteger as _isSafeInteger,\n isSet as _isSet,\n isSymbol as _isSymbol,\n isTypedArray as _isTypedArray,\n isWeakMap as _isWeakMap,\n isWeakSet as _isWeakSet,\n isEmpty as lodashIsEmpty,\n isFunction as lodashIsFunction,\n isNaN as lodashIsNaN,\n isNil as lodashIsNil,\n isNumber as lodashIsNumber,\n isObject as lodashIsObject,\n isString as lodashIsString,\n isUndefined as lodashIsUndefined,\n} from 'lodash-es'\n\n// 类型定义\ntype AnyFunction = (...args: any[]) => any\ntype AnyObject = Record<string, any>\ntype Primitive = string | number | boolean | symbol | bigint | null | undefined\n\n/**\n * 获取值的类型标签\n */\nconst getTag = (value: unknown): string => {\n return Object.prototype.toString.call(value)\n}\n\n/**\n * 检查是否为数组 - 使用 lodash-es 的实现\n */\nexport const isArray: (value: unknown) => value is any[] = _isArray\n\n/**\n * 检查是否为 ArrayBuffer\n */\nexport const isArrayBuffer: (value: unknown) => value is ArrayBuffer = _isArrayBuffer\n\n/**\n * 检查是否为 AsyncFunction\n */\nexport function isAsyncFunction(value: unknown): value is AnyFunction {\n return (\n getTag(value) === '[object AsyncFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'AsyncFunction')\n )\n}\n\n/**\n * 检查是否为 BigInt\n */\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint' || getTag(value) === '[object BigInt]'\n}\n\n/**\n * 检查是否为 Blob 对象(浏览器环境)\n */\nexport function isBlob(value: unknown): value is Blob {\n return typeof Blob !== 'undefined' && value instanceof Blob\n}\n\n/**\n * 检查是否为布尔值 - 使用 lodash-es 的实现\n */\nexport const isBoolean: (value: unknown) => value is boolean = _isBoolean\n\n/**\n * 检查是否为类数组\n */\nexport const isArrayLike: (value: unknown) => boolean = _isArrayLike\n\n/**\n * 检查是否为类数组对象\n */\nexport const isArrayLikeObject: (value: unknown) => boolean = _isArrayLikeObject\n\n/**\n * 检查是否为类数组参数\n */\nexport const isArguments: (value: unknown) => boolean = _isArguments\n\n/**\n * 检查是否为 Date 对象 - 使用 lodash-es 的实现\n */\nexport const isDate: (value: unknown) => value is Date = _isDate\n\n/**\n * 检查是否为 DOM 元素 - 使用 lodash-es 的实现\n */\nexport const isElement: (value: unknown) => boolean = _isElement\n\n/**\n * 检查是否为空值 - 使用 lodash-es 的实现\n */\nexport const isEmpty: (value: unknown) => boolean = lodashIsEmpty\n\n/**\n * 检查是否严格相等 - 使用 lodash-es 的实现\n */\nexport const isEqual: (value: unknown, other: unknown) => boolean = _isEqual\n\n/**\n * 检查是否为 Error 对象 - 使用 lodash-es 的实现\n */\nexport const isError: (value: unknown) => value is Error = _isError\n\n/**\n * 检查是否为 File 对象(浏览器环境)\n */\nexport function isFile(value: unknown): value is File {\n return typeof File !== 'undefined' && value instanceof File\n}\n\n/**\n * 检查是否为 FormData 对象(浏览器环境)\n */\nexport function isFormData(value: unknown): value is FormData {\n return typeof FormData !== 'undefined' && value instanceof FormData\n}\n\n/**\n * 检查是否为函数 - 使用 lodash-es 的实现\n */\nexport const isFunction: (value: unknown) => value is AnyFunction = lodashIsFunction\n\n/**\n * 检查是否为 GeneratorFunction\n */\nexport function isGeneratorFunction(value: unknown): value is GeneratorFunction {\n return (\n getTag(value) === '[object GeneratorFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'GeneratorFunction')\n )\n}\n\n/**\n * 检查是否为整数 - 使用 lodash-es 的实现\n */\nexport const isInteger: (value: unknown) => boolean = _isInteger\n\n/**\n * 检查是否为有限数 - 使用 lodash-es 的实现\n */\nexport const isFinite: (value: unknown) => boolean = _isFinite\n\n/**\n * 检查是否为有效长度 - 使用 lodash-es 的实现\n */\nexport const isLength: (value: unknown) => boolean = _isLength\n\n/**\n * 检查是否为 Map - 使用 lodash-es 的实现\n */\nexport const isMap: (value: unknown) => value is Map<any, any> = _isMap\n\n/**\n * 检查是否为 NaN - 使用 lodash-es 的实现\n */\nexport const isNaN: (value: unknown) => boolean = lodashIsNaN\n\n/**\n * 检查是否为 null 或 undefined - 使用 lodash-es 的实现\n */\nexport const isNil: (value: unknown) => value is null | undefined = lodashIsNil\n\n/**\n * 检查是否为 null - 使用 lodash-es 的实现\n */\nexport const isNull: (value: unknown) => value is null = _isNull\n\n/**\n * 检查是否为数字 - 使用 lodash-es 的实现\n */\nexport const isNumber: (value: unknown) => value is number = lodashIsNumber\n\n/**\n * 检查是否为对象 - 使用 lodash-es 的实现\n */\nexport const isObject: (value: unknown) => value is object = lodashIsObject\n\n/**\n * 检查是否为类对象 - 使用 lodash-es 的实现\n */\nexport const isObjectLike: (value: unknown) => boolean = _isObjectLike\n\n/**\n * 检查是否为普通对象 - 使用 lodash-es 的实现\n */\nexport const isPlainObject: (value: unknown) => boolean = _isPlainObject\n\n/**\n * 检查是否匹配对象 - 使用 lodash-es 的实现\n */\nexport const isMatch: (object: object, source: object) => boolean = _isMatch\n\n/**\n * 检查是否为原生函数 - 使用 lodash-es 的实现\n */\nexport const isNative: (value: unknown) => boolean = _isNative\n\n/**\n * 检查是否为浏览器环境\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined'\n}\n\n/**\n * 检查是否为 Promise\n */\nexport function isPromise(value: unknown): value is Promise<any> {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as any).then === 'function'\n )\n}\n\n/**\n * 检查是否为 RegExp - 使用 lodash-es 的实现\n */\nexport const isRegExp: (value: unknown) => value is RegExp = _isRegExp\n\n/**\n * 检查是否为安全整数 - 使用 lodash-es 的实现\n */\nexport const isSafeInteger: (value: unknown) => boolean = _isSafeInteger\n\n/**\n * 检查是否为 Set - 使用 lodash-es 的实现\n */\nexport const isSet: (value: unknown) => value is Set<any> = _isSet\n\n/**\n * 检查是否为字符串 - 使用 lodash-es 的实现\n */\nexport const isString: (value: unknown) => value is string = lodashIsString\n\n/**\n * 检查是否为 Symbol - 使用 lodash-es 的实现\n */\nexport const isSymbol: (value: unknown) => value is symbol = _isSymbol\n\n/**\n * 检查是否为 TypedArray - 使用 lodash-es 的实现\n */\nexport const isTypedArray: (value: unknown) => boolean = _isTypedArray\n\n/**\n * 检查是否为 undefined - 使用 lodash-es 的实现\n */\nexport const isUndefined: (value: unknown) => value is undefined = lodashIsUndefined\n\n/**\n * 检查是否为 URL 对象(浏览器环境)\n */\nexport function isURL(value: unknown): value is URL {\n return typeof URL !== 'undefined' && value instanceof URL\n}\n\n/**\n * 检查是否为 URLSearchParams 对象(浏览器环境)\n */\nexport function isURLSearchParams(value: unknown): value is URLSearchParams {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams\n}\n\n/**\n * 检查是否为 WeakMap - 使用 lodash-es 的实现\n */\nexport const isWeakMap: (value: unknown) => value is WeakMap<object, any> = _isWeakMap\n\n/**\n * 检查是否为 WeakSet - 使用 lodash-es 的实现\n */\nexport const isWeakSet: (value: unknown) => value is WeakSet<object> = _isWeakSet\n\n/**\n * 检查是否为 Window 对象(浏览器环境)\n */\nexport function isWindow(value: unknown): value is Window {\n return isBrowser() && value === window\n}\n\n/**\n * 检查是否为 Document 对象(浏览器环境)\n */\nexport function isDocument(value: unknown): value is Document {\n return isBrowser() && value === document\n}\n\n/**\n * 检查是否为 Event 对象(浏览器环境)\n */\nexport function isEvent(value: unknown): value is Event {\n return isBrowser() && value instanceof Event\n}\n\n/**\n * 检查是否为 Primitive 类型\n */\nexport function isPrimitive(value: unknown): value is Primitive {\n return (\n isString(value) ||\n isNumber(value) ||\n isBoolean(value) ||\n isSymbol(value) ||\n isBigInt(value) ||\n isNull(value) ||\n isUndefined(value)\n )\n}\n\n/**\n * 检查是否为 Iterable 对象\n */\nexport function isIterable(value: unknown): value is Iterable<any> {\n return value != null && typeof (value as any)[Symbol.iterator] === 'function'\n}\n\n/**\n * 检查是否为 AsyncIterable 对象\n */\nexport function isAsyncIterable(value: unknown): value is AsyncIterable<any> {\n return value != null && typeof (value as any)[Symbol.asyncIterator] === 'function'\n}\n\n/**\n * 检查是否为 Iterator 对象\n */\nexport function isIterator(value: unknown): value is Iterator<any> {\n return value != null && typeof (value as any).next === 'function'\n}\n\n/**\n * 检查是否为 Array Iterator\n */\nexport function isArrayIterator(value: unknown): boolean {\n return getTag(value) === '[object Array Iterator]'\n}\n\n/**\n * 检查是否为 Map Iterator\n */\nexport function isMapIterator(value: unknown): boolean {\n return getTag(value) === '[object Map Iterator]'\n}\n\n/**\n * 检查是否为 Set Iterator\n */\nexport function isSetIterator(value: unknown): boolean {\n return getTag(value) === '[object Set Iterator]'\n}\n\n/**\n * 检查是否为 String Iterator\n */\nexport function isStringIterator(value: unknown): boolean {\n return getTag(value) === '[object String Iterator]'\n}\n\n/**\n * 检查是否为可序列化的 JSON 值\n */\nexport function isJSONSerializable(value: unknown): boolean {\n if (isPrimitive(value)) {\n return !isUndefined(value)\n }\n\n if (isArray(value)) {\n return value.every(isJSONSerializable)\n }\n\n if (isPlainObject(value)) {\n return Object.values(value as AnyObject).every(isJSONSerializable)\n }\n\n return false\n}\n\n/**\n * 检查是否为有效的数组索引\n */\nexport function isArrayIndex(value: unknown): boolean {\n if (!isNumber(value) && !isString(value)) {\n return false\n }\n\n const num = Number(value)\n return (\n isInteger(num) && num >= 0 && num < Number.MAX_SAFE_INTEGER && String(num) === String(value)\n )\n}\n\n/**\n * 检查是否为有效的 Email 地址\n */\nexport function isEmail(value: unknown): value is string {\n if (!isString(value)) return false\n\n const emailRegex = /^[^\\s@]+@[^\\s@][^\\s.@]*\\.[^\\s@]+$/\n return emailRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 URL 字符串\n */\nexport function isURLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new URL(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的手机号码(中国)\n */\nexport function isChinesePhone(value: unknown): value is string {\n if (!isString(value)) return false\n\n const phoneRegex = /^1[3-9]\\d{9}$/\n return phoneRegex.test(value)\n}\n\n/**\n * 检查是否为有效的身份证号码(中国)\n */\nexport function isChineseIDCard(value: unknown): value is string {\n if (!isString(value)) return false\n\n const idCardRegex =\n /^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|1[0-2])(?:[0-2][1-9]|10|20|30|31)\\d{3}[0-9X]$/i\n if (!idCardRegex.test(value)) return false\n\n // 验证校验码\n const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]\n const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']\n\n let sum = 0\n for (let i = 0; i < 17; i++) {\n sum += Number.parseInt(value[i]) * weights[i]\n }\n\n const checkCode = checkCodes[sum % 11]\n return checkCode === value[17].toUpperCase()\n}\n\n/**\n * 检查是否为有效的邮政编码(中国)\n */\nexport function isChinesePostalCode(value: unknown): value is string {\n if (!isString(value)) return false\n\n const postalCodeRegex = /^[1-9]\\d{5}$/\n return postalCodeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 JSON 字符串\n */\nexport function isJSONString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n JSON.parse(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为 Base64 字符串\n */\nexport function isBase64(value: unknown): value is string {\n if (!isString(value)) return false\n\n const base64Regex = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i\n return base64Regex.test(value)\n}\n\n/**\n * 检查是否为 Hex 颜色值\n */\nexport function isHexColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hexColorRegex = /^#?[a-f0-9]{6}$|^#?[a-f0-9]{3}$/i\n return hexColorRegex.test(value)\n}\n\n/**\n * 检查是否为 RGB 颜色值\n */\nexport function isRGBColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const rgbColorRegex = /^rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)$/\n return rgbColorRegex.test(value)\n}\n\n/**\n * 检查是否为 HSL 颜色值\n */\nexport function isHSLColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hslColorRegex = /^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/\n return hslColorRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期字符串\n */\nexport function isDateString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const date = new Date(value)\n return !isNaN(date.getTime())\n}\n\n/**\n * 检查是否为有效的时间字符串\n */\nexport function isTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const timeRegex = /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/\n return timeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期时间字符串\n */\nexport function isDateTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?$/\n return dateTimeRegex.test(value) && !isNaN(new Date(value).getTime())\n}\n\n/**\n * 检查是否为有效的时区\n */\nexport function isTimezone(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n Intl.DateTimeFormat(undefined, { timeZone: value })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的正则表达式字符串\n */\nexport function isRegExpString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new RegExp(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 XML 字符串\n */\nexport function isXMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const xmlDoc = parser.parseFromString(value, 'application/xml')\n return xmlDoc.getElementsByTagName('parsererror').length === 0\n }\n return false\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 HTML 字符串\n */\nexport function isHTMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const htmlDoc = parser.parseFromString(value, 'text/html')\n return htmlDoc.body.children.length > 0\n }\n return false\n } catch {\n return false\n }\n}\n","/**\n * 格式化数字\n * @param number 输入的数字\n * @param decimals 保留小数位数\n * @param thousands_sep 千分位分隔符\n * @returns 格式化后的字符串\n */\nexport function formatNumber(\n number: number | string | null | undefined,\n decimals = 2,\n thousands_sep = ',',\n): string {\n if (number === null || number === undefined || number === '') return ''\n\n let num = Number.parseFloat(String(number))\n if (Number.isNaN(num)) return ''\n\n num = Math.round(num * 10 ** decimals) / 10 ** decimals\n const numStr = num.toFixed(decimals)\n\n const parts = numStr.split('.')\n if (thousands_sep) {\n const re = /(-?\\d+)(\\d{3})/\n while (re.test(parts[0])) {\n parts[0] = parts[0].replace(re, `$1${thousands_sep}$2`)\n }\n }\n\n return parts.join('.')\n}\n\n/**\n * 格式化数字\n * @param number 输入的数字\n */\nexport function toThousands(number: number | string): string {\n if (number === null || number === undefined || number === '') return ''\n\n const n = Number(number)\n if (Number.isNaN(n)) return ''\n\n return n.toLocaleString('en-US')\n}\n","/**\n * 设置 Cookie\n * @param name Cookie 名称\n * @param value Cookie 值\n * @param days 过期天数,默认 7 天\n * @param path 路径,默认 '/'\n * @param domain 域名\n * @param secure 是否仅在 HTTPS 下传输\n */\nexport function setCookie(\n name: string,\n value: string,\n days: number = 1,\n path: string = '/',\n domain?: string,\n secure: boolean = false,\n): void {\n let expires = ''\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = `; expires=${date.toUTCString()}`\n }\n let cookieString = `${name}=${encodeURIComponent(value)}${expires}; path=${path}`\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n if (secure) {\n cookieString += '; secure'\n }\n // 添加 SameSite 属性以提高安全性\n cookieString += '; SameSite=Lax'\n document.cookie = cookieString\n}\n\n/**\n * 获取 Cookie\n * @param name Cookie 名称\n * @returns Cookie 值,如果不存在则返回 null\n */\nexport function getCookie(name: string): string | null {\n const nameEQ = `${name}=`\n const ca = document.cookie.split(';')\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length)\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length))\n }\n }\n return null\n}\n\n/**\n * 删除 Cookie\n * @param name Cookie 名称\n * @param path 路径,默认 '/'\n * @param domain 域名\n */\nexport function removeCookie(name: string, path: string = '/', domain?: string): void {\n let cookieString = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${path}`\n\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n\n document.cookie = cookieString\n}\n\n/**\n * 检查 Cookie 是否存在\n * @param name Cookie 名称\n * @returns 是否存在\n */\nexport function hasCookie(name: string): boolean {\n return getCookie(name) !== null\n}\n","/**\n * 生成唯一标识(时间戳 + 随机数)\n * @param prefix 前缀\n * @returns 唯一标识\n */\nexport function generateUniqueId(prefix?: string) {\n const timestamp = Date.now().toString(36)\n const random = Math.random().toString(36).substring(2, 8)\n return `${prefix || ''}${timestamp}_${random}`\n}\n","/**\n * 环境变量\n * @param appEnv 环境变量 import.meta.env.APP_ENV\n * @returns 环境变量对象\n */\nexport function env(appEnv?: string) {\n const isDev = appEnv === 'development'\n const isTest = appEnv === 'test'\n const isPre = appEnv === 'pre-release'\n const isProd = appEnv === 'production'\n return {\n isDev,\n isTest,\n isPre,\n isProd,\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/date.ts","../src/math.ts","../src/is.ts","../src/format.ts","../src/cookie.ts","../src/function.ts","../src/env.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport type { Dayjs } from 'dayjs'\n\n/**\n * 校验日期是否与指定日期相同或晚于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或晚于指定日期\n */\nexport function isSameOrAfterDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isAfter(dayjs(day), 'day')\n}\n\n/**\n * 校验日期是否与指定日期相同或早于指定日期\n * @param date 日期\n * @param day 指定日期\n * @returns 是否相同或早于指定日期\n */\nexport function isSameOrBeforeDay(date: string | Dayjs, day: string | Dayjs) {\n return dayjs(date).isSame(dayjs(day), 'day') || dayjs(date).isBefore(dayjs(day), 'day')\n}\n","import { add, bignumber, divide, multiply, subtract } from 'mathjs'\n\nimport { isFinite } from './is'\n\n// 含税金额 = 重量 * 含税单价\nexport const computeTaxAmountFn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税金额 = 重量 * 含税单价(负数反向四舍五入)\nexport const computeTaxAmount2Fn = (weight: number, price: number): number => {\n if (!isFinite(price) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const priceBig = bignumber(price)\n const value = Number(multiply(weightBig, priceBig))\n return value\n}\n\n// 含税单价 = 含税金额 / 重量\nexport const computePriceFn = (taxAmount: number, weight: number): number => {\n if (!isFinite(taxAmount) || !isFinite(weight) || weight <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(taxAmountBig, weightBig))\n return value\n}\n\n// 重量 = 含税金额 / 含税单价\nexport const computeWeightFn = (taxAmount: number, price: number): number => {\n if (!isFinite(taxAmount) || !isFinite(price) || price <= 0) return 0\n const taxAmountBig = bignumber(taxAmount)\n const priceBig = bignumber(price)\n const value = Number(divide(taxAmountBig, priceBig))\n return value\n}\n\n// 含税单价 = 无税单价 * (1 + 税率)\nexport const computePrice2Fn = (noTaxPrice: number, taxRate: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(taxRate)) return 0\n const noTaxPriceBig = bignumber(noTaxPrice)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(multiply(noTaxPriceBig, add(1, taxRateBig)))\n return value\n}\n\n// 无税单价 = 含税单价 / (1 + 税率)\nexport const computeNoTaxPriceFn = (price: number, taxRate: number): number => {\n if (!isFinite(price) || !isFinite(taxRate)) return 0\n const priceBig = bignumber(price)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(priceBig, add(1, taxRateBig)))\n return value\n}\n\n// 税率 = 含税单价 / 无税单价 - 1\nexport const computeTaxRateFn = (price: number, noTaxPrice: number): number => {\n if (!isFinite(price) || !isFinite(noTaxPrice)) return 0\n const priceBig = bignumber(price)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(subtract(divide(priceBig, noTaxPriceBig), 1))\n return value\n}\n\n// 无税单价 = 无税金额 / 重量\nexport const computeNoTaxPrice2Fn = (noTaxAmount: number, weight: number): number => {\n if (!isFinite(noTaxAmount) || !isFinite(weight) || weight <= 0) return 0\n const noTaxAmountBig = bignumber(noTaxAmount)\n const weightBig = bignumber(weight)\n const value = Number(divide(noTaxAmountBig, weightBig))\n return value\n}\n\n// 无税金额 = 重量 * 无税单价\nexport const computeNoTaxAmountFn = (weight: number, noTaxPrice: number): number => {\n if (!isFinite(noTaxPrice) || !isFinite(weight)) return 0\n const weightBig = bignumber(weight)\n const noTaxPriceBig = bignumber(noTaxPrice)\n const value = Number(multiply(weightBig, noTaxPriceBig))\n return value\n}\n\n// 无税金额 = 含税金额 / (1 + 税率)\nexport const computeNoTaxAmount2Fn = (taxAmount: number, taxRate: number): number => {\n if (!isFinite(taxAmount) || !isFinite(taxRate)) return 0\n const taxAmountBig = bignumber(taxAmount)\n const taxRateBig = divide(taxRate, 100)\n const value = Number(divide(taxAmountBig, add(1, taxRateBig)))\n return value\n}\n\n// 税额 = 含税金额 - 无税金额\nexport const computeTaxFn = (taxAmount: number, noTaxAmount: number): number => {\n const taxAmountBig = bignumber(taxAmount || 0)\n const noTaxAmountBig = bignumber(noTaxAmount || 0)\n const value = Number(subtract(taxAmountBig, noTaxAmountBig))\n return value\n}\n\n// 数量 = 重量 / 单重\nexport const computeGoodsNumFn = (weight: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(weight) || weight1 <= 0) return 0\n const weightBig = bignumber(weight)\n const weight1Big = bignumber(weight1)\n const value = Number(divide(weightBig, weight1Big))\n return value\n}\n\n// 重量 = 数量 * 单重\nexport const computeGoodsWeightFn = (num: number, weight1: number): number => {\n if (!isFinite(weight1) || !isFinite(num) || weight1 <= 0) return 0\n const numBig = bignumber(num)\n const weight1Big = bignumber(weight1)\n const value = Number(multiply(numBig, weight1Big))\n return value\n}\n\n// ==================== 通用:加减乘除(BigNumber 计算) ====================\n// 加法:a + b\nexport const addFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(add(aBig, bBig))\n}\n\n/**\n * 合计\n * @param arr 数组\n * @param key 键名\n * @returns 合计值\n */\nexport function sumBy<T>(arr: T[], key: keyof T): number {\n return arr.reduce((acc, cur) => addFn(acc, Number(cur[key])), 0)\n}\n\n// 减法:a - b\nexport const subtractFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(subtract(aBig, bBig))\n}\n\n// 乘法:a × b\nexport const multiplyFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b)) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(multiply(aBig, bBig))\n}\n\n// 除法:a ÷ b(b <= 0 时返回 0)\nexport const divideFn = (a: number, b: number): number => {\n if (!isFinite(a) || !isFinite(b) || b === 0) return 0\n const aBig = bignumber(a)\n const bBig = bignumber(b)\n return Number(divide(aBig, bBig))\n}\n","import {\n isArguments as _isArguments,\n isArray as _isArray,\n isArrayBuffer as _isArrayBuffer,\n isArrayLike as _isArrayLike,\n isArrayLikeObject as _isArrayLikeObject,\n isBoolean as _isBoolean,\n isDate as _isDate,\n isElement as _isElement,\n isEqual as _isEqual,\n isError as _isError,\n isFinite as _isFinite,\n isInteger as _isInteger,\n isLength as _isLength,\n isMap as _isMap,\n isMatch as _isMatch,\n isNative as _isNative,\n isNull as _isNull,\n isObjectLike as _isObjectLike,\n isPlainObject as _isPlainObject,\n isRegExp as _isRegExp,\n isSafeInteger as _isSafeInteger,\n isSet as _isSet,\n isSymbol as _isSymbol,\n isTypedArray as _isTypedArray,\n isWeakMap as _isWeakMap,\n isWeakSet as _isWeakSet,\n isEmpty as lodashIsEmpty,\n isFunction as lodashIsFunction,\n isNaN as lodashIsNaN,\n isNil as lodashIsNil,\n isNumber as lodashIsNumber,\n isObject as lodashIsObject,\n isString as lodashIsString,\n isUndefined as lodashIsUndefined,\n} from 'lodash-es'\n\n// 类型定义\ntype AnyFunction = (...args: any[]) => any\ntype AnyObject = Record<string, any>\ntype Primitive = string | number | boolean | symbol | bigint | null | undefined\n\n/**\n * 获取值的类型标签\n */\nconst getTag = (value: unknown): string => {\n return Object.prototype.toString.call(value)\n}\n\n/**\n * 检查是否为数组 - 使用 lodash-es 的实现\n */\nexport const isArray: (value: unknown) => value is any[] = _isArray\n\n/**\n * 检查是否为 ArrayBuffer\n */\nexport const isArrayBuffer: (value: unknown) => value is ArrayBuffer = _isArrayBuffer\n\n/**\n * 检查是否为 AsyncFunction\n */\nexport function isAsyncFunction(value: unknown): value is AnyFunction {\n return (\n getTag(value) === '[object AsyncFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'AsyncFunction')\n )\n}\n\n/**\n * 检查是否为 BigInt\n */\nexport function isBigInt(value: unknown): value is bigint {\n return typeof value === 'bigint' || getTag(value) === '[object BigInt]'\n}\n\n/**\n * 检查是否为 Blob 对象(浏览器环境)\n */\nexport function isBlob(value: unknown): value is Blob {\n return typeof Blob !== 'undefined' && value instanceof Blob\n}\n\n/**\n * 检查是否为布尔值 - 使用 lodash-es 的实现\n */\nexport const isBoolean: (value: unknown) => value is boolean = _isBoolean\n\n/**\n * 检查是否为类数组\n */\nexport const isArrayLike: (value: unknown) => boolean = _isArrayLike\n\n/**\n * 检查是否为类数组对象\n */\nexport const isArrayLikeObject: (value: unknown) => boolean = _isArrayLikeObject\n\n/**\n * 检查是否为类数组参数\n */\nexport const isArguments: (value: unknown) => boolean = _isArguments\n\n/**\n * 检查是否为 Date 对象 - 使用 lodash-es 的实现\n */\nexport const isDate: (value: unknown) => value is Date = _isDate\n\n/**\n * 检查是否为 DOM 元素 - 使用 lodash-es 的实现\n */\nexport const isElement: (value: unknown) => boolean = _isElement\n\n/**\n * 检查是否为空值 - 使用 lodash-es 的实现\n */\nexport const isEmpty: (value: unknown) => boolean = lodashIsEmpty\n\n/**\n * 检查是否严格相等 - 使用 lodash-es 的实现\n */\nexport const isEqual: (value: unknown, other: unknown) => boolean = _isEqual\n\n/**\n * 检查是否为 Error 对象 - 使用 lodash-es 的实现\n */\nexport const isError: (value: unknown) => value is Error = _isError\n\n/**\n * 检查是否为 File 对象(浏览器环境)\n */\nexport function isFile(value: unknown): value is File {\n return typeof File !== 'undefined' && value instanceof File\n}\n\n/**\n * 检查是否为 FormData 对象(浏览器环境)\n */\nexport function isFormData(value: unknown): value is FormData {\n return typeof FormData !== 'undefined' && value instanceof FormData\n}\n\n/**\n * 检查是否为函数 - 使用 lodash-es 的实现\n */\nexport const isFunction: (value: unknown) => value is AnyFunction = lodashIsFunction\n\n/**\n * 检查是否为 GeneratorFunction\n */\nexport function isGeneratorFunction(value: unknown): value is GeneratorFunction {\n return (\n getTag(value) === '[object GeneratorFunction]' ||\n (typeof value === 'function' && (value as any).constructor.name === 'GeneratorFunction')\n )\n}\n\n/**\n * 检查是否为整数 - 使用 lodash-es 的实现\n */\nexport const isInteger: (value: unknown) => boolean = _isInteger\n\n/**\n * 检查是否为有限数 - 使用 lodash-es 的实现\n */\nexport const isFinite: (value: unknown) => boolean = _isFinite\n\n/**\n * 检查是否为有效长度 - 使用 lodash-es 的实现\n */\nexport const isLength: (value: unknown) => boolean = _isLength\n\n/**\n * 检查是否为 Map - 使用 lodash-es 的实现\n */\nexport const isMap: (value: unknown) => value is Map<any, any> = _isMap\n\n/**\n * 检查是否为 NaN - 使用 lodash-es 的实现\n */\nexport const isNaN: (value: unknown) => boolean = lodashIsNaN\n\n/**\n * 检查是否为 null 或 undefined - 使用 lodash-es 的实现\n */\nexport const isNil: (value: unknown) => value is null | undefined = lodashIsNil\n\n/**\n * 检查是否为 null - 使用 lodash-es 的实现\n */\nexport const isNull: (value: unknown) => value is null = _isNull\n\n/**\n * 检查是否为数字 - 使用 lodash-es 的实现\n */\nexport const isNumber: (value: unknown) => value is number = lodashIsNumber\n\n/**\n * 检查是否为对象 - 使用 lodash-es 的实现\n */\nexport const isObject: (value: unknown) => value is object = lodashIsObject\n\n/**\n * 检查是否为类对象 - 使用 lodash-es 的实现\n */\nexport const isObjectLike: (value: unknown) => boolean = _isObjectLike\n\n/**\n * 检查是否为普通对象 - 使用 lodash-es 的实现\n */\nexport const isPlainObject: (value: unknown) => boolean = _isPlainObject\n\n/**\n * 检查是否匹配对象 - 使用 lodash-es 的实现\n */\nexport const isMatch: (object: object, source: object) => boolean = _isMatch\n\n/**\n * 检查是否为原生函数 - 使用 lodash-es 的实现\n */\nexport const isNative: (value: unknown) => boolean = _isNative\n\n/**\n * 检查是否为浏览器环境\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined'\n}\n\n/**\n * 检查是否为 Promise\n */\nexport function isPromise(value: unknown): value is Promise<any> {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as any).then === 'function'\n )\n}\n\n/**\n * 检查是否为 RegExp - 使用 lodash-es 的实现\n */\nexport const isRegExp: (value: unknown) => value is RegExp = _isRegExp\n\n/**\n * 检查是否为安全整数 - 使用 lodash-es 的实现\n */\nexport const isSafeInteger: (value: unknown) => boolean = _isSafeInteger\n\n/**\n * 检查是否为 Set - 使用 lodash-es 的实现\n */\nexport const isSet: (value: unknown) => value is Set<any> = _isSet\n\n/**\n * 检查是否为字符串 - 使用 lodash-es 的实现\n */\nexport const isString: (value: unknown) => value is string = lodashIsString\n\n/**\n * 检查是否为 Symbol - 使用 lodash-es 的实现\n */\nexport const isSymbol: (value: unknown) => value is symbol = _isSymbol\n\n/**\n * 检查是否为 TypedArray - 使用 lodash-es 的实现\n */\nexport const isTypedArray: (value: unknown) => boolean = _isTypedArray\n\n/**\n * 检查是否为 undefined - 使用 lodash-es 的实现\n */\nexport const isUndefined: (value: unknown) => value is undefined = lodashIsUndefined\n\n/**\n * 检查是否为 URL 对象(浏览器环境)\n */\nexport function isURL(value: unknown): value is URL {\n return typeof URL !== 'undefined' && value instanceof URL\n}\n\n/**\n * 检查是否为 URLSearchParams 对象(浏览器环境)\n */\nexport function isURLSearchParams(value: unknown): value is URLSearchParams {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams\n}\n\n/**\n * 检查是否为 WeakMap - 使用 lodash-es 的实现\n */\nexport const isWeakMap: (value: unknown) => value is WeakMap<object, any> = _isWeakMap\n\n/**\n * 检查是否为 WeakSet - 使用 lodash-es 的实现\n */\nexport const isWeakSet: (value: unknown) => value is WeakSet<object> = _isWeakSet\n\n/**\n * 检查是否为 Window 对象(浏览器环境)\n */\nexport function isWindow(value: unknown): value is Window {\n return isBrowser() && value === window\n}\n\n/**\n * 检查是否为 Document 对象(浏览器环境)\n */\nexport function isDocument(value: unknown): value is Document {\n return isBrowser() && value === document\n}\n\n/**\n * 检查是否为 Event 对象(浏览器环境)\n */\nexport function isEvent(value: unknown): value is Event {\n return isBrowser() && value instanceof Event\n}\n\n/**\n * 检查是否为 Primitive 类型\n */\nexport function isPrimitive(value: unknown): value is Primitive {\n return (\n isString(value) ||\n isNumber(value) ||\n isBoolean(value) ||\n isSymbol(value) ||\n isBigInt(value) ||\n isNull(value) ||\n isUndefined(value)\n )\n}\n\n/**\n * 检查是否为 Iterable 对象\n */\nexport function isIterable(value: unknown): value is Iterable<any> {\n return value != null && typeof (value as any)[Symbol.iterator] === 'function'\n}\n\n/**\n * 检查是否为 AsyncIterable 对象\n */\nexport function isAsyncIterable(value: unknown): value is AsyncIterable<any> {\n return value != null && typeof (value as any)[Symbol.asyncIterator] === 'function'\n}\n\n/**\n * 检查是否为 Iterator 对象\n */\nexport function isIterator(value: unknown): value is Iterator<any> {\n return value != null && typeof (value as any).next === 'function'\n}\n\n/**\n * 检查是否为 Array Iterator\n */\nexport function isArrayIterator(value: unknown): boolean {\n return getTag(value) === '[object Array Iterator]'\n}\n\n/**\n * 检查是否为 Map Iterator\n */\nexport function isMapIterator(value: unknown): boolean {\n return getTag(value) === '[object Map Iterator]'\n}\n\n/**\n * 检查是否为 Set Iterator\n */\nexport function isSetIterator(value: unknown): boolean {\n return getTag(value) === '[object Set Iterator]'\n}\n\n/**\n * 检查是否为 String Iterator\n */\nexport function isStringIterator(value: unknown): boolean {\n return getTag(value) === '[object String Iterator]'\n}\n\n/**\n * 检查是否为可序列化的 JSON 值\n */\nexport function isJSONSerializable(value: unknown): boolean {\n if (isPrimitive(value)) {\n return !isUndefined(value)\n }\n\n if (isArray(value)) {\n return value.every(isJSONSerializable)\n }\n\n if (isPlainObject(value)) {\n return Object.values(value as AnyObject).every(isJSONSerializable)\n }\n\n return false\n}\n\n/**\n * 检查是否为有效的数组索引\n */\nexport function isArrayIndex(value: unknown): boolean {\n if (!isNumber(value) && !isString(value)) {\n return false\n }\n\n const num = Number(value)\n return (\n isInteger(num) && num >= 0 && num < Number.MAX_SAFE_INTEGER && String(num) === String(value)\n )\n}\n\n/**\n * 检查是否为有效的 Email 地址\n */\nexport function isEmail(value: unknown): value is string {\n if (!isString(value)) return false\n\n const emailRegex = /^[^\\s@]+@[^\\s@][^\\s.@]*\\.[^\\s@]+$/\n return emailRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 URL 字符串\n */\nexport function isURLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new URL(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的手机号码(中国)\n */\nexport function isChinesePhone(value: unknown): value is string {\n if (!isString(value)) return false\n\n const phoneRegex = /^1[3-9]\\d{9}$/\n return phoneRegex.test(value)\n}\n\n/**\n * 检查是否为有效的身份证号码(中国)\n */\nexport function isChineseIDCard(value: unknown): value is string {\n if (!isString(value)) return false\n\n const idCardRegex =\n /^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0[1-9]|1[0-2])(?:[0-2][1-9]|10|20|30|31)\\d{3}[0-9X]$/i\n if (!idCardRegex.test(value)) return false\n\n // 验证校验码\n const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]\n const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']\n\n let sum = 0\n for (let i = 0; i < 17; i++) {\n sum += Number.parseInt(value[i]) * weights[i]\n }\n\n const checkCode = checkCodes[sum % 11]\n return checkCode === value[17].toUpperCase()\n}\n\n/**\n * 检查是否为有效的邮政编码(中国)\n */\nexport function isChinesePostalCode(value: unknown): value is string {\n if (!isString(value)) return false\n\n const postalCodeRegex = /^[1-9]\\d{5}$/\n return postalCodeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的 JSON 字符串\n */\nexport function isJSONString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n JSON.parse(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为 Base64 字符串\n */\nexport function isBase64(value: unknown): value is string {\n if (!isString(value)) return false\n\n const base64Regex = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i\n return base64Regex.test(value)\n}\n\n/**\n * 检查是否为 Hex 颜色值\n */\nexport function isHexColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hexColorRegex = /^#?[a-f0-9]{6}$|^#?[a-f0-9]{3}$/i\n return hexColorRegex.test(value)\n}\n\n/**\n * 检查是否为 RGB 颜色值\n */\nexport function isRGBColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const rgbColorRegex = /^rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)$/\n return rgbColorRegex.test(value)\n}\n\n/**\n * 检查是否为 HSL 颜色值\n */\nexport function isHSLColor(value: unknown): value is string {\n if (!isString(value)) return false\n\n const hslColorRegex = /^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/\n return hslColorRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期字符串\n */\nexport function isDateString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const date = new Date(value)\n return !isNaN(date.getTime())\n}\n\n/**\n * 检查是否为有效的时间字符串\n */\nexport function isTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const timeRegex = /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/\n return timeRegex.test(value)\n}\n\n/**\n * 检查是否为有效的日期时间字符串\n */\nexport function isDateTimeString(value: unknown): value is string {\n if (!isString(value)) return false\n\n const dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?$/\n return dateTimeRegex.test(value) && !isNaN(new Date(value).getTime())\n}\n\n/**\n * 检查是否为有效的时区\n */\nexport function isTimezone(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n Intl.DateTimeFormat(undefined, { timeZone: value })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的正则表达式字符串\n */\nexport function isRegExpString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n const _ = new RegExp(value)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 XML 字符串\n */\nexport function isXMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const xmlDoc = parser.parseFromString(value, 'application/xml')\n return xmlDoc.getElementsByTagName('parsererror').length === 0\n }\n return false\n } catch {\n return false\n }\n}\n\n/**\n * 检查是否为有效的 HTML 字符串\n */\nexport function isHTMLString(value: unknown): value is string {\n if (!isString(value)) return false\n\n try {\n if (isBrowser()) {\n const parser = new DOMParser()\n const htmlDoc = parser.parseFromString(value, 'text/html')\n return htmlDoc.body.children.length > 0\n }\n return false\n } catch {\n return false\n }\n}\n","/**\n * 格式化数字\n * @param number 输入的数字\n * @param decimals 保留小数位数\n * @param thousands_sep 千分位分隔符\n * @returns 格式化后的字符串\n */\nexport function formatNumber(\n number: number | string | null | undefined,\n decimals = 2,\n thousands_sep = ',',\n): string {\n if (number === null || number === undefined || number === '') return ''\n\n let num = Number.parseFloat(String(number))\n if (Number.isNaN(num)) return ''\n\n num = Math.round(num * 10 ** decimals) / 10 ** decimals\n const numStr = num.toFixed(decimals)\n\n const parts = numStr.split('.')\n if (thousands_sep) {\n const re = /(-?\\d+)(\\d{3})/\n while (re.test(parts[0])) {\n parts[0] = parts[0].replace(re, `$1${thousands_sep}$2`)\n }\n }\n\n return parts.join('.')\n}\n\n/**\n * 格式化数字\n * @param number 输入的数字\n */\nexport function toThousands(number: number | string): string {\n if (number === null || number === undefined || number === '') return ''\n\n const n = Number(number)\n if (Number.isNaN(n)) return ''\n\n return n.toLocaleString('en-US')\n}\n","/**\n * 设置 Cookie\n * @param name Cookie 名称\n * @param value Cookie 值\n * @param days 过期天数,默认 7 天\n * @param path 路径,默认 '/'\n * @param domain 域名\n * @param secure 是否仅在 HTTPS 下传输\n */\nexport function setCookie(\n name: string,\n value: string,\n days: number = 1,\n path: string = '/',\n domain?: string,\n secure: boolean = false,\n): void {\n let expires = ''\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = `; expires=${date.toUTCString()}`\n }\n let cookieString = `${name}=${encodeURIComponent(value)}${expires}; path=${path}`\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n if (secure) {\n cookieString += '; secure'\n }\n // 添加 SameSite 属性以提高安全性\n cookieString += '; SameSite=Lax'\n document.cookie = cookieString\n}\n\n/**\n * 获取 Cookie\n * @param name Cookie 名称\n * @returns Cookie 值,如果不存在则返回 null\n */\nexport function getCookie(name: string): string | null {\n const nameEQ = `${name}=`\n const ca = document.cookie.split(';')\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length)\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length))\n }\n }\n return null\n}\n\n/**\n * 删除 Cookie\n * @param name Cookie 名称\n * @param path 路径,默认 '/'\n * @param domain 域名\n */\nexport function removeCookie(name: string, path: string = '/', domain?: string): void {\n let cookieString = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${path}`\n\n if (domain) {\n cookieString += `; domain=${domain}`\n }\n\n document.cookie = cookieString\n}\n\n/**\n * 检查 Cookie 是否存在\n * @param name Cookie 名称\n * @returns 是否存在\n */\nexport function hasCookie(name: string): boolean {\n return getCookie(name) !== null\n}\n","/**\n * 生成唯一标识(时间戳 + 随机数)\n * @param prefix 前缀\n * @returns 唯一标识\n */\nexport function generateUniqueId(prefix?: string) {\n const timestamp = Date.now().toString(36)\n const random = Math.random().toString(36).substring(2, 8)\n return `${prefix || ''}${timestamp}_${random}`\n}\n\n/**\n * 空函数\n */\nexport const noop = () => {}\n","/**\n * 环境变量\n * @param appEnv 环境变量 import.meta.env.APP_ENV\n * @returns 环境变量对象\n */\nexport function env(appEnv?: string) {\n const isDev = appEnv === 'development'\n const isTest = appEnv === 'test'\n const isPre = appEnv === 'pre-release'\n const isProd = appEnv === 'production'\n return {\n isDev,\n isTest,\n isPre,\n isProd,\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@antsoo-lib/utils",
3
3
  "type": "module",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "private": false,
6
6
  "publishConfig": {
7
7
  "access": "public",
@@ -26,7 +26,7 @@
26
26
  "peerDependencies": {
27
27
  "dayjs": "^1.11.15",
28
28
  "lodash-es": "^4.17.21",
29
- "mathjs": "^14.2.1"
29
+ "mathjs": "^15.0.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/lodash-es": "^4.17.12"