From aba868c1d86e933dc52be29f84adb3f0b0168bca Mon Sep 17 00:00:00 2001 From: Victor Bo Date: Wed, 26 Jun 2024 11:59:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B7=B2=E5=AE=9E=E7=8E=B0=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E5=A2=9E=E5=8A=A0jsdoc=E6=B3=A8=E9=87=8A=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 新增函数的jsdoc注释 * fix: 修复isPromise可能带来的异常风险 * perf: 优化isPromise的实现方式 --- package.json | 4 ++-- packages/is/src/isArray.ts | 5 +++++ packages/is/src/isBigInt.ts | 5 +++++ packages/is/src/isBoolean.ts | 5 +++++ packages/is/src/isDate.ts | 5 +++++ packages/is/src/isFalse.ts | 5 +++++ packages/is/src/isFunction.ts | 7 ++++++- packages/is/src/isMap.ts | 5 +++++ packages/is/src/isNaN.ts | 5 +++++ packages/is/src/isNull.ts | 5 +++++ packages/is/src/isNumber.ts | 5 +++++ packages/is/src/isObject.ts | 5 +++++ packages/is/src/isPromise.ts | 14 +++++++++---- packages/is/src/isRegExp.ts | 5 +++++ packages/is/src/isSet.ts | 5 +++++ packages/is/src/isString.ts | 5 +++++ packages/is/src/isSymbol.ts | 5 +++++ packages/is/src/isTrue.ts | 5 +++++ packages/is/src/isType.ts | 7 +++++++ packages/is/src/isUndefined.ts | 5 +++++ packages/object/src/deepCopy.ts | 21 +++++++++++-------- .../{index.test.ts => toSlash.test.ts} | 0 packages/string/index.ts | 2 +- packages/string/src/index.ts | 3 --- packages/string/src/toSlash.ts | 8 +++++++ packages/tool/__test__/toRawType.test.ts | 2 +- packages/tool/src/toRawType.ts | 5 +++++ 27 files changed, 132 insertions(+), 21 deletions(-) rename packages/string/__test__/{index.test.ts => toSlash.test.ts} (100%) delete mode 100644 packages/string/src/index.ts create mode 100644 packages/string/src/toSlash.ts diff --git a/package.json b/package.json index f2f7889..4f26097 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,10 @@ "node": ">=18.0.0" }, "scripts": { - "docs": "pnpm -F xparcai-utils-docs run docs:dev", - "docs:build": "pnpm -F xparcai-utils-docs run docs:build", "create": "esno scripts/create-subpackage.ts", "build": "pnpm -r --filter=./packages/* run build", + "docs": "pnpm -F xparcai-utils-docs run docs:dev", + "docs:build": "pnpm -F xparcai-utils-docs run docs:build", "release": "pnpm run build && pnpm run test run && run-s release:*", "release:bummp": "bumpp -r", "release:publish": "pnpm -r --filter=./packages/* publish", diff --git a/packages/is/src/isArray.ts b/packages/is/src/isArray.ts index f9bef12..dd22477 100644 --- a/packages/is/src/isArray.ts +++ b/packages/is/src/isArray.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是array类型 + * @param data 某个数据 + * @returns 是否是array类型 + */ export function isArray(data: unknown): data is T[] { return isType(data, 'Array') } diff --git a/packages/is/src/isBigInt.ts b/packages/is/src/isBigInt.ts index b5dbf28..2d373de 100644 --- a/packages/is/src/isBigInt.ts +++ b/packages/is/src/isBigInt.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是bigint类型 + * @param data 某个数据 + * @returns 是否是bigint类型 + */ export function isBigInt(data: unknown): data is bigint { return isType(data, 'BigInt') } diff --git a/packages/is/src/isBoolean.ts b/packages/is/src/isBoolean.ts index 57ec550..512fdb1 100644 --- a/packages/is/src/isBoolean.ts +++ b/packages/is/src/isBoolean.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是boolean类型 + * @param data 某个数据 + * @returns 是否是boolean类型 + */ export function isBoolean(data: unknown): data is boolean { return isType(data, 'Boolean') } diff --git a/packages/is/src/isDate.ts b/packages/is/src/isDate.ts index 087dfd6..0b6a831 100644 --- a/packages/is/src/isDate.ts +++ b/packages/is/src/isDate.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是Date类型 + * @param data 某个数据 + * @returns 是否是Date类型 + */ export function isDate(data: unknown): data is Date { return isType(data, 'Date') } diff --git a/packages/is/src/isFalse.ts b/packages/is/src/isFalse.ts index bc33112..7b19d9b 100644 --- a/packages/is/src/isFalse.ts +++ b/packages/is/src/isFalse.ts @@ -1,3 +1,8 @@ +/** + * 某个数据是否为false + * @param data 某个数据 + * @returns 是否为false + */ export function isFalse(data: unknown): data is false { return data === false } diff --git a/packages/is/src/isFunction.ts b/packages/is/src/isFunction.ts index 11db6b3..bce0c5a 100644 --- a/packages/is/src/isFunction.ts +++ b/packages/is/src/isFunction.ts @@ -1,5 +1,10 @@ import { isType } from './isType' -export function isFunction(data: unknown): data is T { +/** + * 某个数据/方法是否是function类型 + * @param data 某个数据/方法 + * @returns 是否是function类型 + */ +export function isFunction(data: unknown): data is T extends Function ? T : Function { return isType(data, 'Function') } diff --git a/packages/is/src/isMap.ts b/packages/is/src/isMap.ts index 8cee1f2..4ace337 100644 --- a/packages/is/src/isMap.ts +++ b/packages/is/src/isMap.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是Map类型 + * @param data 某个数据 + * @returns 是否是Map类型 + */ export function isMap(data: unknown): data is Map { return isType(data, 'Map') } diff --git a/packages/is/src/isNaN.ts b/packages/is/src/isNaN.ts index 4bdaa7c..74a7b09 100644 --- a/packages/is/src/isNaN.ts +++ b/packages/is/src/isNaN.ts @@ -1,3 +1,8 @@ +/** + * 某个数据是否是NaN + * @param data 某个数据 + * @returns 是否是NaN + */ export function isNaN(data: unknown): data is number { return Number.isNaN(data) } diff --git a/packages/is/src/isNull.ts b/packages/is/src/isNull.ts index c328458..a3db460 100644 --- a/packages/is/src/isNull.ts +++ b/packages/is/src/isNull.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是null类型 + * @param data 某个数据 + * @returns 是否是null类型 + */ export function isNull(data: unknown): data is null { return isType(data, 'Null') } diff --git a/packages/is/src/isNumber.ts b/packages/is/src/isNumber.ts index 7f0111f..9551b76 100644 --- a/packages/is/src/isNumber.ts +++ b/packages/is/src/isNumber.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是number类型 + * @param data 某个数据 + * @returns 是否是number类型 + */ export function isNumber(data: unknown): data is number { return isType(data, 'Number') } diff --git a/packages/is/src/isObject.ts b/packages/is/src/isObject.ts index a1188f6..808468b 100644 --- a/packages/is/src/isObject.ts +++ b/packages/is/src/isObject.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是object类型 + * @param data 某个数据 + * @returns 是否是object类型 + */ export function isObject(data: unknown): data is T { return isType(data, 'Object') } diff --git a/packages/is/src/isPromise.ts b/packages/is/src/isPromise.ts index f35fc7b..74445bf 100644 --- a/packages/is/src/isPromise.ts +++ b/packages/is/src/isPromise.ts @@ -1,9 +1,15 @@ import { isFunction } from './isFunction' +import { isObject } from './isObject' -export function isPromise(data: unknown): data is Promise { +/** + * 某个数据/方法是否是Promise + * @param data 某个数据/方法 + * @returns 是否是Promise + */ +export function isPromise(data: unknown): data is Promise { return ( - !!data - && isFunction((data as any).then) - && isFunction((data as any).catch) + isObject<{ then: Function, catch: Function }>(data) + && isFunction(data.then) + && isFunction(data.catch) ) } diff --git a/packages/is/src/isRegExp.ts b/packages/is/src/isRegExp.ts index bd8fd81..67cb16e 100644 --- a/packages/is/src/isRegExp.ts +++ b/packages/is/src/isRegExp.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是RegExp类型 + * @param data 某个数据 + * @returns 是否是RegExp类型 + */ export function isRegExp(data: unknown): data is RegExp { return isType(data, 'RegExp') } diff --git a/packages/is/src/isSet.ts b/packages/is/src/isSet.ts index 60305d8..07cc698 100644 --- a/packages/is/src/isSet.ts +++ b/packages/is/src/isSet.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是Set类型 + * @param data 某个数据 + * @returns 是否是Set类型 + */ export function isSet(data: unknown): data is Set { return isType(data, 'Set') } diff --git a/packages/is/src/isString.ts b/packages/is/src/isString.ts index 3b94555..fb84aff 100644 --- a/packages/is/src/isString.ts +++ b/packages/is/src/isString.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是string类型 + * @param data 某个数据 + * @returns 是否是string类型 + */ export function isString(data: unknown): data is string { return isType(data, 'String') } diff --git a/packages/is/src/isSymbol.ts b/packages/is/src/isSymbol.ts index a2fda5e..3a8a377 100644 --- a/packages/is/src/isSymbol.ts +++ b/packages/is/src/isSymbol.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是symbol类型 + * @param data 某个数据 + * @returns 是否是symbol类型 + */ export function isSymbol(data: unknown): data is symbol { return isType(data, 'Symbol') } diff --git a/packages/is/src/isTrue.ts b/packages/is/src/isTrue.ts index 387ba58..7a65d84 100644 --- a/packages/is/src/isTrue.ts +++ b/packages/is/src/isTrue.ts @@ -1,3 +1,8 @@ +/** + * 某个数据是否为true + * @param data 某个数据 + * @returns 是否为true + */ export function isTrue(data: unknown): data is true { return data === true } diff --git a/packages/is/src/isType.ts b/packages/is/src/isType.ts index 2134cf2..b82cda8 100644 --- a/packages/is/src/isType.ts +++ b/packages/is/src/isType.ts @@ -20,6 +20,13 @@ type Types = | 'Error' | 'Math' | 'Argument' + +/** + * 某个数据是否符合某个类型 + * @param data 某个数据 + * @param type 某个类型 + * @returns 是否符合某个类型 + */ export function isType(data: unknown, type: Types): boolean { return toRawType(data) === type } diff --git a/packages/is/src/isUndefined.ts b/packages/is/src/isUndefined.ts index b3b4790..629e8cd 100644 --- a/packages/is/src/isUndefined.ts +++ b/packages/is/src/isUndefined.ts @@ -1,5 +1,10 @@ import { isType } from './isType' +/** + * 某个数据是否是undefined类型 + * @param data 某个数据 + * @returns 是否是undefined类型 + */ export function isUndefined(data: unknown): data is undefined { return isType(data, 'Undefined') } diff --git a/packages/object/src/deepCopy.ts b/packages/object/src/deepCopy.ts index a49276b..8449336 100644 --- a/packages/object/src/deepCopy.ts +++ b/packages/object/src/deepCopy.ts @@ -1,20 +1,23 @@ import { isArray, isDate, isObject, isRegExp } from '@xparcai-utils/is' /** - * @func deepCopy - * @param {T} data 将要复制的对象 - * @returns {T} 复制后的对象 - * @desc 深拷贝对象 + * 深拷贝某个数据 + * @param {T} data 某个数据 + * @returns {T} 拷贝后的数据 */ export function deepCopy(data: T): T + /** - * @func deepCopy - * @param {T} data 将要复制的对象 - * @param {H extends object} [hash] 记录已复制过对象的哈希值 - * @returns {T} 复制后的对象 - * @desc 深拷贝对象 + * 深拷贝某个数据 + * @param {T} data 某个数据 + * @param {H extends object} [hash] 解决循环依赖传入的记录对象 + * @returns {T} 拷贝后的数据 */ export function deepCopy(data: T, hash?: H): T + +/** + * 深拷贝实现 + */ export function deepCopy(data: T, hash: any = new WeakMap()): T { // 日期对象直接返回一个新的日期对象 if (isDate(data)) { diff --git a/packages/string/__test__/index.test.ts b/packages/string/__test__/toSlash.test.ts similarity index 100% rename from packages/string/__test__/index.test.ts rename to packages/string/__test__/toSlash.test.ts diff --git a/packages/string/index.ts b/packages/string/index.ts index 6f39cd4..04117f9 100644 --- a/packages/string/index.ts +++ b/packages/string/index.ts @@ -1 +1 @@ -export * from './src' +export * from './src/toSlash' diff --git a/packages/string/src/index.ts b/packages/string/src/index.ts deleted file mode 100644 index e00a0cc..0000000 --- a/packages/string/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function toSlash(str: string): string { - return str.replace(/\\/g, '/') -} diff --git a/packages/string/src/toSlash.ts b/packages/string/src/toSlash.ts new file mode 100644 index 0000000..07aa8ef --- /dev/null +++ b/packages/string/src/toSlash.ts @@ -0,0 +1,8 @@ +/** + * 反 \ 转换为 / + * @param str 字符串 + * @returns 转换后的字符串 + */ +export function toSlash(str: string): string { + return str.replace(/\\/g, '/') +} diff --git a/packages/tool/__test__/toRawType.test.ts b/packages/tool/__test__/toRawType.test.ts index 31a1010..23a3291 100644 --- a/packages/tool/__test__/toRawType.test.ts +++ b/packages/tool/__test__/toRawType.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { toRawType } from '../index' +import { toRawType } from '..' describe('@xparcai-utils/tool', () => { it('toRawType', () => { diff --git a/packages/tool/src/toRawType.ts b/packages/tool/src/toRawType.ts index dedd260..29b13c8 100644 --- a/packages/tool/src/toRawType.ts +++ b/packages/tool/src/toRawType.ts @@ -1,3 +1,8 @@ +/** + * 获取某个数据的原始类型 + * @param data 某个数据 + * @returns 原始类型 + */ export function toRawType(data: unknown): string { return Object.prototype.toString.call(data).slice(8, -1) }