@aiao/utils 0.0.6 → 0.0.8
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/@browser/index.d.ts +1 -0
- package/dist/@browser/index.d.ts.map +1 -1
- package/dist/@browser/leader-election.d.ts +40 -2
- package/dist/@browser/leader-election.d.ts.map +1 -1
- package/dist/@browser/requestIdleCallbackPolyfill.d.ts +2 -0
- package/dist/@browser/requestIdleCallbackPolyfill.d.ts.map +1 -0
- package/dist/array/difference.d.ts +3 -3
- package/dist/array/flatten.d.ts +3 -3
- package/dist/array/flattenDeep.d.ts +3 -3
- package/dist/array/intersection.d.ts +4 -4
- package/dist/array/needArray.d.ts +5 -10
- package/dist/array/needArray.d.ts.map +1 -1
- package/dist/array/orderBy.d.ts +18 -4
- package/dist/array/orderBy.d.ts.map +1 -1
- package/dist/array/sortBy.d.ts +4 -4
- package/dist/array/unionBy.d.ts +20 -0
- package/dist/array/unionBy.d.ts.map +1 -1
- package/dist/async/nextMacroTask.d.ts +11 -2
- package/dist/async/nextMacroTask.d.ts.map +1 -1
- package/dist/async/nextMicroTask.d.ts +1 -1
- package/dist/binary/uint8ArrayToString.d.ts +1 -1
- package/dist/collection/traverseObjectKeys.d.ts.map +1 -1
- package/dist/crypto/aesDecrypt.d.ts +12 -5
- package/dist/crypto/aesDecrypt.d.ts.map +1 -1
- package/dist/crypto/aesEncrypt.d.ts +2 -2
- package/dist/crypto/rsaGenerateKey.d.ts +22 -0
- package/dist/crypto/rsaGenerateKey.d.ts.map +1 -1
- package/dist/date/parseTime.d.ts +23 -0
- package/dist/date/parseTime.d.ts.map +1 -1
- package/dist/date/stringTime.d.ts +12 -0
- package/dist/date/stringTime.d.ts.map +1 -1
- package/dist/function/once.d.ts +2 -2
- package/dist/function/throttle.d.ts +3 -3
- package/dist/index.js +247 -214
- package/dist/indexing/fractional-indexing.d.ts +46 -10
- package/dist/indexing/fractional-indexing.d.ts.map +1 -1
- package/dist/number/canBeNumber.d.ts +2 -2
- package/dist/number/numberStep.d.ts +2 -2
- package/dist/number/numberStepScreenSize.d.ts +13 -0
- package/dist/number/numberStepScreenSize.d.ts.map +1 -1
- package/dist/number/numberStrip.d.ts +3 -3
- package/dist/number/toInt.d.ts +12 -6
- package/dist/number/toInt.d.ts.map +1 -1
- package/dist/number/tryToNumber.d.ts +17 -8
- package/dist/number/tryToNumber.d.ts.map +1 -1
- package/dist/object/deepFreeze.d.ts +17 -1
- package/dist/object/deepFreeze.d.ts.map +1 -1
- package/dist/object/flattenPathObjectToPlainObject.d.ts +14 -3
- package/dist/object/flattenPathObjectToPlainObject.d.ts.map +1 -1
- package/dist/object/get.d.ts +2 -2
- package/dist/object/has.d.ts +2 -2
- package/dist/object/isEqual.d.ts +3 -3
- package/dist/object/omit.d.ts +2 -2
- package/dist/object/omitBy.d.ts +3 -3
- package/dist/object/pick.d.ts +2 -2
- package/dist/object/plainObjectToFlattenPathObject.d.ts +10 -4
- package/dist/object/plainObjectToFlattenPathObject.d.ts.map +1 -1
- package/dist/object/set.d.ts +3 -3
- package/dist/object/setWith.d.ts +0 -1
- package/dist/object/setWith.d.ts.map +1 -1
- package/dist/object/toPlainObject.d.ts +19 -0
- package/dist/object/toPlainObject.d.ts.map +1 -1
- package/dist/object/zipObject.d.ts +22 -5
- package/dist/object/zipObject.d.ts.map +1 -1
- package/dist/platform/is-browser.d.ts +14 -1
- package/dist/platform/is-browser.d.ts.map +1 -1
- package/dist/random/randomArrayItem.d.ts +18 -1
- package/dist/random/randomArrayItem.d.ts.map +1 -1
- package/dist/random/randomFloat.d.ts +16 -0
- package/dist/random/randomFloat.d.ts.map +1 -1
- package/dist/random/randomInt.d.ts +14 -4
- package/dist/random/randomInt.d.ts.map +1 -1
- package/dist/random/randomString.d.ts +16 -0
- package/dist/random/randomString.d.ts.map +1 -1
- package/dist/random/randomUintByLength.d.ts +15 -0
- package/dist/random/randomUintByLength.d.ts.map +1 -1
- package/dist/random/randomUintString.d.ts +15 -0
- package/dist/random/randomUintString.d.ts.map +1 -1
- package/dist/string/camelCase.d.ts +1 -1
- package/dist/string/getWords.d.ts +21 -0
- package/dist/string/getWords.d.ts.map +1 -1
- package/dist/string/kebabCase.d.ts +2 -2
- package/dist/string/stringSingleline.d.ts +14 -1
- package/dist/string/stringSingleline.d.ts.map +1 -1
- package/dist/string/stringToArrayBuffer.d.ts +0 -1
- package/dist/string/stringToArrayBuffer.d.ts.map +1 -1
- package/dist/tools/event.d.ts +31 -25
- package/dist/tools/event.d.ts.map +1 -1
- package/dist/type-definition/result-types.d.ts +26 -4
- package/dist/type-definition/result-types.d.ts.map +1 -1
- package/dist/types/AnyFunction.d.ts +2 -2
- package/dist/types/DeepPartial.d.ts +3 -3
- package/dist/types/isArray.d.ts +1 -1
- package/dist/types/isArrayBuffer.d.ts +3 -3
- package/dist/types/isBoolean.d.ts +3 -3
- package/dist/types/isDate.d.ts +3 -3
- package/dist/types/isEmpty.d.ts +4 -4
- package/dist/types/isNil.d.ts +2 -2
- package/dist/types/isNumber.d.ts +3 -3
- package/dist/types/isObject.d.ts +2 -2
- package/dist/types/isPlainObject.d.ts +3 -3
- package/dist/types/isPrimitive.d.ts +3 -3
- package/dist/types/isRegExp.d.ts +3 -3
- package/dist/types/isString.d.ts +2 -2
- package/dist/types/isUint8Array.d.ts +3 -3
- package/package.json +4 -4
|
@@ -1,2 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成指定位数的随机正整数
|
|
3
|
+
* 通过生成随机数字字符串然后转换为数字实现
|
|
4
|
+
* @param length - 数字的位数,默认 16
|
|
5
|
+
* @returns 指定位数的随机正整数
|
|
6
|
+
* @example
|
|
7
|
+
* randomUintByLength(3); // 返回 3 位随机数,如 123、456、789
|
|
8
|
+
* @example
|
|
9
|
+
* randomUintByLength(1); // 返回 1 位随机数,如 1、2、3、4、5、6、7、8、9(不含 0)
|
|
10
|
+
* @example
|
|
11
|
+
* randomUintByLength(5); // 返回 5 位随机数,如 12345
|
|
12
|
+
* **Note:** 第一位不会是 0,确保返回的数字位数正确
|
|
13
|
+
* **Note:** 使用 randomUintString 生成字符串后转换为数字
|
|
14
|
+
* **Note:** 对于大位数(>15),可能超出 JavaScript 安全整数范围
|
|
15
|
+
*/
|
|
1
16
|
export declare const randomUintByLength: (length?: number) => number;
|
|
2
17
|
//# sourceMappingURL=randomUintByLength.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"randomUintByLength.d.ts","sourceRoot":"","sources":["../../src/random/randomUintByLength.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,GAAI,SAAQ,MAAW,KAAG,MAAgD,CAAC"}
|
|
1
|
+
{"version":3,"file":"randomUintByLength.d.ts","sourceRoot":"","sources":["../../src/random/randomUintByLength.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAQ,MAAW,KAAG,MAAgD,CAAC"}
|
|
@@ -1,2 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成指定长度的随机数字字符串,第一位不为 0
|
|
3
|
+
* 适用于生成数字 ID 或序列号,确保不会以 0 开头
|
|
4
|
+
* @param length - 字符串长度,默认 16
|
|
5
|
+
* @returns 指定长度的随机数字字符串
|
|
6
|
+
* @example
|
|
7
|
+
* randomUintString(3); // 返回 3 位数字字符串,如 '123'、'456'、'789'
|
|
8
|
+
* @example
|
|
9
|
+
* randomUintString(1); // 返回 1 位数字字符串,如 '1'、'2'、'3'...'9'
|
|
10
|
+
* @example
|
|
11
|
+
* randomUintString(5); // 返回 5 位数字字符串,如 '12345'
|
|
12
|
+
* **Note:** 第一位使用 NUMBER_WITHOUT_ZERO(1-9),其余位使用 NUMBERS(0-9)
|
|
13
|
+
* **Note:** 确保生成的字符串可以安全转换为正整数
|
|
14
|
+
* **Note:** 适用于生成唯一标识符或序列号
|
|
15
|
+
*/
|
|
1
16
|
export declare const randomUintString: (length?: number) => string;
|
|
2
17
|
//# sourceMappingURL=randomUintString.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"randomUintString.d.ts","sourceRoot":"","sources":["../../src/random/randomUintString.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"randomUintString.d.ts","sourceRoot":"","sources":["../../src/random/randomUintString.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAQ,MAAW,KAAG,MACmB,CAAC"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* camelCase(' hello--world '); // 返回 'helloWorld'(自动去除首尾空格)
|
|
18
18
|
* @example
|
|
19
19
|
* camelCase(''); // 返回 ''(空字符串输入返回空字符串)
|
|
20
|
-
*
|
|
20
|
+
* **Note:** 内部使用getWords()函数拆分单词,使用capitalize()函数处理单词首字母
|
|
21
21
|
*/
|
|
22
22
|
export declare function camelCase(str: string): string;
|
|
23
23
|
//# sourceMappingURL=camelCase.d.ts.map
|
|
@@ -1,2 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 从字符串中提取单词,使用大小写和数字边界进行分割
|
|
3
|
+
* 支持驼峰命名、帕斯卡命名和包含数字的字符串
|
|
4
|
+
* @param str - 要分割的字符串
|
|
5
|
+
* @returns 分割后的单词数组
|
|
6
|
+
* @example
|
|
7
|
+
* getWords('camelCaseString'); // 返回 ['camel', 'Case', 'String']
|
|
8
|
+
* @example
|
|
9
|
+
* getWords('PascalCaseString'); // 返回 ['Pascal', 'Case', 'String']
|
|
10
|
+
* @example
|
|
11
|
+
* getWords('stringWith123Numbers'); // 返回 ['string', 'With', '123', 'Numbers']
|
|
12
|
+
* @example
|
|
13
|
+
* getWords('HTMLParser'); // 返回 ['HTML', 'Parser']
|
|
14
|
+
* @example
|
|
15
|
+
* getWords('simple'); // 返回 ['simple']
|
|
16
|
+
* @example
|
|
17
|
+
* getWords(''); // 返回 []
|
|
18
|
+
* **Note:** 使用正则表达式 /[A-Z]?[a-z]+|[0-9]+|[A-Z]+(?![a-z])/g 进行匹配
|
|
19
|
+
* **Note:** 连续的大写字母会被视为一个单词(如 'HTML')
|
|
20
|
+
* **Note:** 数字序列会被单独提取(如 '123')
|
|
21
|
+
*/
|
|
1
22
|
export declare const getWords: (str: string) => string[];
|
|
2
23
|
//# sourceMappingURL=getWords.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWords.d.ts","sourceRoot":"","sources":["../../src/string/getWords.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,MAAM,EAAqD,CAAC"}
|
|
1
|
+
{"version":3,"file":"getWords.d.ts","sourceRoot":"","sources":["../../src/string/getWords.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,MAAM,EAAqD,CAAC"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 将多行文本转换为单行文本,移除多余的空白字符
|
|
3
|
+
* 去除首尾空白,并将连续的空白字符替换为单个空格
|
|
4
|
+
* @param value - 要处理的字符串
|
|
5
|
+
* @returns 处理后的单行字符串
|
|
6
|
+
* @example
|
|
7
|
+
* stringSingleline(' hello world '); // 返回 'hello world'
|
|
8
|
+
* @example
|
|
9
|
+
* stringSingleline('line1\nline2\tline3'); // 返回 'line1 line2 line3'
|
|
10
|
+
* @example
|
|
11
|
+
* stringSingleline('multiple spaces'); // 返回 'multiple spaces'
|
|
12
|
+
* @example
|
|
13
|
+
* stringSingleline(''); // 返回 ''
|
|
14
|
+
* **Note:** 先使用 trim() 去除首尾空白,然后用正则 /\s+/g 替换连续空白为单个空格
|
|
15
|
+
* **Note:** 适用于清理用户输入或格式化显示文本
|
|
3
16
|
*/
|
|
4
17
|
export declare const stringSingleline: (value: string) => string;
|
|
5
18
|
//# sourceMappingURL=stringSingleline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringSingleline.d.ts","sourceRoot":"","sources":["../../src/string/stringSingleline.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stringSingleline.d.ts","sourceRoot":"","sources":["../../src/string/stringSingleline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,WAAsC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringToArrayBuffer.d.ts","sourceRoot":"","sources":["../../src/string/stringToArrayBuffer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stringToArrayBuffer.d.ts","sourceRoot":"","sources":["../../src/string/stringToArrayBuffer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,eAO9C"}
|
package/dist/tools/event.d.ts
CHANGED
|
@@ -1,36 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*
|
|
2
|
+
* 事件映射接口
|
|
3
|
+
* 定义事件名称到事件数据的映射关系
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* interface MyEvents {
|
|
8
|
+
* 'click': { x: number; y: number };
|
|
9
|
+
* 'change': { value: string };
|
|
10
|
+
* }
|
|
11
|
+
* ```
|
|
9
12
|
*/
|
|
10
|
-
export interface
|
|
13
|
+
export interface EventMap {
|
|
11
14
|
[eventName: string]: any;
|
|
12
15
|
}
|
|
13
16
|
/**
|
|
14
17
|
* 事件监听器类型
|
|
15
18
|
*/
|
|
16
|
-
export type EventListener<T> = (
|
|
17
|
-
export interface IEventDispatcher<Events extends
|
|
19
|
+
export type EventListener<T> = (data: T) => void;
|
|
20
|
+
export interface IEventDispatcher<Events extends EventMap = EventMap> {
|
|
18
21
|
addEventListener<T extends keyof Events>(type: T, listener: EventListener<Events[T]>): void;
|
|
19
22
|
hasEventListener<T extends keyof Events>(type: T, listener: EventListener<Events[T]>): boolean;
|
|
20
23
|
removeEventListener<T extends keyof Events>(type: T, listener: EventListener<Events[T]>): void;
|
|
21
|
-
dispatchEvent(
|
|
22
|
-
|
|
24
|
+
dispatchEvent<T extends keyof Events>(type: T, data: Events[T]): void;
|
|
25
|
+
removeAllEventListeners(): void;
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
28
|
+
* 事件调度器
|
|
29
|
+
* 提供类型安全的事件添加、移除和分发功能
|
|
27
30
|
*
|
|
28
|
-
* @template Events -
|
|
31
|
+
* @template Events - 事件映射类型
|
|
29
32
|
* @example
|
|
33
|
+
* ```typescript
|
|
30
34
|
* // 定义事件类型
|
|
31
|
-
* interface MyEvents
|
|
32
|
-
* 'click': {
|
|
33
|
-
* 'change': {
|
|
35
|
+
* interface MyEvents {
|
|
36
|
+
* 'click': { x: number; y: number };
|
|
37
|
+
* 'change': { value: string };
|
|
34
38
|
* }
|
|
35
39
|
*
|
|
36
40
|
* // 创建事件调度器
|
|
@@ -38,12 +42,13 @@ export interface IEventDispatcher<Events extends CustomEvents = CustomEvents> {
|
|
|
38
42
|
*
|
|
39
43
|
* // 使用事件调度器
|
|
40
44
|
* const dispatcher = new MyEventDispatcher();
|
|
41
|
-
* dispatcher.addEventListener('click', (
|
|
42
|
-
* console.log(`Click at ${
|
|
45
|
+
* dispatcher.addEventListener('click', (data) => {
|
|
46
|
+
* console.log(`Click at ${data.x}, ${data.y}`);
|
|
43
47
|
* });
|
|
44
|
-
* dispatcher.dispatchEvent(
|
|
48
|
+
* dispatcher.dispatchEvent('click', { x: 10, y: 20 });
|
|
49
|
+
* ```
|
|
45
50
|
*/
|
|
46
|
-
export declare abstract class EventDispatcher<Events extends
|
|
51
|
+
export declare abstract class EventDispatcher<Events extends EventMap = EventMap> implements IEventDispatcher<Events> {
|
|
47
52
|
#private;
|
|
48
53
|
/**
|
|
49
54
|
* 添加事件监听器
|
|
@@ -66,12 +71,13 @@ export declare abstract class EventDispatcher<Events extends CustomEvents = Cust
|
|
|
66
71
|
removeEventListener<T extends keyof Events>(type: T, listener: EventListener<Events[T]>): void;
|
|
67
72
|
/**
|
|
68
73
|
* 分发事件
|
|
69
|
-
* @param
|
|
74
|
+
* @param type - 事件类型
|
|
75
|
+
* @param data - 事件数据
|
|
70
76
|
*/
|
|
71
|
-
dispatchEvent(
|
|
77
|
+
dispatchEvent<T extends keyof Events>(type: T, data: Events[T]): void;
|
|
72
78
|
/**
|
|
73
79
|
* 移除所有事件监听器
|
|
74
80
|
*/
|
|
75
|
-
|
|
81
|
+
removeAllEventListeners(): void;
|
|
76
82
|
}
|
|
77
83
|
//# sourceMappingURL=event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/tools/event.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/tools/event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEjD,MAAM,WAAW,gBAAgB,CAAC,MAAM,SAAS,QAAQ,GAAG,QAAQ;IAClE,gBAAgB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE5F,gBAAgB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAE/F,mBAAmB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE/F,aAAa,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEtE,uBAAuB,IAAI,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,8BAAsB,eAAe,CAAC,MAAM,SAAS,QAAQ,GAAG,QAAQ,CAAE,YAAW,gBAAgB,CAAC,MAAM,CAAC;;IAG3G;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3F;;;;;OAKG;IACH,gBAAgB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;IAI9F;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI9F;;;;OAIG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAUrE;;OAEG;IACH,uBAAuB,IAAI,IAAI;CAiBhC"}
|
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
import { XOR } from 'ts-xor';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* 成功结果接口,包含成功时返回的数据
|
|
4
|
+
* @template T - 成功数据类型,默认为 any
|
|
5
|
+
*/
|
|
6
|
+
export interface SuccessResult<T = any> {
|
|
7
|
+
/** 成功时返回的数据 */
|
|
8
|
+
data: T;
|
|
4
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* 错误结果接口,包含失败时返回的错误信息
|
|
12
|
+
* @template ErrorDataType - 错误数据类型,默认为 any
|
|
13
|
+
*/
|
|
5
14
|
export interface ErrorResult<ErrorDataType = any> {
|
|
15
|
+
/** 失败时返回的错误信息 */
|
|
6
16
|
error: ErrorDataType;
|
|
7
17
|
}
|
|
8
18
|
/**
|
|
9
|
-
*
|
|
19
|
+
* 结果返回类型,要么是成功结果,要么是错误结果,两者互斥
|
|
20
|
+
* 使用 XOR 类型确保结果对象要么有 data 属性,要么有 error 属性,不能同时存在
|
|
21
|
+
* @template T - 成功数据类型,默认为 any
|
|
22
|
+
* @template ErrorDataType - 错误数据类型,默认为 any
|
|
23
|
+
* @example
|
|
24
|
+
* // 成功结果
|
|
25
|
+
* const success: Result<string> = { data: '操作成功' };
|
|
26
|
+
*
|
|
27
|
+
* // 错误结果
|
|
28
|
+
* const error: Result<string, string> = { error: '操作失败' };
|
|
29
|
+
*
|
|
30
|
+
* // 类型检查会阻止同时包含 data 和 error
|
|
31
|
+
* // const invalid: Result = { data: 'ok', error: 'error' }; // 编译错误
|
|
10
32
|
*/
|
|
11
|
-
export type Result<
|
|
33
|
+
export type Result<T = any, ErrorDataType = any> = XOR<SuccessResult<T>, ErrorResult<ErrorDataType>>;
|
|
12
34
|
//# sourceMappingURL=result-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-types.d.ts","sourceRoot":"","sources":["../../src/type-definition/result-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,MAAM,WAAW,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"result-types.d.ts","sourceRoot":"","sources":["../../src/type-definition/result-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IACpC,eAAe;IACf,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,aAAa,GAAG,GAAG;IAC9C,iBAAiB;IACjB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC"}
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* // 匹配异步函数
|
|
15
15
|
* const func3: AnyFunction = async () => { await Promise.resolve(); return 42; };
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* **Note:** 此类型提供了最大的灵活性,但牺牲了类型安全性
|
|
18
|
+
* **Note:** 对于需要类型安全的场景,建议使用更具体的函数类型
|
|
19
19
|
*/
|
|
20
20
|
export type AnyFunction = (...args: any[]) => any;
|
|
21
21
|
//# sourceMappingURL=AnyFunction.d.ts.map
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
* }],
|
|
40
40
|
* };
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
42
|
+
* **Note:** 此类型递归地将所有属性变为可选,包括嵌套对象和数组元素
|
|
43
|
+
* **Note:** 对于数组类型,会递归应用到数组元素的类型
|
|
44
|
+
* **Note:** 对于只读数组,保持其只读特性的同时递归应用到元素类型
|
|
45
45
|
*/
|
|
46
46
|
export declare type DeepPartial<T> = {
|
|
47
47
|
[P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer UE> ? ReadonlyArray<DeepPartial<UE>> : DeepPartial<T[P]>;
|
package/dist/types/isArray.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* isArray(null); // 返回 false(null不是数组)
|
|
15
15
|
* @example
|
|
16
16
|
* isArray("array"); // 返回 false(字符串不是数组)
|
|
17
|
-
*
|
|
17
|
+
* **Note:** 这是对原生Array.isArray函数的直接重导出,保持与原生函数相同的行为
|
|
18
18
|
*/
|
|
19
19
|
export declare const isArray: (arg: any) => arg is any[];
|
|
20
20
|
//# sourceMappingURL=isArray.d.ts.map
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
* isArrayBuffer(undefined); // 返回 false(undefined不是ArrayBuffer)
|
|
17
17
|
* @example
|
|
18
18
|
* isArrayBuffer(new Uint8Array()); // 返回 false(Uint8Array不是ArrayBuffer)
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* **Note:** 函数使用instanceof运算符判断是否为ArrayBuffer实例
|
|
20
|
+
* **Note:** ArrayBuffer是用于表示通用的、固定长度的原始二进制数据缓冲区
|
|
21
|
+
* **Note:** 与TypedArray(如Uint8Array)的区别:ArrayBuffer是原始二进制数据,而TypedArray是对其的视图
|
|
22
22
|
*/
|
|
23
23
|
export declare const isArrayBuffer: (value: unknown) => value is ArrayBuffer;
|
|
24
24
|
//# sourceMappingURL=isArrayBuffer.d.ts.map
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
* isBoolean(null); // 返回 false(null不是布尔类型)
|
|
21
21
|
* @example
|
|
22
22
|
* isBoolean(undefined); // 返回 false(undefined不是布尔类型)
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* **Note:** 函数使用三种方式判断:直接比较true/false、检查valueOf()返回值类型
|
|
24
|
+
* **Note:** 对于布尔对象(new Boolean()),valueOf()返回其原始布尔值
|
|
25
|
+
* **Note:** 与typeof的区别:typeof new Boolean(true)返回'object',但isBoolean返回true
|
|
26
26
|
*/
|
|
27
27
|
export declare function isBoolean(value: any): value is boolean;
|
|
28
28
|
//# sourceMappingURL=isBoolean.d.ts.map
|
package/dist/types/isDate.d.ts
CHANGED
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
* isDate({}); // 返回 false(普通对象不是Date对象)
|
|
19
19
|
* @example
|
|
20
20
|
* isDate(new Date('invalid date')); // 返回 true(即使是无效日期也是Date对象)
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
* **Note:** 函数使用两种方式判断:instanceof和Object.prototype.toString.call()
|
|
22
|
+
* **Note:** 对于无效日期(Invalid Date),函数仍返回true,因为它仍是Date对象
|
|
23
|
+
* **Note:** 与isDateString的区别:此函数检查是否为Date对象,而非日期字符串
|
|
24
24
|
*/
|
|
25
25
|
export declare function isDate(value: unknown): value is Date;
|
|
26
26
|
//# sourceMappingURL=isDate.d.ts.map
|
package/dist/types/isEmpty.d.ts
CHANGED
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
* isEmpty(() => {}); // 返回 false(函数)
|
|
33
33
|
* @example
|
|
34
34
|
* isEmpty(Symbol('foo')); // 返回 false(符号)
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
35
|
+
* **Note:** 空值定义:null、undefined、空字符串、空数组、空对象、数字0、布尔值false、无效日期
|
|
36
|
+
* **Note:** 函数和符号类型永远不会被视为空值
|
|
37
|
+
* **Note:** 对于有length属性的对象(如数组、字符串),length为0时视为空
|
|
38
|
+
* **Note:** 对于有size属性的对象(如Map、Set),size为0时视为空
|
|
39
39
|
*/
|
|
40
40
|
export declare const isEmpty: (value: unknown) => boolean;
|
|
41
41
|
//# sourceMappingURL=isEmpty.d.ts.map
|
package/dist/types/isNil.d.ts
CHANGED
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* isNil(''); // 返回 false(空字符串不是null或undefined)
|
|
15
15
|
* @example
|
|
16
16
|
* isNil(false); // 返回 false(false不是null或undefined)
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* **Note:** 此函数在判断null和undefined时使用严格相等运算符(===)
|
|
18
|
+
* **Note:** 与isEmpty的区别:isNil仅检查null和undefined,而isEmpty还会检查空字符串、空数组等
|
|
19
19
|
*/
|
|
20
20
|
export declare const isNil: (value: unknown) => value is null | undefined;
|
|
21
21
|
//# sourceMappingURL=isNil.d.ts.map
|
package/dist/types/isNumber.d.ts
CHANGED
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
* isNumber(undefined); // 返回 false(undefined不是数字)
|
|
23
23
|
* @example
|
|
24
24
|
* isNumber(new Number(123)); // 返回 false(Number对象不是数字字面量)
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* **Note:** 与typeof的区别:typeof NaN返回'number',但isNumber(NaN)返回false
|
|
26
|
+
* **Note:** 函数使用try-catch块处理可能的类型转换异常
|
|
27
|
+
* **Note:** 数字字面量和Infinity都会返回true(Infinity是有效数字)
|
|
28
28
|
*/
|
|
29
29
|
export declare const isNumber: (value: any) => value is number;
|
|
30
30
|
//# sourceMappingURL=isNumber.d.ts.map
|
package/dist/types/isObject.d.ts
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
* isObject(new Date()); // 返回 false(日期对象不是纯对象)
|
|
17
17
|
* @example
|
|
18
18
|
* isObject(Object.create(null)); // 返回 false(没有constructor属性)
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* **Note:** 此函数使用value.constructor === Object进行判断,因此不识别通过Object.create(null)创建的对象
|
|
20
|
+
* **Note:** 与isObjectLike的区别:isObjectLike仅检查值是否为非null的对象,而isObject还要求是通过Object构造函数创建的
|
|
21
21
|
*/
|
|
22
22
|
export declare const isObject: (value: unknown) => value is object;
|
|
23
23
|
//# sourceMappingURL=isObject.d.ts.map
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
* isPlainObject(Object.create(null)); // 返回 true(原型为null的对象视为纯对象)
|
|
21
21
|
* @example
|
|
22
22
|
* isPlainObject(new Map()); // 返回 false(Map对象不是纯对象)
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* **Note:** 函数通过检查toString标签和原型链来判断是否为纯对象
|
|
24
|
+
* **Note:** 与isObject的区别:isObject包含所有对象类型,而isPlainObject仅包含普通对象
|
|
25
|
+
* **Note:** 原型为null的对象(Object.create(null))也被视为纯对象
|
|
26
26
|
*/
|
|
27
27
|
export declare function isPlainObject(object: unknown): object is object;
|
|
28
28
|
//# sourceMappingURL=isPlainObject.d.ts.map
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
* isPrimitive(() => {}); // 返回 false(函数不是原始类型)
|
|
27
27
|
* @example
|
|
28
28
|
* isPrimitive(new Date()); // 返回 false(日期对象不是原始类型)
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
* **Note:** 函数使用typeof运算符和null检查来判断是否为原始类型
|
|
30
|
+
* **Note:** 原始类型是不可变的值,没有方法和属性(尽管JavaScript允许访问它们的包装对象方法)
|
|
31
|
+
* **Note:** 函数实现使用`value == null`来同时检查null和undefined
|
|
32
32
|
*/
|
|
33
33
|
export declare function isPrimitive(value: unknown): value is null | undefined | string | number | boolean | symbol | bigint;
|
|
34
34
|
//# sourceMappingURL=isPrimitive.d.ts.map
|
package/dist/types/isRegExp.d.ts
CHANGED
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
* isRegExp(undefined); // 返回 false(undefined不是正则表达式)
|
|
17
17
|
* @example
|
|
18
18
|
* isRegExp({}); // 返回 false(普通对象不是正则表达式)
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* **Note:** 函数使用instanceof运算符判断是否为RegExp实例
|
|
20
|
+
* **Note:** 正则表达式字面量和通过RegExp构造函数创建的正则表达式都会返回true
|
|
21
|
+
* **Note:** 字符串形式的正则表达式(如'/abc/')不会被识别为正则表达式
|
|
22
22
|
*/
|
|
23
23
|
export declare function isRegExp(value: unknown): value is RegExp;
|
|
24
24
|
//# sourceMappingURL=isRegExp.d.ts.map
|
package/dist/types/isString.d.ts
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
* isString(undefined); // 返回 false(undefined不是字符串)
|
|
17
17
|
* @example
|
|
18
18
|
* isString(new String('hello')); // 返回 false(String对象不是字符串字面量)
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* **Note:** 使用typeof运算符判断,对于String对象返回'object'而非'string'
|
|
20
|
+
* **Note:** 字符串字面量和空字符串都会返回true
|
|
21
21
|
*/
|
|
22
22
|
export declare function isString(value: unknown): value is string;
|
|
23
23
|
//# sourceMappingURL=isString.d.ts.map
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
* isUint8Array(new ArrayBuffer(8)); // 返回 false(ArrayBuffer不是Uint8Array)
|
|
19
19
|
* @example
|
|
20
20
|
* isUint8Array(new Uint16Array()); // 返回 false(Uint16Array不是Uint8Array)
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
* **Note:** 函数使用instanceof运算符判断是否为Uint8Array实例
|
|
22
|
+
* **Note:** Uint8Array是8位无符号整数类型化数组,范围为0到255
|
|
23
|
+
* **Note:** 与ArrayBuffer的区别:Uint8Array是对ArrayBuffer的视图,提供了对二进制数据的特定类型访问
|
|
24
24
|
*/
|
|
25
25
|
export declare const isUint8Array: (value: unknown) => value is Uint8Array;
|
|
26
26
|
//# sourceMappingURL=isUint8Array.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiao/utils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
]
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"rxjs": "^7.8.2",
|
|
29
28
|
"fastest-levenshtein": "^1.0.16",
|
|
30
|
-
"ts-xor": "^1.3.0",
|
|
31
29
|
"ms": "^2.1.3",
|
|
32
|
-
"
|
|
30
|
+
"rxjs": "^7.8.2",
|
|
31
|
+
"ts-xor": "^1.3.0",
|
|
32
|
+
"type-fest": "^5.3.1"
|
|
33
33
|
}
|
|
34
34
|
}
|