@zwa73/utils 1.0.46 → 1.0.49
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/UtilClass.d.ts +36 -0
- package/dist/UtilClass.js +53 -1
- package/dist/UtilCom.js +6 -6
- package/dist/UtilDecorators.d.ts +8 -12
- package/dist/UtilDecorators.js +75 -13
- package/dist/UtilFileTools.d.ts +12 -2
- package/dist/UtilFileTools.js +23 -9
- package/dist/UtilFunctions.d.ts +74 -14
- package/dist/UtilFunctions.js +156 -37
- package/dist/UtilInterfaces.d.ts +22 -9
- package/dist/test/test.d.ts +1 -0
- package/dist/test/test.js +187 -0
- package/dist/test/test2.d.ts +1 -0
- package/dist/test/test2.js +35 -0
- package/package.json +4 -2
- package/postinstall.js +39 -0
- package/publish.bat +1 -1
- package/src/UtilClass.ts +68 -0
- package/src/UtilCom.ts +7 -7
- package/src/UtilDecorators.ts +66 -12
- package/src/UtilFileTools.ts +21 -9
- package/src/UtilFunctions.ts +212 -39
- package/src/UtilInterfaces.ts +56 -11
- package/src/test/test.ts +223 -0
- package/src/test/test2.ts +40 -0
- package/tsconfig.json +2 -0
package/dist/UtilClass.d.ts
CHANGED
|
@@ -500,4 +500,40 @@ export declare class SHashMap<K, V> {
|
|
|
500
500
|
};
|
|
501
501
|
};
|
|
502
502
|
}
|
|
503
|
+
/**函数组合器 */
|
|
504
|
+
export declare class Composer<Result, PreArg = Result> {
|
|
505
|
+
/**组合函数列表 */
|
|
506
|
+
private funcs;
|
|
507
|
+
private constructor();
|
|
508
|
+
/**添加单个参数与返回值不同的函数 */
|
|
509
|
+
static push<Result, Arg>(func: (arg: Arg) => Result): Composer<Result, Arg>;
|
|
510
|
+
/**添加多个参数与返回值相同的函数 */
|
|
511
|
+
static push<Result>(func: ((arg: Result) => Result), ...funcs: ((arg: Result) => Result)[]): Composer<Result>;
|
|
512
|
+
/**添加单个参数与返回值不同的函数 */
|
|
513
|
+
push<T>(func: (arg: T) => PreArg): Composer<Result, T>;
|
|
514
|
+
/**添加多个参数与返回值相同的函数 */
|
|
515
|
+
push(func: ((arg: Result) => Result), ...funcs: ((arg: PreArg) => PreArg)[]): Composer<Result, PreArg>;
|
|
516
|
+
/**组合函数 */
|
|
517
|
+
compose(): (arg: PreArg) => Result;
|
|
518
|
+
/**直接调用 */
|
|
519
|
+
invoke(arg: PreArg): Result;
|
|
520
|
+
}
|
|
521
|
+
/**函数管道器 */
|
|
522
|
+
export declare class Piper<Arg, Result = Arg> {
|
|
523
|
+
/**管道函数列表 */
|
|
524
|
+
private funcs;
|
|
525
|
+
private constructor();
|
|
526
|
+
/**添加单个参数与返回值不同的函数 */
|
|
527
|
+
static pipe<Arg, Result>(func: (arg: Arg) => Result): Piper<Arg, Result>;
|
|
528
|
+
/**添加多个参数与返回值相同的函数 */
|
|
529
|
+
static pipe<Arg>(func: ((arg: Arg) => Arg), ...funcs: ((arg: Arg) => Arg)[]): Piper<Arg>;
|
|
530
|
+
/**添加单个参数与返回值不同的函数 */
|
|
531
|
+
pipe<T>(func: (arg: Result) => T): Piper<Arg, T>;
|
|
532
|
+
/**添加多个参数与返回值相同的函数 */
|
|
533
|
+
pipe(func: ((arg: Result) => Result), ...funcs: ((arg: Result) => Result)[]): Piper<Arg, Result>;
|
|
534
|
+
/**管道函数 */
|
|
535
|
+
pipeline(): (arg: Arg) => Result;
|
|
536
|
+
/**直接调用 */
|
|
537
|
+
invoke(arg: Arg): Result;
|
|
538
|
+
}
|
|
503
539
|
export {};
|
package/dist/UtilClass.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SHashMap = exports.SEntry = exports.SIterator = exports.SStream = exports.SList = void 0;
|
|
3
|
+
exports.Piper = exports.Composer = exports.SHashMap = exports.SEntry = exports.SIterator = exports.SStream = exports.SList = void 0;
|
|
4
4
|
class SList {
|
|
5
5
|
_arr;
|
|
6
6
|
constructor(obj) {
|
|
@@ -840,3 +840,55 @@ class SKVC {
|
|
|
840
840
|
stringMap = new SHashMap();
|
|
841
841
|
constructor() { }
|
|
842
842
|
}
|
|
843
|
+
/**函数组合器 */
|
|
844
|
+
class Composer {
|
|
845
|
+
/**组合函数列表 */
|
|
846
|
+
funcs = [];
|
|
847
|
+
constructor() { }
|
|
848
|
+
;
|
|
849
|
+
static push(...funcs) {
|
|
850
|
+
const newComposer = new Composer();
|
|
851
|
+
newComposer.funcs = [...funcs];
|
|
852
|
+
return newComposer;
|
|
853
|
+
}
|
|
854
|
+
push(...funcs) {
|
|
855
|
+
const newComposer = new Composer();
|
|
856
|
+
newComposer.funcs = [...this.funcs, ...funcs];
|
|
857
|
+
return newComposer;
|
|
858
|
+
}
|
|
859
|
+
/**组合函数 */
|
|
860
|
+
compose() {
|
|
861
|
+
return (arg) => this.funcs.reduceRight((value, func) => func(value), arg);
|
|
862
|
+
}
|
|
863
|
+
/**直接调用 */
|
|
864
|
+
invoke(arg) {
|
|
865
|
+
return this.funcs.reduceRight((value, func) => func(value), arg);
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
exports.Composer = Composer;
|
|
869
|
+
/**函数管道器 */
|
|
870
|
+
class Piper {
|
|
871
|
+
/**管道函数列表 */
|
|
872
|
+
funcs = [];
|
|
873
|
+
constructor() { }
|
|
874
|
+
;
|
|
875
|
+
static pipe(...funcs) {
|
|
876
|
+
const newPiper = new Piper();
|
|
877
|
+
newPiper.funcs = [...funcs];
|
|
878
|
+
return newPiper;
|
|
879
|
+
}
|
|
880
|
+
pipe(...funcs) {
|
|
881
|
+
const newPiper = new Piper();
|
|
882
|
+
newPiper.funcs = [...this.funcs, ...funcs];
|
|
883
|
+
return newPiper;
|
|
884
|
+
}
|
|
885
|
+
/**管道函数 */
|
|
886
|
+
pipeline() {
|
|
887
|
+
return (arg) => this.funcs.reduce((value, func) => func(value), arg);
|
|
888
|
+
}
|
|
889
|
+
/**直接调用 */
|
|
890
|
+
invoke(arg) {
|
|
891
|
+
return this.funcs.reduce((value, func) => func(value), arg);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
exports.Piper = Piper;
|
package/dist/UtilCom.js
CHANGED
|
@@ -22,7 +22,7 @@ var UtilCom;
|
|
|
22
22
|
if (hasTimeLimit)
|
|
23
23
|
timeLimit *= 1000;
|
|
24
24
|
const jsonStr = (0, UtilInterfaces_1.stringifyJToken)(json);
|
|
25
|
-
const funcName =
|
|
25
|
+
const funcName = `s${posttype}Psot`;
|
|
26
26
|
return new Promise((resolve, rejecte) => {
|
|
27
27
|
const resFunc = (res) => {
|
|
28
28
|
try {
|
|
@@ -30,7 +30,7 @@ var UtilCom;
|
|
|
30
30
|
if (hasTimeLimit) {
|
|
31
31
|
res.setTimeout(timeLimit, () => {
|
|
32
32
|
//res.abort();
|
|
33
|
-
UtilLogger_1.SLogger.warn(funcName
|
|
33
|
+
UtilLogger_1.SLogger.warn(`${funcName} 接收反馈超时: ${timeLimit} ms`);
|
|
34
34
|
resolve(null);
|
|
35
35
|
return;
|
|
36
36
|
});
|
|
@@ -39,7 +39,7 @@ var UtilCom;
|
|
|
39
39
|
res.setEncoding('utf8');
|
|
40
40
|
res.on('data', (chunk) => resdata += chunk);
|
|
41
41
|
res.on('error', (e) => {
|
|
42
|
-
UtilLogger_1.SLogger.warn(funcName
|
|
42
|
+
UtilLogger_1.SLogger.warn(`${funcName} 接收反馈错误:${e}`);
|
|
43
43
|
resolve(null);
|
|
44
44
|
return;
|
|
45
45
|
});
|
|
@@ -56,7 +56,7 @@ var UtilCom;
|
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
58
|
catch (e) {
|
|
59
|
-
UtilLogger_1.SLogger.warn(funcName
|
|
59
|
+
UtilLogger_1.SLogger.warn(`${funcName} 接收反馈错误:${e}\n原始字符串:${resdata}`);
|
|
60
60
|
resolve(null);
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
@@ -77,12 +77,12 @@ var UtilCom;
|
|
|
77
77
|
//请求超时
|
|
78
78
|
if (hasTimeLimit) {
|
|
79
79
|
req.setTimeout(timeLimit, () => {
|
|
80
|
-
UtilLogger_1.SLogger.warn(funcName
|
|
80
|
+
UtilLogger_1.SLogger.warn(`${funcName} 发送请求超时: ${timeLimit} ms`);
|
|
81
81
|
req.destroy();
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
req.on('error', (e) => {
|
|
85
|
-
UtilLogger_1.SLogger.warn(funcName
|
|
85
|
+
UtilLogger_1.SLogger.warn(`${funcName} 发送请求错误:${e}`);
|
|
86
86
|
resolve(null);
|
|
87
87
|
});
|
|
88
88
|
req.write(jsonStr);
|
package/dist/UtilDecorators.d.ts
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
/**用于打印方法的调用
|
|
2
|
-
* @returns {void}
|
|
3
|
-
*/
|
|
1
|
+
/**用于打印方法的调用 */
|
|
4
2
|
export declare function DLogger(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
5
|
-
/**用于打印异步方法的调用
|
|
6
|
-
* @returns {void}
|
|
7
|
-
*/
|
|
3
|
+
/**用于打印异步方法的调用 */
|
|
8
4
|
export declare function DLoggerAsync(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*/
|
|
5
|
+
/**try-finally包装 */
|
|
6
|
+
export declare function Defer(deferLogic: () => void): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
7
|
+
/**异步的try-finally包装 */
|
|
8
|
+
export declare function DeferAsync(deferLogic: () => void): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
9
|
+
/**用于捕获方法中的错误 */
|
|
12
10
|
export declare function DCatchErrors(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
13
|
-
/**用于捕获异步方法中的错误
|
|
14
|
-
* @returns {void}
|
|
15
|
-
*/
|
|
11
|
+
/**用于捕获异步方法中的错误 */
|
|
16
12
|
export declare function DCatchErrorsAsync(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
package/dist/UtilDecorators.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DCatchErrorsAsync = exports.DCatchErrors = exports.DLoggerAsync = exports.DLogger = void 0;
|
|
12
|
+
exports.DCatchErrorsAsync = exports.DCatchErrors = exports.DeferAsync = exports.Defer = exports.DLoggerAsync = exports.DLogger = void 0;
|
|
4
13
|
const UtilLogger_1 = require("./UtilLogger");
|
|
5
|
-
/**用于打印方法的调用
|
|
6
|
-
* @returns {void}
|
|
7
|
-
*/
|
|
14
|
+
/**用于打印方法的调用 */
|
|
8
15
|
function DLogger() {
|
|
9
16
|
return function (target, propertyKey, descriptor) {
|
|
10
17
|
const originalMethod = descriptor.value;
|
|
@@ -16,9 +23,7 @@ function DLogger() {
|
|
|
16
23
|
};
|
|
17
24
|
}
|
|
18
25
|
exports.DLogger = DLogger;
|
|
19
|
-
/**用于打印异步方法的调用
|
|
20
|
-
* @returns {void}
|
|
21
|
-
*/
|
|
26
|
+
/**用于打印异步方法的调用 */
|
|
22
27
|
function DLoggerAsync() {
|
|
23
28
|
return function (target, propertyKey, descriptor) {
|
|
24
29
|
const originalMethod = descriptor.value;
|
|
@@ -30,9 +35,45 @@ function DLoggerAsync() {
|
|
|
30
35
|
};
|
|
31
36
|
}
|
|
32
37
|
exports.DLoggerAsync = DLoggerAsync;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
/**try-finally包装 */
|
|
39
|
+
function Defer(deferLogic) {
|
|
40
|
+
return function (target, propertyKey, descriptor) {
|
|
41
|
+
const originalMethod = descriptor.value;
|
|
42
|
+
descriptor.value = function (...args) {
|
|
43
|
+
try {
|
|
44
|
+
const result = originalMethod.apply(this, args);
|
|
45
|
+
deferLogic();
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
deferLogic();
|
|
50
|
+
throw e;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return descriptor;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
exports.Defer = Defer;
|
|
57
|
+
/**异步的try-finally包装 */
|
|
58
|
+
function DeferAsync(deferLogic) {
|
|
59
|
+
return function (target, propertyKey, descriptor) {
|
|
60
|
+
const originalMethod = descriptor.value;
|
|
61
|
+
descriptor.value = async function (...args) {
|
|
62
|
+
try {
|
|
63
|
+
const result = await originalMethod.apply(this, args);
|
|
64
|
+
deferLogic();
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
deferLogic();
|
|
69
|
+
throw e;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
return descriptor;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
exports.DeferAsync = DeferAsync;
|
|
76
|
+
/**用于捕获方法中的错误 */
|
|
36
77
|
function DCatchErrors() {
|
|
37
78
|
return function (target, propertyKey, descriptor) {
|
|
38
79
|
const originalMethod = descriptor.value;
|
|
@@ -47,9 +88,7 @@ function DCatchErrors() {
|
|
|
47
88
|
};
|
|
48
89
|
}
|
|
49
90
|
exports.DCatchErrors = DCatchErrors;
|
|
50
|
-
/**用于捕获异步方法中的错误
|
|
51
|
-
* @returns {void}
|
|
52
|
-
*/
|
|
91
|
+
/**用于捕获异步方法中的错误 */
|
|
53
92
|
function DCatchErrorsAsync() {
|
|
54
93
|
return function (target, propertyKey, descriptor) {
|
|
55
94
|
const originalMethod = descriptor.value;
|
|
@@ -64,3 +103,26 @@ function DCatchErrorsAsync() {
|
|
|
64
103
|
};
|
|
65
104
|
}
|
|
66
105
|
exports.DCatchErrorsAsync = DCatchErrorsAsync;
|
|
106
|
+
function AddNumberDecorator(n) {
|
|
107
|
+
return function (target, propertyKey, descriptor) {
|
|
108
|
+
const originalMethod = descriptor.value;
|
|
109
|
+
descriptor.value = function (num) {
|
|
110
|
+
const result = originalMethod.apply(this, [num]);
|
|
111
|
+
return result + n;
|
|
112
|
+
};
|
|
113
|
+
return descriptor;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
class Example {
|
|
117
|
+
myMethod(num) {
|
|
118
|
+
return num;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
__decorate([
|
|
122
|
+
AddNumberDecorator(10),
|
|
123
|
+
__metadata("design:type", Function),
|
|
124
|
+
__metadata("design:paramtypes", [Number]),
|
|
125
|
+
__metadata("design:returntype", Number)
|
|
126
|
+
], Example.prototype, "myMethod", null);
|
|
127
|
+
//let a = new Example();
|
|
128
|
+
//a.myMethod(10);//?
|
package/dist/UtilFileTools.d.ts
CHANGED
|
@@ -76,7 +76,17 @@ export declare namespace UtilFT {
|
|
|
76
76
|
/**搜索路径符合正则表达式的文件
|
|
77
77
|
* @param folder - 文件夹路径
|
|
78
78
|
* @param traitRegex - 正则表达式
|
|
79
|
-
* @returns
|
|
79
|
+
* @returns 文件名路径数组
|
|
80
80
|
*/
|
|
81
|
-
function
|
|
81
|
+
function fileSearchRegex(folder: string, traitRegex: string): string[];
|
|
82
|
+
/**搜索符合Glob匹配的文件
|
|
83
|
+
* @param globPattern - glob匹配
|
|
84
|
+
* @param ignore - 忽略的文件
|
|
85
|
+
* @returns 文件绝对路径数组
|
|
86
|
+
*/
|
|
87
|
+
function fileSearchGlob(globPattern: string | string[], ignore?: string | string[]): string[];
|
|
88
|
+
/**
|
|
89
|
+
* @deprecated 请使用 fileSearchRegex 或 fileSearchGlob
|
|
90
|
+
*/
|
|
91
|
+
function fileSearch(...patams: any[]): void;
|
|
82
92
|
}
|
package/dist/UtilFileTools.js
CHANGED
|
@@ -6,6 +6,7 @@ const path = require("path");
|
|
|
6
6
|
const UtilInterfaces_1 = require("./UtilInterfaces");
|
|
7
7
|
const UtilLogger_1 = require("./UtilLogger");
|
|
8
8
|
const JSON5 = require("json5");
|
|
9
|
+
const glob_1 = require("glob");
|
|
9
10
|
/**文件工具 */
|
|
10
11
|
var UtilFT;
|
|
11
12
|
(function (UtilFT) {
|
|
@@ -168,27 +169,40 @@ var UtilFT;
|
|
|
168
169
|
/**搜索路径符合正则表达式的文件
|
|
169
170
|
* @param folder - 文件夹路径
|
|
170
171
|
* @param traitRegex - 正则表达式
|
|
171
|
-
* @returns
|
|
172
|
+
* @returns 文件名路径数组
|
|
172
173
|
*/
|
|
173
|
-
function
|
|
174
|
-
let
|
|
174
|
+
function fileSearchRegex(folder, traitRegex) {
|
|
175
|
+
let outArray = [];
|
|
175
176
|
let subFiles = fs.readdirSync(folder);
|
|
176
177
|
let regex = new RegExp(traitRegex);
|
|
177
178
|
for (let subFile of subFiles) {
|
|
178
179
|
let subFilePath = path.join(folder, subFile);
|
|
179
|
-
subFilePath = subFilePath.replace(/\\/g, "/");
|
|
180
180
|
let stat = fs.lstatSync(subFilePath);
|
|
181
181
|
//判断是否是文件夹,递归调用
|
|
182
182
|
if (stat.isDirectory()) {
|
|
183
|
-
|
|
184
|
-
for (let key in subMap)
|
|
185
|
-
outMap[key] = subMap[key];
|
|
183
|
+
outArray.push(...fileSearchRegex(path.join(subFilePath, path.sep), traitRegex));
|
|
186
184
|
continue;
|
|
187
185
|
}
|
|
188
186
|
if (regex.test(subFilePath))
|
|
189
|
-
|
|
187
|
+
outArray.push(subFilePath);
|
|
190
188
|
}
|
|
191
|
-
return
|
|
189
|
+
return outArray;
|
|
190
|
+
}
|
|
191
|
+
UtilFT.fileSearchRegex = fileSearchRegex;
|
|
192
|
+
/**搜索符合Glob匹配的文件
|
|
193
|
+
* @param globPattern - glob匹配
|
|
194
|
+
* @param ignore - 忽略的文件
|
|
195
|
+
* @returns 文件绝对路径数组
|
|
196
|
+
*/
|
|
197
|
+
function fileSearchGlob(globPattern, ignore) {
|
|
198
|
+
return (0, glob_1.globSync)(globPattern, { ignore, absolute: true });
|
|
199
|
+
}
|
|
200
|
+
UtilFT.fileSearchGlob = fileSearchGlob;
|
|
201
|
+
/**
|
|
202
|
+
* @deprecated 请使用 fileSearchRegex 或 fileSearchGlob
|
|
203
|
+
*/
|
|
204
|
+
function fileSearch(...patams) {
|
|
205
|
+
throw "请使用 fileSearchRegex 或 fileSearchGlob";
|
|
192
206
|
}
|
|
193
207
|
UtilFT.fileSearch = fileSearch;
|
|
194
208
|
})(UtilFT = exports.UtilFT || (exports.UtilFT = {}));
|
package/dist/UtilFunctions.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { JToken, PromiseProcFn, PromiseVerifyFn } from "./UtilInterfaces";
|
|
1
|
+
import { ComposedClassMult, ComposedPartClass as ComposedPartClass, JToken, PromiseProcFn, PromiseVerifyFn } from "./UtilInterfaces";
|
|
2
2
|
/**常用函数 */
|
|
3
3
|
export declare namespace UtilFunc {
|
|
4
4
|
/**获取当前时间戳
|
|
5
5
|
* number ()
|
|
6
6
|
* @returns {number} 时间戳
|
|
7
7
|
*/
|
|
8
|
-
function getTime(): number;
|
|
8
|
+
export function getTime(): number;
|
|
9
9
|
/**初始化对象的字段
|
|
10
10
|
* void (Object,string,any)
|
|
11
11
|
* @param {Record<string,T>} obj - 所要初始化的对象
|
|
@@ -13,51 +13,111 @@ export declare namespace UtilFunc {
|
|
|
13
13
|
* @param {T} defaultVal - 默认值
|
|
14
14
|
* @returns {T} - 最终值
|
|
15
15
|
*/
|
|
16
|
-
function initField<T>(obj: Record<string, T>, field: string, defaultVal: T): T;
|
|
16
|
+
export function initField<T>(obj: Record<string, T>, field: string, defaultVal: T): T;
|
|
17
17
|
/**生成一串uuid
|
|
18
18
|
* string ()
|
|
19
19
|
* @returns {string} uuid
|
|
20
20
|
*/
|
|
21
|
-
function genUUID(): string;
|
|
21
|
+
export function genUUID(): string;
|
|
22
22
|
/**计算Hash
|
|
23
23
|
* string ()
|
|
24
24
|
* @param {string} str - 待计算的字符串
|
|
25
25
|
* @returns {string} hash
|
|
26
26
|
*/
|
|
27
|
-
function calcHash(str: string): string;
|
|
27
|
+
export function calcHash(str: string): string;
|
|
28
28
|
/**深克隆 序列化并反序列化
|
|
29
29
|
* @template {T} T - JToken类型的泛型
|
|
30
30
|
* @param {T} obj - 克隆目标
|
|
31
31
|
* @returns {T} 克隆结果
|
|
32
32
|
*/
|
|
33
|
-
function deepClone<T extends JToken>(obj: T): T;
|
|
33
|
+
export function deepClone<T extends JToken>(obj: T): T;
|
|
34
34
|
/**是否为安全的数字
|
|
35
35
|
* @param {number} num - 所要检测的数字
|
|
36
36
|
* @returns {boolean} 是否安全
|
|
37
37
|
*/
|
|
38
|
-
function isSafeNumber(num: number): boolean;
|
|
38
|
+
export function isSafeNumber(num: number): boolean;
|
|
39
39
|
/**等待 timeMs 毫秒
|
|
40
40
|
* @async
|
|
41
41
|
* @param {number} timeMs - 等待的毫秒数
|
|
42
42
|
* @returns {Promise<boolean>}
|
|
43
43
|
*/
|
|
44
|
-
function sleep(timeMs: number): Promise<boolean>;
|
|
44
|
+
export function sleep(timeMs: number): Promise<boolean>;
|
|
45
45
|
/**封装的 cp.exec 执行一段指令 指令完成后返回 Promise
|
|
46
46
|
* @param {string} command 指令文本
|
|
47
47
|
*/
|
|
48
|
-
function exec(command: string): Promise<{
|
|
48
|
+
export function exec(command: string): Promise<{
|
|
49
49
|
stdout: string;
|
|
50
50
|
stderr: string;
|
|
51
51
|
}>;
|
|
52
52
|
/**获得一个永不完成的Promise单例 */
|
|
53
|
-
function getNeverResolvedPromise<T>(): Promise<T>;
|
|
53
|
+
export function getNeverResolvedPromise<T>(): Promise<T>;
|
|
54
54
|
/**重复尝试promise
|
|
55
55
|
* @async
|
|
56
56
|
* @param {PromiseProcFn<T>} [procFn] - 发起函数
|
|
57
57
|
* @param {PromiseVerifyFn<T>} [verifyFn] - 验证函数
|
|
58
|
-
* @param {number} [repeatCount]
|
|
59
|
-
* @param {number} [repeatTime]
|
|
60
|
-
* @returns {Promise<T|null>}
|
|
58
|
+
* @param {number} [repeatCount] - 重试次数
|
|
59
|
+
* @param {number} [repeatTime] - 超时时间/秒 最小为10秒
|
|
60
|
+
* @returns {Promise<T|null>} - 结果 null 为全部失败/超时
|
|
61
61
|
*/
|
|
62
|
-
function repeatPromise<T>(procFn: PromiseProcFn<T>, verifyFn?: PromiseVerifyFn<T>, repeatCount?: number, repeatTime?: number): Promise<T | null>;
|
|
62
|
+
export function repeatPromise<T>(procFn: PromiseProcFn<T>, verifyFn?: PromiseVerifyFn<T>, repeatCount?: number, repeatTime?: number): Promise<T | null>;
|
|
63
|
+
/**柯里化函数类型 */
|
|
64
|
+
type CurryFunc<T, PrevArgs extends any[] = []> = T extends (...args: infer Args) => infer Result ? Args extends [infer Arg, ...infer RestArgs] ? RestArgs extends [] ? ((...args: [...PrevArgs, Arg]) => Result) : ((...args: [...PrevArgs, Arg]) => CurryFunc<(...rest: RestArgs) => Result>) & (CurryFunc<(...args: RestArgs) => Result, [...PrevArgs, Arg]>) : Args extends [] ? () => Result : never : never;
|
|
65
|
+
/**柯里化转换
|
|
66
|
+
* @param {T} fn - 将要转换的函数
|
|
67
|
+
* @returns {CurryFunc<T>} 柯里化的函数
|
|
68
|
+
*/
|
|
69
|
+
export function curry<T extends (...args: any[]) => any>(fn: T): CurryFunc<T>;
|
|
70
|
+
/**
|
|
71
|
+
let sumvoid = ()=>10;
|
|
72
|
+
let a = curry(sumvoid);//?
|
|
73
|
+
console.log(a());
|
|
74
|
+
let sum = (a:number,b:string,c:number,d:boolean)=>a+b+c+d;
|
|
75
|
+
let sumCu = curry(sum);//?
|
|
76
|
+
let suma = sumCu(1)("ss");//?
|
|
77
|
+
let sumb = sumCu(1,"1")(2);//?
|
|
78
|
+
let sumc = sumCu(4);//?
|
|
79
|
+
let sumz = sumCu(1,"b",3)(false);//?
|
|
80
|
+
console.log(suma(2,true));
|
|
81
|
+
console.log(sumb(true));
|
|
82
|
+
console.log(sumc("s",3,false));
|
|
83
|
+
*/
|
|
84
|
+
/**可组合的函数 */
|
|
85
|
+
type CompFunc<T = any, R = any> = (arg: T) => R;
|
|
86
|
+
/**函数组合 从右到左执行 */
|
|
87
|
+
export function compose<T>(...fs: CompFunc<T, T>[]): CompFunc<T, T>;
|
|
88
|
+
export function compose<T, R>(f1: CompFunc<T, R>): CompFunc<T, R>;
|
|
89
|
+
export function compose<T, R, R1>(f2: CompFunc<R, R1>, f1: CompFunc<T, R>): CompFunc<T, R1>;
|
|
90
|
+
export function compose<T, R, R1, R2>(f3: CompFunc<R1, R2>, f2: CompFunc<R, R1>, f1: CompFunc<T, R>): CompFunc<T, R2>;
|
|
91
|
+
export function compose<T, R, R1, R2, R3>(f4: CompFunc<R2, R3>, f3: CompFunc<R1, R2>, f2: CompFunc<R, R1>, f1: CompFunc<T, R>): CompFunc<T, R3>;
|
|
92
|
+
export function compose<T, R, R1, R2, R3, R4>(f5: CompFunc<R3, R4>, f4: CompFunc<R2, R3>, f3: CompFunc<R1, R2>, f2: CompFunc<R, R1>, f1: CompFunc<T, R>): CompFunc<T, R4>;
|
|
93
|
+
/**函数管道 从左到右执行 */
|
|
94
|
+
export function pipeline<T>(...fs: CompFunc<T, T>[]): CompFunc<T, T>;
|
|
95
|
+
export function pipeline<T, R>(f1: CompFunc<T, R>): CompFunc<T, R>;
|
|
96
|
+
export function pipeline<T, R, R1>(f1: CompFunc<T, R>, f2: CompFunc<R, R1>): CompFunc<T, R1>;
|
|
97
|
+
export function pipeline<T, R, R1, R2>(f1: CompFunc<T, R>, f2: CompFunc<R, R1>, f3: CompFunc<R1, R2>): CompFunc<T, R2>;
|
|
98
|
+
export function pipeline<T, R, R1, R2, R3>(f1: CompFunc<T, R>, f2: CompFunc<R, R1>, f3: CompFunc<R1, R2>, f4: CompFunc<R2, R3>): CompFunc<T, R3>;
|
|
99
|
+
export function pipeline<T, R, R1, R2, R3, R4>(f1: CompFunc<T, R>, f2: CompFunc<R, R1>, f3: CompFunc<R1, R2>, f4: CompFunc<R2, R3>, f5: CompFunc<R3, R4>): CompFunc<T, R4>;
|
|
100
|
+
/**部分类组合
|
|
101
|
+
* 将mixin的部分字段混入base
|
|
102
|
+
* @param base - 基础类
|
|
103
|
+
* @param mixin - 目标类
|
|
104
|
+
* @param fields - 需要混入的字段
|
|
105
|
+
* @returns - 混合完成的类
|
|
106
|
+
*/
|
|
107
|
+
export function composePartClass<Base extends object, Mixin extends object>(base: Base, mixin: Mixin, ...fields: (keyof Mixin)[]): ComposedPartClass<Base, Mixin, keyof Mixin>;
|
|
108
|
+
/**类组合
|
|
109
|
+
* 将mixinList每个成员的字段混入base
|
|
110
|
+
* @param base - 基础类
|
|
111
|
+
* @param mixinList - 目标类
|
|
112
|
+
* @returns - 混合完成的类
|
|
113
|
+
*/
|
|
114
|
+
export function composeClass<Base extends object, MixinList extends object[]>(base: Base, ...mixinList: MixinList): ComposedClassMult<Base, MixinList>;
|
|
115
|
+
/**对对象的每个属性应用映射函数,并返回一个新的对象。
|
|
116
|
+
* @template T - 对象的类型
|
|
117
|
+
* @param obj - 要处理的对象
|
|
118
|
+
* @param mapper - 映射函数,接受一个值和一个键,返回一个新的值
|
|
119
|
+
* @returns - 一个新的对象,它的属性是原对象的属性经过映射函数处理后的结果
|
|
120
|
+
*/
|
|
121
|
+
export function mapObject<T extends Object>(obj: T, mapper: (key: keyof T, value: T[keyof T]) => T[keyof T]): T;
|
|
122
|
+
export {};
|
|
63
123
|
}
|