@anjianshi/utils 1.2.7 → 1.3.0
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/env-node/env-reader.d.ts +12 -0
- package/env-node/env-reader.js +31 -0
- package/env-node/{logging.d.ts → logging/handlers.d.ts} +1 -6
- package/env-node/{logging.js → logging/handlers.js} +1 -12
- package/env-node/logging/index.d.ts +11 -0
- package/env-node/logging/index.js +14 -0
- package/env-node/typeorm/adapt-logging.d.ts +11 -0
- package/env-node/typeorm/adapt-logging.js +42 -0
- package/env-node/typeorm/index.d.ts +31 -0
- package/env-node/typeorm/index.js +39 -0
- package/lang/index.d.ts +1 -0
- package/lang/index.js +1 -0
- package/lang/may-success.d.ts +40 -0
- package/lang/may-success.js +27 -0
- package/lang/types.d.ts +12 -43
- package/lang/types.js +0 -13
- package/md5.d.ts +30 -0
- package/md5.js +309 -0
- package/package.json +3 -1
- package/src/env-node/env-reader.ts +33 -0
- package/src/env-node/{logging.ts → logging/handlers.ts} +1 -21
- package/src/env-node/logging/index.ts +16 -0
- package/src/env-node/typeorm/adapt-logging.ts +54 -0
- package/src/env-node/typeorm/index.ts +62 -0
- package/src/lang/index.ts +1 -0
- package/src/lang/may-success.ts +57 -0
- package/src/lang/types.ts +14 -59
- package/src/md5.ts +319 -0
- package/src/url.ts +48 -55
- package/src/validators/array.ts +62 -0
- package/src/validators/base.ts +49 -0
- package/src/validators/boolean.ts +24 -0
- package/src/validators/factories.ts +47 -0
- package/src/validators/index.ts +9 -0
- package/src/validators/number.ts +43 -0
- package/src/validators/object.ts +70 -0
- package/src/validators/string.ts +55 -0
- package/url.d.ts +31 -15
- package/url.js +22 -28
- package/validators/array.d.ts +20 -0
- package/validators/array.js +44 -0
- package/validators/base.d.ts +26 -0
- package/validators/base.js +28 -0
- package/validators/boolean.d.ts +4 -0
- package/validators/boolean.js +28 -0
- package/validators/factories.d.ts +18 -0
- package/validators/factories.js +41 -0
- package/validators/index.d.ts +7 -0
- package/validators/index.js +7 -0
- package/validators/number.d.ts +15 -0
- package/validators/number.js +32 -0
- package/validators/object.d.ts +20 -0
- package/validators/object.js +52 -0
- package/validators/string.d.ts +17 -0
- package/validators/string.js +35 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 读取 .env 文件,并获取格式化后的数据
|
|
3
|
+
* 注意:依赖 dotenv 包
|
|
4
|
+
*/
|
|
5
|
+
export declare class EnvReader {
|
|
6
|
+
readonly envFile: string;
|
|
7
|
+
envsFromFile: Record<string, string>;
|
|
8
|
+
constructor(envFile: string);
|
|
9
|
+
get(key: string, defaults: string): string;
|
|
10
|
+
get(key: string, defaults: number): number;
|
|
11
|
+
get(key: string, defaults: boolean): boolean;
|
|
12
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as dotenv from 'dotenv';
|
|
2
|
+
/**
|
|
3
|
+
* 读取 .env 文件,并获取格式化后的数据
|
|
4
|
+
* 注意:依赖 dotenv 包
|
|
5
|
+
*/
|
|
6
|
+
export class EnvReader {
|
|
7
|
+
envFile;
|
|
8
|
+
envsFromFile = {};
|
|
9
|
+
constructor(envFile) {
|
|
10
|
+
this.envFile = envFile;
|
|
11
|
+
dotenv.config({
|
|
12
|
+
path: this.envFile,
|
|
13
|
+
processEnv: this.envsFromFile, // 把从 .env 文件读到的内容写入到此实例的属性,而不是 process.env
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
get(key, defaults) {
|
|
17
|
+
const value = this.envsFromFile[key] ?? process.env[key];
|
|
18
|
+
if (value === undefined)
|
|
19
|
+
return defaults;
|
|
20
|
+
if (typeof defaults === 'number') {
|
|
21
|
+
const numValue = parseInt(value, 10);
|
|
22
|
+
return isFinite(numValue) ? numValue : defaults;
|
|
23
|
+
}
|
|
24
|
+
else if (typeof defaults === 'boolean') {
|
|
25
|
+
return ['1', 'true'].includes(value.toLowerCase().trim());
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export * from '../logging/index.js';
|
|
1
|
+
import { type LogInfo, LogHandler } from '../../logging/index.js';
|
|
3
2
|
/**
|
|
4
3
|
* 向 console 输出日志
|
|
5
4
|
*/
|
|
@@ -57,7 +56,3 @@ export declare class FileHandler extends LogHandler {
|
|
|
57
56
|
protected initLogDir(): void;
|
|
58
57
|
protected write(content: string): void;
|
|
59
58
|
}
|
|
60
|
-
/**
|
|
61
|
-
* 预设的初始化行为
|
|
62
|
-
*/
|
|
63
|
-
export declare function initLogger(logger?: Logger): void;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 针对 Node.js 环境定制 logging
|
|
3
|
-
* 注意:使用此模块需要 chalk 依赖
|
|
4
|
-
*/
|
|
5
1
|
import fs from 'node:fs';
|
|
6
2
|
import path from 'node:path';
|
|
7
3
|
import { fileURLToPath } from 'node:url';
|
|
8
4
|
import chalk from 'chalk';
|
|
9
5
|
import dayjs from 'dayjs';
|
|
10
|
-
import {
|
|
11
|
-
export * from '../logging/index.js';
|
|
6
|
+
import { LogLevel, LogHandler, formatters } from '../../logging/index.js';
|
|
12
7
|
/**
|
|
13
8
|
* 向 console 输出日志
|
|
14
9
|
*/
|
|
@@ -151,9 +146,3 @@ export class FileHandler extends LogHandler {
|
|
|
151
146
|
});
|
|
152
147
|
}
|
|
153
148
|
}
|
|
154
|
-
/**
|
|
155
|
-
* 预设的初始化行为
|
|
156
|
-
*/
|
|
157
|
-
export function initLogger(logger = defaultLogger) {
|
|
158
|
-
logger.addHandler(new ConsoleHandler());
|
|
159
|
-
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 针对 Node.js 环境定制 logging
|
|
3
|
+
* 注意:使用此模块需要 chalk 依赖
|
|
4
|
+
*/
|
|
5
|
+
import { type Logger } from '../../logging/index.js';
|
|
6
|
+
export * from './handlers.js';
|
|
7
|
+
export * from '../../logging/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* 预设的初始化行为
|
|
10
|
+
*/
|
|
11
|
+
export declare function initLogger(logger?: Logger): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 针对 Node.js 环境定制 logging
|
|
3
|
+
* 注意:使用此模块需要 chalk 依赖
|
|
4
|
+
*/
|
|
5
|
+
import { logger as defaultLogger } from '../../logging/index.js';
|
|
6
|
+
import { ConsoleHandler } from './handlers.js';
|
|
7
|
+
export * from './handlers.js';
|
|
8
|
+
export * from '../../logging/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* 预设的初始化行为
|
|
11
|
+
*/
|
|
12
|
+
export function initLogger(logger = defaultLogger) {
|
|
13
|
+
logger.addHandler(new ConsoleHandler());
|
|
14
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AbstractLogger, type LogLevel as TypeORMLogLevel, type LogMessage, type LoggerOptions } from 'typeorm';
|
|
2
|
+
import { type Logger as UtilsLogger } from '../logging/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* 把 TypeORM 的日志导入到 js-utils 的 logger 中
|
|
5
|
+
* 用法参考 https://typeorm.io/logging
|
|
6
|
+
*/
|
|
7
|
+
export declare class AdaptedTypeORMLogger extends AbstractLogger {
|
|
8
|
+
readonly utilsLogger: UtilsLogger;
|
|
9
|
+
constructor(utilsLogger: UtilsLogger, options?: LoggerOptions);
|
|
10
|
+
protected writeLog(typeORMLevel: TypeORMLogLevel, logMessage: LogMessage | LogMessage[]): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AbstractLogger, } from 'typeorm';
|
|
2
|
+
/**
|
|
3
|
+
* 把 TypeORM 的日志导入到 js-utils 的 logger 中
|
|
4
|
+
* 用法参考 https://typeorm.io/logging
|
|
5
|
+
*/
|
|
6
|
+
export class AdaptedTypeORMLogger extends AbstractLogger {
|
|
7
|
+
utilsLogger;
|
|
8
|
+
constructor(utilsLogger, options) {
|
|
9
|
+
super(options);
|
|
10
|
+
this.utilsLogger = utilsLogger;
|
|
11
|
+
}
|
|
12
|
+
writeLog(typeORMLevel, logMessage) {
|
|
13
|
+
const messages = this.prepareLogMessages(logMessage, {
|
|
14
|
+
highlightSql: true,
|
|
15
|
+
});
|
|
16
|
+
for (const message of messages) {
|
|
17
|
+
const args = message.prefix ?? '' ? [message.prefix, message.message] : [message.message];
|
|
18
|
+
switch (message.type ?? typeORMLevel) {
|
|
19
|
+
case 'log':
|
|
20
|
+
case 'schema':
|
|
21
|
+
case 'schema-build':
|
|
22
|
+
case 'migration':
|
|
23
|
+
this.utilsLogger.debug(...args);
|
|
24
|
+
break;
|
|
25
|
+
case 'info':
|
|
26
|
+
case 'query':
|
|
27
|
+
this.utilsLogger.info(...args);
|
|
28
|
+
break;
|
|
29
|
+
case 'warn':
|
|
30
|
+
case 'query-slow':
|
|
31
|
+
this.utilsLogger.warn(...args);
|
|
32
|
+
break;
|
|
33
|
+
case 'error':
|
|
34
|
+
case 'query-error':
|
|
35
|
+
this.utilsLogger.error(...args);
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
this.utilsLogger.debug(...args);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeORM 相关工具函数
|
|
3
|
+
*/
|
|
4
|
+
import { type FindOptionsWhere, type BaseEntity } from 'typeorm';
|
|
5
|
+
import { type ExcluceMethods } from '../../lang/index.js';
|
|
6
|
+
export * from './adapt-logging.js';
|
|
7
|
+
/**
|
|
8
|
+
* 返回 Entity 对应的纯数据类型
|
|
9
|
+
*/
|
|
10
|
+
export type DataOnly<T extends BaseEntity> = Omit<ExcluceMethods<T>, 'hasId'>;
|
|
11
|
+
/**
|
|
12
|
+
* 转义字符串以安全地进行 SQL LIKE 匹配
|
|
13
|
+
*/
|
|
14
|
+
export declare function escapeLikeString(raw: string, escapeChar?: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* 返回 instances 里没有出现的 id
|
|
17
|
+
*/
|
|
18
|
+
export declare function getNotExistIds<T extends {
|
|
19
|
+
id: string;
|
|
20
|
+
}>(instances: T[], ids: string[]): string[];
|
|
21
|
+
/**
|
|
22
|
+
* TypeORM 的 find({ where: {} }) 里不支持 AND 和 OR 并列使用
|
|
23
|
+
* 例如:is_disabled IS NULL AND (name LIKE '%ab%' OR nickname LIKE '%ab%')
|
|
24
|
+
* 只能蹩脚地写成 `where: [{ name: LIKE('xx'), is_disabled: xx }, { nickname: LIKE('xx'), is_disabled: xx }]`
|
|
25
|
+
*
|
|
26
|
+
* 此函数简化了这一转换步骤,使得可以逻辑直观地并列书写 AND 和 OR。
|
|
27
|
+
* 在 `where: {}` 里,`or_` 开头且值是数组的项被组织为一个 OR,其 key 会被忽略,内容转换为上面的形式。
|
|
28
|
+
*/
|
|
29
|
+
declare function smartWhere<Entity>(where: FindOptionsWhere<Entity>): FindOptionsWhere<Entity>;
|
|
30
|
+
declare function smartWhere<Entity>(where: FindOptionsWhere<Entity>[]): FindOptionsWhere<Entity>[];
|
|
31
|
+
export { smartWhere };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export * from './adapt-logging.js';
|
|
2
|
+
/**
|
|
3
|
+
* 转义字符串以安全地进行 SQL LIKE 匹配
|
|
4
|
+
*/
|
|
5
|
+
export function escapeLikeString(raw, escapeChar = '\\') {
|
|
6
|
+
return raw.replace(/[\\%_]/g, match => escapeChar + match);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 返回 instances 里没有出现的 id
|
|
10
|
+
*/
|
|
11
|
+
export function getNotExistIds(instances, ids) {
|
|
12
|
+
return ids.filter(id => !instances.find(inst => inst.id === id));
|
|
13
|
+
}
|
|
14
|
+
function smartWhere(where) {
|
|
15
|
+
if (Array.isArray(where))
|
|
16
|
+
return where.map(item => smartWhere(item));
|
|
17
|
+
const orPrefix = 'or_';
|
|
18
|
+
const orContent = {};
|
|
19
|
+
const andContent = {};
|
|
20
|
+
for (const [key, value] of Object.entries(where)) {
|
|
21
|
+
if (value === undefined)
|
|
22
|
+
continue;
|
|
23
|
+
if (key.startsWith(orPrefix) && Array.isArray(value)) {
|
|
24
|
+
orContent[key] = value;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
;
|
|
28
|
+
andContent[key] = value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const nextWhere = { ...where };
|
|
32
|
+
const currentOr = Object.entries(nextWhere).find(([key, value]) => key.startsWith(orPrefix) && Array.isArray(value));
|
|
33
|
+
if (currentOr === undefined)
|
|
34
|
+
return nextWhere;
|
|
35
|
+
delete nextWhere[currentOr[0]];
|
|
36
|
+
const result = currentOr[1].map(subWhere => ({ ...subWhere, ...smartWhere(nextWhere) }));
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
export { smartWhere };
|
package/lang/index.d.ts
CHANGED
package/lang/index.js
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MaySuccess:代表一种“可能失败”的操作结果,可以作为函数返回值,也可以作为接口响应值。
|
|
3
|
+
* 它的灵感来自 Scala 的 Option 类型。
|
|
4
|
+
*
|
|
5
|
+
* 原本,在 JavaScript 里一个可能失败的操作有两种表示失败的方式:
|
|
6
|
+
* 1. 返回空值,如 null、0、''
|
|
7
|
+
* 2. 抛出异常
|
|
8
|
+
* 返回空值的方式无法附带失败信息;而抛出异常会导致层层嵌套的 try catch 语句,且其实性能不好。
|
|
9
|
+
*
|
|
10
|
+
* MaySuccess 就是为了解决这两个痛点:
|
|
11
|
+
* 1. 它的 Failed 类型可以携带失败信息。
|
|
12
|
+
* 2. 无需 try catch,只需简单的 result.success 判断
|
|
13
|
+
*/
|
|
14
|
+
/** 类型定义 */
|
|
15
|
+
export interface Success<T = void> {
|
|
16
|
+
success: true;
|
|
17
|
+
data: T;
|
|
18
|
+
}
|
|
19
|
+
export type Failed<T = void> = {
|
|
20
|
+
success: false;
|
|
21
|
+
message: string;
|
|
22
|
+
code?: string | number;
|
|
23
|
+
data: T;
|
|
24
|
+
};
|
|
25
|
+
export type MaySuccess<T = void, FT = void> = Success<T> | Failed<FT>;
|
|
26
|
+
/** 生成 Success 数据 */
|
|
27
|
+
declare function success(): Success;
|
|
28
|
+
declare function success<T>(data: T): Success<T>;
|
|
29
|
+
export { success };
|
|
30
|
+
/** 生成 Failed 数据 */
|
|
31
|
+
declare function failed(message: string, code?: string | number): Failed;
|
|
32
|
+
declare function failed<T>(message: string, code: string | number | undefined, data: T): Failed<T>;
|
|
33
|
+
export { failed };
|
|
34
|
+
/**
|
|
35
|
+
* 若传入值为 success,格式化其 data;否则原样返回错误
|
|
36
|
+
* 支持传入会返回 MaySuccess 的 Promise
|
|
37
|
+
*/
|
|
38
|
+
declare function formatSuccess<T1, T2, FT = void>(value: MaySuccess<T1, FT>, formatter: (value: T1) => T2): MaySuccess<T2, FT>;
|
|
39
|
+
declare function formatSuccess<T1, T2, FT = void>(value: Promise<MaySuccess<T1, FT>>, formatter: (value: T1) => T2): Promise<MaySuccess<T2, FT>>;
|
|
40
|
+
export { formatSuccess };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MaySuccess:代表一种“可能失败”的操作结果,可以作为函数返回值,也可以作为接口响应值。
|
|
3
|
+
* 它的灵感来自 Scala 的 Option 类型。
|
|
4
|
+
*
|
|
5
|
+
* 原本,在 JavaScript 里一个可能失败的操作有两种表示失败的方式:
|
|
6
|
+
* 1. 返回空值,如 null、0、''
|
|
7
|
+
* 2. 抛出异常
|
|
8
|
+
* 返回空值的方式无法附带失败信息;而抛出异常会导致层层嵌套的 try catch 语句,且其实性能不好。
|
|
9
|
+
*
|
|
10
|
+
* MaySuccess 就是为了解决这两个痛点:
|
|
11
|
+
* 1. 它的 Failed 类型可以携带失败信息。
|
|
12
|
+
* 2. 无需 try catch,只需简单的 result.success 判断
|
|
13
|
+
*/
|
|
14
|
+
function success(data) {
|
|
15
|
+
return { success: true, data };
|
|
16
|
+
}
|
|
17
|
+
export { success };
|
|
18
|
+
function failed(message, code, data) {
|
|
19
|
+
return { success: false, message, code, data: data };
|
|
20
|
+
}
|
|
21
|
+
export { failed };
|
|
22
|
+
function formatSuccess(value, formatter) {
|
|
23
|
+
if ('then' in value)
|
|
24
|
+
return value.then(finalValue => formatSuccess(finalValue, formatter));
|
|
25
|
+
return value.success ? success(formatter(value.data)) : value;
|
|
26
|
+
}
|
|
27
|
+
export { formatSuccess };
|
package/lang/types.d.ts
CHANGED
|
@@ -12,21 +12,13 @@
|
|
|
12
12
|
* https://github.com/microsoft/TypeScript/issues/16656
|
|
13
13
|
*/
|
|
14
14
|
export declare function tuple<T extends unknown[]>(...elements: T): T;
|
|
15
|
-
/**
|
|
16
|
-
* 将一个对象中的指定 key 设为必须的
|
|
17
|
-
*/
|
|
15
|
+
/** 将一个对象中的指定 key 设为必须的 */
|
|
18
16
|
export type RequiredFields<T, K extends keyof T> = Omit<T, K> & Pick<Required<T>, K>;
|
|
19
|
-
/**
|
|
20
|
-
* 将一个对象中的指定 key 设为非必须的
|
|
21
|
-
*/
|
|
17
|
+
/** 将一个对象中的指定 key 设为非必须的 */
|
|
22
18
|
export type OptionalFields<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
23
|
-
/**
|
|
24
|
-
* 用 ReplaceT 中的字段定义代替 T 中的
|
|
25
|
-
*/
|
|
19
|
+
/** 用 ReplaceT 中的字段定义代替 T 中的 */
|
|
26
20
|
export type ReplaceFields<T, ReplaceT> = Omit<T, keyof ReplaceT> & ReplaceT;
|
|
27
|
-
/**
|
|
28
|
-
* 获取一个对象所有 value 的集合
|
|
29
|
-
*/
|
|
21
|
+
/** 获取一个对象所有 value 的集合 */
|
|
30
22
|
export type ValueOf<T> = T extends {
|
|
31
23
|
[_ in keyof T]: infer U;
|
|
32
24
|
} ? U : never;
|
|
@@ -42,40 +34,19 @@ export type ValueOf<T> = T extends {
|
|
|
42
34
|
export type KnownKeys<T> = ValueOf<{
|
|
43
35
|
[K in keyof T]: string extends K ? never : number extends K ? never : K;
|
|
44
36
|
}>;
|
|
45
|
-
/**
|
|
46
|
-
* 排除对象中指定类型的项目
|
|
47
|
-
*/
|
|
37
|
+
/** 排除对象中指定类型的项目 */
|
|
48
38
|
export type ExcludePropertiesOfType<T, ExcludeValueT> = Pick<T, {
|
|
49
39
|
[K in keyof T]: T[K] extends ExcludeValueT ? never : K;
|
|
50
40
|
}[keyof T]>;
|
|
51
41
|
/**
|
|
52
|
-
*
|
|
42
|
+
* 生成不包含指定 key 的类型
|
|
43
|
+
* 与 Omit<T, Keys> 的区别是
|
|
53
44
|
*/
|
|
45
|
+
export type ExcludeKeys<T, ExcludeKeys> = Pick<T, {
|
|
46
|
+
[K in keyof T]: K extends ExcludeKeys ? never : K;
|
|
47
|
+
}[keyof T]>;
|
|
48
|
+
/** 排除对象的方法(仅保留属性) */
|
|
54
49
|
export type ExcluceMethods<T> = ExcludePropertiesOfType<T, Function>;
|
|
55
|
-
/**
|
|
56
|
-
* 所有“可能失败”的操作都可使用此类型作为返回值
|
|
57
|
-
*/
|
|
58
|
-
export interface Success<T = void> {
|
|
59
|
-
success: true;
|
|
60
|
-
data: T;
|
|
61
|
-
}
|
|
62
|
-
export interface Failed<ET = string> {
|
|
63
|
-
success: false;
|
|
64
|
-
error: ET;
|
|
65
|
-
code?: number | string;
|
|
66
|
-
}
|
|
67
|
-
export type MaySuccess<T = void, ET = string> = Success<T> | Failed<ET>;
|
|
68
|
-
declare function success(): Success;
|
|
69
|
-
declare function success<T>(data: T): Success<T>;
|
|
70
|
-
export { success };
|
|
71
|
-
export declare function failed<ET>(error: ET, code?: number | string): Failed<ET>;
|
|
72
|
-
/**
|
|
73
|
-
* 若传入值为 success,格式化其 data;否则原样返回错误
|
|
74
|
-
* 支持传入会返回 MaySuccess 的 Promise
|
|
75
|
-
*/
|
|
76
|
-
declare function formatSuccess<T, ET, FT>(item: MaySuccess<T, ET>, formatter: (data: T) => FT): MaySuccess<FT, ET>;
|
|
77
|
-
declare function formatSuccess<T, ET, FT>(item: Promise<MaySuccess<T, ET>>, formatter: (data: T) => FT): Promise<MaySuccess<FT, ET>>;
|
|
78
|
-
export { formatSuccess };
|
|
79
50
|
/**
|
|
80
51
|
* 确认变量是否有值
|
|
81
52
|
* 注意:空字符串和数字 0 也会判定为没有值
|
|
@@ -83,9 +54,7 @@ export { formatSuccess };
|
|
|
83
54
|
declare function truthy(value: string | number | boolean | null | undefined): value is string | number | true;
|
|
84
55
|
declare function truthy<T>(value: T | string | number | boolean | null | undefined): value is T | string | number | true;
|
|
85
56
|
export { truthy };
|
|
86
|
-
/**
|
|
87
|
-
* 定义 JSON 数据
|
|
88
|
-
*/
|
|
57
|
+
/** 定义 JSON 数据 */
|
|
89
58
|
export type JSONData = number | boolean | string | null | JSONData[] | {
|
|
90
59
|
[key: string]: JSONData;
|
|
91
60
|
};
|
package/lang/types.js
CHANGED
|
@@ -14,19 +14,6 @@
|
|
|
14
14
|
export function tuple(...elements) {
|
|
15
15
|
return elements;
|
|
16
16
|
}
|
|
17
|
-
function success(data) {
|
|
18
|
-
return { success: true, data };
|
|
19
|
-
}
|
|
20
|
-
export { success };
|
|
21
|
-
export function failed(error, code) {
|
|
22
|
-
return { success: false, error, code };
|
|
23
|
-
}
|
|
24
|
-
function formatSuccess(item, formatter) {
|
|
25
|
-
if ('then' in item)
|
|
26
|
-
return item.then(finalItem => formatSuccess(finalItem, formatter));
|
|
27
|
-
return item.success ? { ...item, data: formatter(item.data) } : item;
|
|
28
|
-
}
|
|
29
|
-
export { formatSuccess };
|
|
30
17
|
function truthy(value) {
|
|
31
18
|
return value !== null && value !== undefined && value !== '' && value !== 0 && value !== false;
|
|
32
19
|
}
|
package/md5.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MD5 算法来自:https://github.com/emn178/js-md5
|
|
3
|
+
*/
|
|
4
|
+
export declare function md5(content: string | ArrayBuffer): string;
|
|
5
|
+
/**
|
|
6
|
+
* 使用方法:
|
|
7
|
+
* const md5 = new MD5()
|
|
8
|
+
* md5.update(xxx) // 对于大文件,可以拆分开,多次调用 md5.update()
|
|
9
|
+
* const hash = md5.hex()
|
|
10
|
+
*/
|
|
11
|
+
export declare class MD5 {
|
|
12
|
+
private readonly buffer8;
|
|
13
|
+
private readonly blocks;
|
|
14
|
+
private h0;
|
|
15
|
+
private h1;
|
|
16
|
+
private h2;
|
|
17
|
+
private h3;
|
|
18
|
+
private start;
|
|
19
|
+
private bytes;
|
|
20
|
+
private hBytes;
|
|
21
|
+
private lastByteIndex;
|
|
22
|
+
private finalized;
|
|
23
|
+
private hashed;
|
|
24
|
+
private first;
|
|
25
|
+
constructor();
|
|
26
|
+
update(message: string | number[] | Uint8Array | ArrayBuffer): void;
|
|
27
|
+
private finalize;
|
|
28
|
+
private hash;
|
|
29
|
+
hex(): string;
|
|
30
|
+
}
|