UNPKG

@pkt/utils

Version:

1 lines 53.7 kB
{"version":3,"file":"pkt-utils.mjs","sources":["../../../../packages/utils/src/validate/validate.ts","../../../../packages/utils/src/array/array.ts","../../../../packages/utils/src/other/convert.ts","../../../../packages/utils/src/other/checkbox.ts","../../../../packages/utils/src/other/other.ts","../../../../packages/utils/src/other/tree.ts","../../../../packages/utils/src/other/string.ts","../../../../packages/utils/src/other/generator.ts","../../../../packages/utils/src/other/object.ts","../../../../packages/utils/src/other/form.ts","../../../../packages/utils/src/other/compare.ts","../../../../packages/utils/src/pkt-utils.ts"],"sourcesContent":["import type { SafeAny } from '@pkt/utils/types';\n\n/**\n * Check if value is a function.\n */\nexport function isFunction(value: SafeAny): boolean {\n return typeof value === 'function';\n}\n\n/**\n * Check if value is a valid JSON.\n */\nexport function isJson(value: SafeAny): boolean {\n try {\n JSON.parse(value);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Check if value is a string primitive.\n */\nexport function isString(value: SafeAny): boolean {\n return objToStr(value) === '[object String]';\n}\n\n/**\n * Check if value is a type primitive\n */\nexport function is(value: SafeAny, type: string): boolean {\n return objToStr(value) === `[object ${type}]`;\n}\n\n/**\n * Check if value is a string primitive.\n *\n * isNonEmptyString(''); // -> false\n */\nexport function isNonEmptyString(value: string | null | undefined | SafeAny): boolean {\n return typeof value === 'string' && value !== '';\n}\n\n/**\n * Check if value is undefined.\n *\n * isUndefined(void 0); // -> true\n */\nexport function isUndefined(value: undefined | SafeAny): boolean {\n return value === undefined;\n}\n\nexport function isUndefinedOrEmptyString(value: undefined | string | SafeAny): boolean {\n return value === undefined || value === '';\n}\n\n/**\n * Check if value is an Null.\n */\nexport function isNull(value: null | SafeAny): boolean {\n return value === null;\n}\n\n/**\n * Check if value is null or undefined, the same as value == null.\n *\n * isNullOrUndefined(null); // -> true\n * isNullOrUndefined(undefined); // -> true\n * isNullOrUndefined(void 0); // -> true\n */\nexport function isNullOrUndefined(obj: null | undefined | SafeAny): boolean {\n return obj === null || obj === undefined;\n}\n\n/**\n * Check if value is the language type of Object.\n *\n * isObject({}); // -> true\n * isObject([]); // -> true\n */\nexport function isObject(value: SafeAny): boolean {\n return value instanceof Object;\n}\n\nexport function isObjectAndNotArray(value: SafeAny): boolean {\n return isObject(value) && !Array.isArray(value);\n}\n\nexport function isObjectAndNotArrayNotNode(value: SafeAny): boolean {\n return isObjectAndNotArray(value) && !isNode(value);\n}\n\nexport function isNode(value: SafeAny) {\n return value instanceof Node;\n}\n\n/**\n * exists\n * @param obj\n * @returns boolean\n */\nexport function exists(obj: SafeAny): boolean {\n return !isNullOrUndefined(obj);\n}\n\n/**\n * Check if value is classified as a Number primitive or object.\n */\nexport function isNum(value: string | SafeAny): boolean {\n return /^((-?\\d+\\.\\d+)|(-?\\d+)|(-?\\.\\d+))$/.test(value.toString());\n}\n\n/**\n * Checks if value is classified as a Integer.\n */\nexport function isInt(value: number | SafeAny): boolean {\n return isNum(value) && value % 1 === 0;\n}\n\n/**\n * Checks if value is classified as a Decimal.\n */\nexport function isDecimal(value: number | SafeAny): boolean {\n return isNum(value) && !isInt(value);\n}\n\n/**\n * Check if number is odd.\n */\nexport function isOdd(value: number | SafeAny): boolean {\n if (!isInt(value)) {\n return false;\n }\n return value % 2 !== 0;\n}\n\n/**\n * Check if value is an IdCard.\n */\nexport function isIdCard(value: string): boolean {\n return typeof value === 'string' && /(^\\d{15}$)|(^\\d{17}([0-9]|X)$)/i.test(value);\n}\n\n/**\n * Check if value is an Mobile.\n */\nexport function isMobile(value: string): boolean {\n return (\n typeof value === 'string' &&\n /^(0|\\+?86|17951)?(13[0-9]|14[579]|15[0-9]|16[6]|17[1-3,5-8]|18[0-9]|19[189])[0-9]{8}$/.test(\n value\n )\n );\n}\n\n/**\n * Check if value is an url address.\n */\nexport function isUrl(value: string): boolean {\n // eslint-disable-next-line no-useless-escape\n return /(((^https?:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+(?::\\d+)?|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\+=&;%@.\\w_]*)#?(?:[\\w]*))?)$/.test(\n value\n );\n}\n\n/**\n * Check if value is an IP address.\n */\nexport function isIp(value: string): boolean {\n const v4 =\n '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n const regV4 = new RegExp('^'.concat(v4, '$'));\n const v6seg = '[a-fA-F\\\\d]{1,4}';\n const v6 = [\n '(',\n '(?:'.concat(v6seg, ':){7}(?:').concat(v6seg, '|:)|'),\n '(?:'.concat(v6seg, ':){6}(?:').concat(v4, '|:').concat(v6seg, '|:)|'),\n '(?:'.concat(v6seg, ':){5}(?::').concat(v4, '|(:').concat(v6seg, '){1,2}|:)|'),\n '(?:'\n .concat(v6seg, ':){4}(?:(:')\n .concat(v6seg, '){0,1}:')\n .concat(v4, '|(:')\n .concat(v6seg, '){1,3}|:)|'),\n '(?:'\n .concat(v6seg, ':){3}(?:(:')\n .concat(v6seg, '){0,2}:')\n .concat(v4, '|(:')\n .concat(v6seg, '){1,4}|:)|'),\n '(?:'\n .concat(v6seg, ':){2}(?:(:')\n .concat(v6seg, '){0,3}:')\n .concat(v4, '|(:')\n .concat(v6seg, '){1,5}|:)|'),\n '(?:'\n .concat(v6seg, ':){1}(?:(:')\n .concat(v6seg, '){0,4}:')\n .concat(v4, '|(:')\n .concat(v6seg, '){1,6}|:)|'),\n '(?::((?::'.concat(v6seg, '){0,5}:').concat(v4, '|(?::').concat(v6seg, '){1,7}|:))'),\n ')(%[0-9a-zA-Z]{1,})?'\n ].join('');\n const regV6 = new RegExp('^'.concat(v6, '$'));\n\n return regV4.test(value) || regV6.test(value);\n}\n\n/**\n * Loosely validate an email address.\n */\nexport function isEmail(value: string): boolean {\n const regEmail = /.+@.+\\..+/;\n return regEmail.test(value);\n}\n\nfunction objToStr(val: SafeAny): string {\n const ObjToStr = Object.prototype.toString;\n return ObjToStr.call(val);\n}\n","import { isObject, isNonEmptyString } from '../validate';\nimport type { SafeAny } from '@pkt/utils/types';\n\n/**\n * 数组转Json {'':''}\n * @param arr 数组\n * @param key 字段\n */\nexport function arrToJson(arr: SafeAny[], key = 'id'): SafeAny {\n const pos = {} as SafeAny;\n\n if (isNonEmptyString(key) === false) {\n for (const no of arr) {\n pos[no] = no;\n }\n return pos;\n }\n\n for (const no of arr) {\n pos[no[key]] = no;\n }\n return pos;\n}\n\n/**\n * 数组转Json(json嵌套数组) {'':[]}\n * @param arr 数组\n * @param key 字段\n */\nexport function arrToJsonArr(arr: SafeAny[], key = 'id'): SafeAny {\n const pos = {} as SafeAny;\n for (const x of arr) {\n if (!pos[x[key]]) {\n pos[x[key]] = [];\n }\n pos[x[key]].push(x);\n }\n\n return pos;\n}\n\n/**\n * json转数组\n * @param value object数组\n */\nexport function jsonToArr(value: SafeAny): SafeAny[] {\n if (!isObject(value)) {\n return [];\n }\n const temps = [];\n let temp = {};\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n temp = value[key];\n temps.push(temp);\n }\n }\n return temps;\n}\n","import { isString, isNullOrUndefined } from '../validate/validate';\nimport type { SafeAny } from '@pkt/utils/types';\n\n/**\n * Convert value to a string.\n */\nexport function toString(value: SafeAny): string {\n return isNullOrUndefined(value) ? '' : value.toString();\n}\n\nexport function toBoolean(\n value: unknown,\n defaultValue: boolean | null | undefined = false\n): boolean | null | undefined {\n return isNullOrUndefined(value) ? defaultValue : `${value}` !== 'false';\n}\n\nexport function toNumber(value: unknown): number;\nexport function toNumber<D>(value: unknown, fallback: D): number | D;\nexport function toNumber(value: unknown, fallbackValue = 0): number {\n return !isNaN(parseFloat(value as SafeAny)) && !isNaN(Number(value))\n ? Number(value)\n : fallbackValue;\n}\n\n/**\n * Returns the number of elements in the array by returning `value.length`.\n *\n * toLength([]); //=> 0\n * toLength([1, 2, 3]); //=> 3\n *\n * toLength(null); //=> NaN\n * toLength(undefined); //=> NaN\n */\nexport function toLength(value: SafeAny): number {\n if (Array.isArray(value) === true || isString(value) === true) {\n return value.length;\n }\n return NaN;\n}\n\n/**\n * Convert value to a Hash.\n * return string of length 5\n */\nexport function toHash(value: SafeAny): string {\n const length = toLength(value);\n if (isNaN(length) === true) {\n return '';\n }\n const I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');\n let hashNu = 5381;\n let i = length - 1;\n try {\n if (isString(value) === true) {\n for (; i > -1; i--) {\n hashNu += (hashNu << 5) + value.charCodeAt(i);\n }\n } else {\n for (; i > -1; i--) {\n hashNu += (hashNu << 5) + value[i];\n }\n }\n let rvalue = hashNu & 0x7fffffff;\n let retValue = '';\n do {\n retValue += I64BIT_TABLE[rvalue & 0x3f];\n } while ((rvalue >>= 6));\n return retValue;\n } catch (error) {\n return '';\n }\n}\n","import { jsonToArr } from '../array/index';\nimport { isObject } from '../validate';\nimport type { SafeAny } from '@pkt/utils/types';\n\n/**\n * 复选框(全选/多选)\n * @param id 唯一标识(默认ID)\n */\nexport function checkBox(id = 'id'): CheckResult {\n const checkbox = {\n isSelectAll: false,\n\n /**\n * 选中数量\n */\n selectCount: 0,\n\n /**\n * 获取已选中的ID数据\n */\n getIDS(): Array<SafeAny> {\n const selects = [];\n const selectvalue = checkbox.select.value;\n for (const key in selectvalue) {\n // eslint-disable-next-line no-prototype-builtins\n if (selectvalue.hasOwnProperty(key)) {\n if (selectvalue[key]) {\n selects.push(key);\n }\n }\n }\n return selects;\n },\n\n /**\n * 清空所有选择\n */\n clear(): void {\n checkbox.isSelectAll = false;\n checkbox.selectCount = 0;\n checkbox.select.value = {};\n },\n\n /**\n * 单选\n */\n select: {\n change(data: SafeAny): void {\n const selects = veriArr(data);\n if (selects.length < 1) {\n checkbox.isSelectAll = false;\n return;\n }\n\n const counts = [];\n const selectvalue = checkbox.select.value;\n for (const key in selectvalue) {\n if (selectvalue.hasOwnProperty(key)) {\n if (selectvalue[key]) {\n counts.push(key);\n }\n }\n }\n\n checkbox.isSelectAll = selects.length === counts.length;\n checkbox.selectCount = counts.length;\n },\n\n /**\n * 选择的数据\n * 格式 value: { ID:{true}, ID:{false}}\n */\n value: {} as SafeAny\n },\n\n /**\n * 全选\n */\n selectAll: {\n change(data: SafeAny): void {\n const selects = veriArr(data);\n if (selects.length < 1) {\n checkbox.isSelectAll = false;\n return;\n }\n\n // 全选\n if (checkbox.isSelectAll) {\n for (let i = selects.length; i--; ) {\n checkbox.select.value[selects[i][id]] = true;\n }\n } else {\n // 取消全选\n for (let i = selects.length; i--; ) {\n delete checkbox.select.value[selects[i][id]];\n }\n }\n\n checkbox.selectCount = jsonToArr(checkbox.select.value).length;\n }\n }\n };\n\n return checkbox;\n}\nexport interface CheckResult {\n isSelectAll: boolean;\n\n /**\n * 选中数量\n */\n selectCount: number;\n\n /**\n * 选中\n */\n select: {\n value: SafeAny;\n change(data: SafeAny): void;\n };\n\n /**\n * 全选\n */\n selectAll: {\n change(data: SafeAny): void;\n };\n\n /**\n * 获取已选中的ID数据\n */\n getIDS(): Array<SafeAny>;\n\n /**\n * 清空所有选择\n */\n clear(): void;\n}\n\nfunction veriArr(data: SafeAny): Array<SafeAny> {\n if (!data) {\n return [];\n }\n if (Array.isArray(data)) {\n return data;\n }\n if (isObject(data)) {\n return jsonToArr(data);\n }\n return [];\n}\n","import type { SafeAny } from '@pkt/utils/types';\n\n/**\n * A no-operation function.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop(): void {}\n\n/**\n *\n * 获取浏览器的语言\n *\n * @returns 例如 `\"zh\"`\n */\nexport function getBrowserLang(): string | undefined {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined;\n }\n\n // to avoid compiler mis-error.\n const w: SafeAny = window;\n let browserLang: SafeAny = w.navigator.languages ? w.navigator.languages[0] : null;\n browserLang =\n browserLang || w.navigator.language || w.navigator.browserLanguage || w.navigator.userLanguage;\n\n if (browserLang.indexOf('-') !== -1) {\n browserLang = browserLang.split('-')[0];\n }\n\n if (browserLang.indexOf('_') !== -1) {\n browserLang = browserLang.split('_')[0];\n }\n\n return browserLang;\n}\n\n/**\n *\n * 获取浏览器的语言\n *\n * @returns 例如 `\"zh-CN\"`\n */\nexport function getBrowserCultureLang(): string | undefined {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined;\n }\n\n // to avoid compiler mis-error.\n const w: SafeAny = window;\n let browserCultureLang: SafeAny = w.navigator.languages ? w.navigator.languages[0] : null;\n browserCultureLang =\n browserCultureLang ||\n w.navigator.language ||\n w.navigator.browserLanguage ||\n w.navigator.userLanguage;\n\n return browserCultureLang;\n}\n","import type { SafeAny } from '@pkt/utils/types';\n\n/**\n * 列表转树结构\n * @param arr 数组\n * @param id 条件id\n * @param pid 父级id\n * @param childName 子节点集合属性名\n * @returns T[]\n */\nexport function arrToTree<T = SafeAny>(\n arr: SafeAny[],\n id = 'id',\n pid = 'parentId',\n childName = 'children'\n): T[] {\n const nodeMap = new Map();\n const result: T[] = [];\n\n for (const node of arr) {\n node[childName] = node[childName] || [];\n nodeMap.set(node[id], node);\n }\n\n for (const node of arr) {\n const parent = nodeMap.get(node[pid]);\n (parent ? parent[childName] : result).push(node);\n }\n\n return result;\n}\n\n/**\n * 树结构转列表\n * @param tree 树结构数据\n * @param childName 子节点集合属性名\n * @returns T[]\n */\nexport function treeToArr<T = SafeAny>(tree: SafeAny[], childName = 'children'): T[] {\n const result = [...tree];\n\n for (let i = 0; i < result.length; i++) {\n if (!result[i][childName]) {\n continue;\n }\n result.splice(i + 1, 0, ...result[i][childName]);\n }\n return result;\n}\n\n/**\n * 查找符合条件的单个节点\n * @param tree 树结构数据\n * @param func 条件\n * @param childName 子节点集合属性名\n * @returns T or null\n */\nexport function findTreeNode<T = SafeAny>(\n tree: SafeAny[],\n func: (n: T) => boolean,\n childName = 'children'\n): T | null {\n const list = [...tree];\n\n for (const node of list) {\n if (func(node)) {\n return node;\n }\n node[childName] && list.push(...node[childName]);\n }\n return null;\n}\n\n/**\n * 查找符合条件的所有节点\n * @param tree 树结构数据\n * @param func 条件\n * @param childName 子节点集合属性名\n * @returns T[]\n */\nexport function findTreeNodeAll<T = SafeAny>(\n tree: SafeAny[],\n func: (n: T) => boolean,\n childName = 'children'\n): T[] {\n const list = [...tree];\n const result = [];\n\n for (const node of list) {\n func(node) && result.push(node);\n node[childName] && list.push(...node[childName]);\n }\n return result;\n}\n\n/**\n * 树结构遍历.\n * 对于所有节点node调用callback(node),深度优先.\n * @param tree 树结构数据\n * @param func 条件\n * @param childName 子节点集合属性名\n */\nexport function forEachTreeNode<T = SafeAny>(\n tree: SafeAny[],\n func: (n: T) => void,\n childName = 'children'\n): void {\n const list = [...tree];\n\n for (let i = 0; i < list.length; i++) {\n func(list[i]);\n\n list[i][childName] && list.splice(i + 1, 0, ...list[i][childName]);\n }\n}\n\n/**\n * 删除符合条件的所有节点及其子节点.\n * @param tree 树结构数据\n * @param func 条件\n * @param childName 子节点集合属性名\n */\nexport function removeTreeNode<T = SafeAny>(\n tree: SafeAny[],\n func: (n: T) => boolean,\n childName = 'children'\n): void {\n const list = [tree];\n\n while (list.length) {\n const nodeList = list.shift();\n const delList = nodeList?.reduce((r, n, idx) => (func(n) && r.push(idx), r), []);\n delList.reverse();\n delList.forEach((idx: number) => nodeList?.splice(idx, 1));\n\n const childrenList = nodeList?.map(n => n[childName]).filter(l => l && l.length) ?? [];\n list.push(...childrenList);\n }\n}\n\n/**\n * 在指定oldNode前插入newNode.\n * 如果树中没有oldNode,则不会改变原数组.\n * @param tree 树结构数据\n * @param newNode 新节点\n * @param oldNode 指定节点\n * @param childName 子节点集合属性名\n */\nexport function insertTreeNodeBefore<T = SafeAny>(\n tree: SafeAny[],\n newNode: T,\n oldNode: T,\n childName = 'children'\n): void {\n _insert<T>(tree, oldNode, newNode, childName, 0);\n}\n\n/**\n * 在指定oldNode后插入newNode.\n * 如果树中没有oldNode,则不会改变原数组.\n * @param tree 树结构数据\n * @param oldNode 指定节点\n * @param newNode 新节点\n * @param childName 子节点集合属性名\n */\nexport function insertTreeNodeAfter<T = SafeAny>(\n tree: SafeAny[],\n oldNode: T,\n newNode: T,\n childName = 'children'\n): void {\n _insert<T>(tree, oldNode, newNode, childName, 1);\n}\n\nfunction _insert<T = SafeAny>(\n tree: SafeAny[],\n node: T,\n targetNode: T,\n childName: string,\n after: number\n): void {\n function insert(list: SafeAny[]) {\n const idx = list.indexOf(node);\n idx < 0\n ? list.forEach(n => insert(n[childName] || []))\n : list.splice(idx + after, 0, targetNode);\n }\n insert(tree);\n}\n","/**\n * 剔除字符串中所有空格及换行\n *\n * @param str 字符串\n */\nexport function trimAll(str?: string): string {\n return (str ?? '').replace(/[\\s\\n]+/g, '');\n}\n\n/**\n *\n * 字符串插入变量值\n *\n * interpolate('Hello {0}',['World']); // -> Hello World\n *\n * interpolate('Hello{0}',['World']); // -> HelloWorld\n *\n * @param text 文本\n * @param params 参数\n * @returns string\n */\nexport function interpolate(text: string, params: string[]): string {\n return text\n .replace(/(['\"]?\\{\\s*(\\d+)\\s*\\}['\"]?)/g, (_, match, digit) => params[digit] ?? match)\n .replace(/\\s+/g, ' ');\n}\n\n/**\n *\n * 查找并替换一个字符串\n *\n * Example\n *\n * replaceAll('This is a test string', 'is', 'X') = 'ThX X a test string'\n *\n * @returns\n */\nexport function replaceAll(str: string, search: string, replacement: string): string {\n const fix = search.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return str.replace(new RegExp(fix, 'g'), replacement);\n}\n\n/**\n *\n * 截断字符串\n *\n * @param str 字符串\n * @param maxLength 最大长度\n * @returns string\n */\nexport function truncateString(str: string, maxLength: number): string {\n if (!str || !str.length || str.length <= maxLength) {\n return str;\n }\n\n return str.substring(0, maxLength);\n}\n\n/**\n *\n * 截断字符串带后缀\n *\n * @param str 字符串\n * @param maxLength 最大长度\n * @param postfix 后缀(默认...)\n * @returns\n */\nexport function truncateStringWithPostfix(\n str: string,\n maxLength: number,\n postfix?: string\n): string {\n postfix = postfix || '...';\n\n if (!str || !str.length || str.length <= maxLength) {\n return str;\n }\n\n if (maxLength <= postfix.length) {\n return postfix.substring(0, maxLength);\n }\n\n return str.substring(0, maxLength - postfix.length) + postfix;\n}\n\n/** 字符串翻转 */\nexport function reverseStr(str: string): string {\n return str.split('').reverse().join('');\n}\n","import type { SafeAny } from '@pkt/utils/types';\n\n/**\n * 生成uuid\n * @returns string\n */\nexport function uuid(a?: SafeAny): string {\n return a\n ? (a ^ ((Math.random() * 16) >> (a / 4))).toString(16)\n : `${1e7}${-1e3}${-4e3}${-8e3}${-1e11}`.replace(/[018]/g, uuid);\n}\n\n/**\n * 生成哈希值\n * @returns number\n */\nexport function generateHash(value: string): number {\n let hashed = 0;\n let charCode: number;\n\n for (let i = 0; i < value.length; i++) {\n charCode = value.charCodeAt(i);\n hashed = (hashed << 5) - hashed + charCode;\n hashed |= 0;\n }\n return hashed;\n}\n\n/**\n * 随机密码\n * @param length 长度\n * @returns string\n */\nexport function generatePassword(length = 8): string {\n length = Math.min(Math.max(4, length), 128);\n\n const lowers = 'abcdefghijklmnopqrstuvwxyz';\n const uppers = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const numbers = '0123456789';\n const specials = '!@#$%&*()_+{}<>?[]./';\n const all = lowers + uppers + numbers + specials;\n\n const getRandom = (chrSet: string) => chrSet[Math.floor(Math.random() * chrSet.length)];\n\n const password = Array({ length });\n password[0] = getRandom(lowers);\n password[1] = getRandom(uppers);\n password[2] = getRandom(numbers);\n password[3] = getRandom(specials);\n\n for (let i = 4; i < length; i++) {\n password[i] = getRandom(all);\n }\n\n return password.sort(() => 0.5 - Math.random()).join('');\n}\n","import type { SafeAny } from '@pkt/utils/types';\nimport {\n exists,\n isNullOrUndefined,\n isNode,\n isObject,\n isObjectAndNotArrayNotNode\n} from '../validate/validate';\nimport clone from 'just-clone';\n\n/**\n *\n * 复制/拷贝\n *\n * @returns\n */\nexport function copy(source: SafeAny): SafeAny {\n return clone(source);\n}\n\n/**\n * 根据 object对象的path路径获取值\n *\n * const obj = {a: {aa: {aaa: 2}}, b: 4};\n *\n * get(obj, 'a.aa.aaa'); // 2\n * get(obj, ['a', 'aa', 'aaa']); // 2\n *\n * get(obj, 'b.bb.bbb'); // undefined\n * get(obj, ['b', 'bb', 'bbb']); // undefined\n *\n * get(obj.a, 'aa.aaa'); // 2\n * get(obj.a, ['aa', 'aaa']); // 2\n *\n * get(obj.b, 'bb.bbb'); // undefined\n * get(obj.b, ['bb', 'bbb']); // undefined\n *\n * get(obj.b, 'bb.bbb', 42); // 42\n * get(obj.b, ['bb', 'bbb'], 42); // 42\n *\n * get(null, 'a'); // undefined\n * get(undefined, ['a']); // undefined\n *\n * get(null, 'a', 42); // 42\n * get(undefined, ['a'], 42); // 42\n *\n * const obj = {a: {}};\n * const sym = Symbol();\n * obj.a[sym] = 4;\n * get(obj.a, sym); // 4\n * @param obj 对象\n * @param path 路径\n * @param defaultValue 默认值\n * @returns SafeAny\n */\nexport function deepGet(obj: SafeAny, path: string | string[], defaultValue?: unknown): SafeAny {\n if (!obj) {\n return defaultValue;\n }\n let props, prop;\n if (Array.isArray(path)) {\n props = path.slice(0);\n }\n\n if (typeof path === 'string') {\n props = path.split('.');\n } else if (typeof path === 'symbol') {\n props = [path];\n }\n\n if (!Array.isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n while (props.length) {\n prop = props.shift();\n if (!obj) {\n return defaultValue;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n obj = obj[prop!];\n if (obj === undefined) {\n return defaultValue;\n }\n }\n return obj;\n}\n\n/**\n * 根据 object对象的path路径设置值\n *\n * const obj1 = {};\n * set(obj1, 'a.aa.aaa', 4); // true\n * set(obj1, 'a.aa.aaa', 4); // true\n *\n * const obj2 = {};\n * set(obj2, ['a', 'aa', 'aaa'], 4); // true\n * obj2; // {a: {aa: {aaa: 4}}}\n *\n * const obj3 = {a: {aa: {aaa: 2}}};\n * set(obj3, 'a.aa.aaa', 3); // true\n * obj3; // {a: {aa: {aaa: 3}}}\n *\n * const obj4 = {a: {aa: {aaa: 2}}};\n * set(obj4, 'a.aa', {bbb: 7}); // false\n *\n * const obj5 = {a: {}};\n * const sym = Symbol();\n * set(obj5.a, sym, 7); // true\n * obj5; // {a: {Symbol(): 7}}\n *\n * @param obj 对象\n * @param path 路径\n * @param value 值\n * @returns boolean\n */\nexport function deepSet(obj: SafeAny, path: string | string[], value: unknown): boolean {\n let props;\n if (Array.isArray(path)) {\n props = path.slice(0);\n }\n\n if (typeof path === 'string') {\n props = path.split('.');\n } else if (typeof path === 'symbol') {\n props = [path];\n }\n\n if (!Array.isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n const lastProp = props.pop();\n if (!lastProp) {\n return false;\n }\n prototypeCheck(lastProp);\n let thisProp;\n while ((thisProp = props.shift())) {\n prototypeCheck(thisProp);\n if (typeof obj[thisProp] === 'undefined') {\n obj[thisProp] = {};\n }\n obj = obj[thisProp];\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n }\n obj[lastProp] = value;\n return true;\n}\nfunction prototypeCheck(prop: string): void {\n if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') {\n throw new Error('setting of prototype values not supported');\n }\n}\n\n/**\n *\n * 深度合并\n *\n * @returns\n */\nexport function deepMerge(target: SafeAny, source: SafeAny): SafeAny {\n if (isObjectAndNotArrayNotNode(target) && isObjectAndNotArrayNotNode(source)) {\n return deepMergeRecursively(target, source);\n } else if (isNullOrUndefined(target) && isNullOrUndefined(source)) {\n return {};\n } else {\n return exists(source) ? source : target;\n }\n}\n\n/**\n *\n * 递归深度合并\n *\n * @returns\n */\nfunction deepMergeRecursively(target: SafeAny, source: SafeAny): SafeAny {\n const shouldNotRecurse =\n isNullOrUndefined(target) ||\n isNullOrUndefined(source) || // at least one not defined\n Array.isArray(target) ||\n Array.isArray(source) || // at least one array\n !isObject(target) ||\n !isObject(source) || // at least one not an object\n isNode(target) ||\n isNode(source); // at least one node\n\n /**\n * if we will not recurse any further,\n * we will prioritize source if it is a defined value.\n */\n if (shouldNotRecurse) {\n return exists(source) ? source : target;\n }\n\n const keysOfTarget = Object.keys(target);\n const keysOfSource = Object.keys(source);\n const uniqueKeys = new Set(keysOfTarget.concat(keysOfSource));\n return [...uniqueKeys].reduce((retVal: SafeAny, key) => {\n retVal[key] = deepMergeRecursively(target[key], source[key]);\n return retVal;\n }, {});\n}\n","import type { SafeAny } from '@pkt/utils/types';\nimport { isNum } from '../validate/validate';\n\n/**\n *\n * 映射枚举到选项\n *\n * @param _enum 枚举\n * @returns []\n */\nexport function mapEnumToOptions<T>(_enum: T): Options<T>[] {\n const options: Options<T>[] = [];\n\n for (const member in _enum)\n if (!isNum(member)) {\n options.push({\n key: member,\n value: _enum[member]\n });\n }\n\n return options;\n}\n\nexport interface Options<T> {\n key: Extract<keyof T, string>;\n value: T[Extract<keyof T, string>];\n}\n\n/**\n * 浏览器内置uri解码`decodeURI()`函数的增强版,可以解码任何uri\n *\n * @param uri 地址\n * @returns uri\n */\nexport function superDecodeURI(uri: string): string {\n if (!uri) {\n return uri;\n }\n return decodeURI(uri).replace(/%([0-9a-f]{2})/gi, (found, charCode) =>\n String.fromCharCode(parseInt(charCode, 16))\n );\n}\n\n/**\n *\n * 将url中的参数解析为一个对象\n *\n * @param rawParam 格式为`var1=value1&var2=value2`\n * @returns 返回类似`{var1: \"value1\", var2: \"value2\"}`的对象\n */\nexport function parseUrlParam(rawParam: string): Record<string, unknown> {\n const result = {} as SafeAny;\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!rawParam) {\n rawParam.split(/&/g).forEach(param => {\n const parts = param.split(/=/);\n result[superDecodeURI(parts[0])] = superDecodeURI(parts[1]);\n });\n }\n return result;\n}\n","import type { SafeAny } from '@pkt/utils/types';\n\n/**\n *\n * 比较\n *\n * @description\n * primitives: value1 === value\n *\n * functions: value1.toString == value2.toString\n *\n * arrays: if length, sequence and values of properties are identical\n *\n * objects: if length, names and values of properties are identical\n *\n * @example\n * compare([[1, [2, 3]], [[1, [2, 3]]);=> true\n *\n * compare([[1, [2, 3], 4], [[1, [2, 3]]);=> false\n *\n * compare({a: 2, b: 3}, {a: 2, b: 3});=> true\n *\n * compare({a: 2, b: 3}, {b: 3, a: 2});=> true\n *\n * compare({a: 2, b: 3, c: 4}, {a: 2, b: 3});=> false\n *\n * compare({a: 2, b: 3}, {a: 2, b: 3, c: 4});=> false\n *\n * compare([[1, [2, {a: 4}], 4], [[1, [2, {a: 4}]]);=> true\n *\n * @returns boolean\n */\nexport function compare(value1: SafeAny, value2: SafeAny): boolean {\n if (value1 === value2) {\n return true;\n }\n\n /* eslint-disable no-self-compare */\n // if both values are NaNs return true\n if (value1 !== value1 && value2 !== value2) {\n return true;\n }\n if ({}.toString.call(value1) !== {}.toString.call(value2)) {\n return false;\n }\n if (value1 !== Object(value1)) {\n // non equal primitives\n return false;\n }\n if (!value1) {\n return false;\n }\n if (Array.isArray(value1)) {\n return compareArrays(value1, value2);\n }\n if ({}.toString.call(value1) === '[object Set]') {\n return compareArrays(Array.from(value1), Array.from(value2));\n }\n if ({}.toString.call(value1) === '[object Object]') {\n return compareObjects(value1, value2);\n } else {\n return compareNativeSubtypes(value1, value2);\n }\n}\n\nfunction compareNativeSubtypes(value1: SafeAny, value2: SafeAny): boolean {\n // e.g. Function, RegExp, Date\n return value1.toString() === value2.toString();\n}\n\n/**\n *\n * 比较数组\n *\n * @returns boolean\n */\nexport function compareArrays(value1: Array<SafeAny>, value2: Array<SafeAny>): boolean {\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n let alike = true;\n for (let i = 0; i < len; i++) {\n if (!compare(value1[i], value2[i])) {\n alike = false;\n break;\n }\n }\n return alike;\n}\n\n/**\n *\n * 比较Obj\n *\n * @returns boolean\n */\nexport function compareObjects(value1: SafeAny, value2: SafeAny): boolean {\n const keys1 = Object.keys(value1).sort();\n const keys2 = Object.keys(value2).sort();\n const len = keys1.length;\n if (len !== keys2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n const key1 = keys1[i];\n const key2 = keys2[i];\n if (!(key1 === key2 && compare(value1[key1], value2[key2]))) {\n return false;\n }\n }\n return true;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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