@base-web-kits/base-tools-web 1.1.18-alpha.0 → 1.2.0-alpha.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/dist/async/index.d.ts +10 -6
- package/dist/async/index.d.ts.map +1 -1
- package/dist/base-tools-web.umd.global.js +23 -14
- package/dist/base-tools-web.umd.global.js.map +1 -1
- package/dist/index.cjs +23 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +23 -14
- package/dist/index.js.map +1 -1
- package/dist/network/request.d.ts +2 -2
- package/dist/network/request.d.ts.map +1 -1
- package/dist/network/uploadFile.d.ts +1 -1
- package/dist/network/uploadFile.d.ts.map +1 -1
- package/dist/storage/index.d.ts +1 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/web/async/index.ts +40 -11
- package/src/web/network/request.ts +8 -4
- package/src/web/network/uploadFile.ts +4 -10
- package/src/web/storage/index.ts +1 -3
|
@@ -45,8 +45,8 @@ export type RequestConfigBase<D extends RequestData = RequestData> = {
|
|
|
45
45
|
toastError?: boolean;
|
|
46
46
|
/** 是否输出日志 (默认true) */
|
|
47
47
|
isLog?: boolean;
|
|
48
|
-
/**
|
|
49
|
-
|
|
48
|
+
/** 成功和失败时,额外输出的日志数据 (可覆盖内部log参数,如'name') */
|
|
49
|
+
logExtra?: Record<string, unknown>;
|
|
50
50
|
/** 响应数据的缓存时间, 单位毫秒。仅在成功时缓存;仅缓存在内存,应用退出,缓存消失。(默认0,不开启缓存) */
|
|
51
51
|
cacheTime?: number;
|
|
52
52
|
/** 是否开启流式传输 (如 SSE) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/web/network/request.ts"],"names":[],"mappings":"AAUA,aAAa;AACb,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,MAAM,GACN,KAAK,GACL,QAAQ,GACR,SAAS,GACT,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,eAAe,GACf,IAAI,GACJ,QAAQ,GACR,eAAe,GACf,cAAc,CAAC,UAAU,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,OAAO,EAAE,GACT,IAAI,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;AAEpG;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/F;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI;IACnE,WAAW;IACX,GAAG,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/web/network/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,5 +53,5 @@ export type UploadFail = {
|
|
|
53
53
|
* task.onProgressUpdate((res) => console.log('上传进度:', res.progress)),
|
|
54
54
|
* });
|
|
55
55
|
*/
|
|
56
|
-
export declare function uploadFile
|
|
56
|
+
export declare function uploadFile(option: UploadFileOption, config?: UploadConfig & WebApiConfig): Promise<any>;
|
|
57
57
|
//# sourceMappingURL=uploadFile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadFile.d.ts","sourceRoot":"","sources":["../../src/web/network/uploadFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IAEZ,eAAe;IACf,IAAI,EAAE,IAAI,CAAC;IAEX,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAEzC,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAE3C,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW;IACX,gBAAgB,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC7D,WAAW;IACX,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe;IACf,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA6EF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"uploadFile.d.ts","sourceRoot":"","sources":["../../src/web/network/uploadFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IAEZ,eAAe;IACf,IAAI,EAAE,IAAI,CAAC;IAEX,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAEzC,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAE3C,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW;IACX,gBAAgB,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC7D,WAAW;IACX,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe;IACf,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA6EF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,gBAExF"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 写入 localStorage(自动 JSON 序列化)
|
|
3
|
-
* 当 `value` 为 `null` 或 `undefined` 时,会移除该键。
|
|
4
|
-
* 支持保存:对象、数组、字符串、数字、布尔值。
|
|
5
3
|
* @param key 键名
|
|
6
|
-
* @param value
|
|
4
|
+
* @param value 任意可序列化的值:对象、数组、字符串、数字、布尔值。(`null` 或 `undefined` 会自动移除该键)
|
|
7
5
|
* @param days 过期天数(从当前时间起算)
|
|
8
6
|
* @example
|
|
9
7
|
* setLocalStorage('user', { id: 1, name: 'Alice' }); // 对象
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/storage/index.ts"],"names":[],"mappings":"AAMA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/storage/index.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,QAiBzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAiBlE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,QAE7C"}
|
package/package.json
CHANGED
package/src/web/async/index.ts
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import { cloneDeep } from '@base-web-kits/base-tools-ts';
|
|
1
2
|
import { getBaseToolsConfig } from '../index';
|
|
3
|
+
import type { AppLogInfo } from '../index';
|
|
2
4
|
|
|
3
|
-
type WebApi<Option, Res, Config =
|
|
5
|
+
type WebApi<Option = any, Res = any, Config = any> = (
|
|
6
|
+
option: Option,
|
|
7
|
+
config?: Config,
|
|
8
|
+
) => Promise<Res>;
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* web api 的调用配置
|
|
7
12
|
*/
|
|
8
|
-
export type WebApiConfig<Res, Err> = {
|
|
13
|
+
export type WebApiConfig<Res = any, Err = any> = {
|
|
9
14
|
/** 是否显示加载提示, 默认 false. (支持字符串,自定义文本) */
|
|
10
15
|
showLoading?: boolean | string;
|
|
11
16
|
|
|
@@ -17,18 +22,24 @@ export type WebApiConfig<Res, Err> = {
|
|
|
17
22
|
|
|
18
23
|
/** 是否显示日志, 默认 true */
|
|
19
24
|
showLog?: boolean;
|
|
25
|
+
|
|
26
|
+
/** 处理成功res, 如解密操作 (返回值在成功日志中输出'resFilter'字段) */
|
|
27
|
+
resFilter?: (res: Res) => Res;
|
|
28
|
+
|
|
29
|
+
/** 成功和失败时,额外输出的日志数据 (可覆盖内部log参数,如'name') */
|
|
30
|
+
logExtra?: Record<string, unknown>;
|
|
20
31
|
};
|
|
21
32
|
|
|
22
33
|
/**
|
|
23
|
-
* 拓展 web api, 使其支持loading,toast,log
|
|
34
|
+
* 拓展 web api, 使其支持loading,toast,log能力
|
|
24
35
|
* @param webApi web api
|
|
25
|
-
* @param apiName web api 名称 (可选, 用于日志输出, 默认'
|
|
36
|
+
* @param apiName web api 名称 (可选, 用于日志输出, 默认'enhanceWebApi')
|
|
26
37
|
* @return 注入拓展能力的promise (默认提示异常和输出日志,不显示进度条和操作成功)
|
|
27
38
|
* @example
|
|
28
|
-
* const promise =
|
|
39
|
+
* const promise = enhanceWebApi(downloadFile, 'downloadFile');
|
|
29
40
|
* await promise({ url: 'xx' }, {showLoading: '下载中', toastSuccess: '下载成功'});
|
|
30
41
|
*/
|
|
31
|
-
export function
|
|
42
|
+
export function enhanceWebApi<Option = any, Res = any, Err = any, Config = any>(
|
|
32
43
|
webApi: WebApi<Option, Res, Config>,
|
|
33
44
|
apiName?: string,
|
|
34
45
|
) {
|
|
@@ -39,14 +50,17 @@ export function promisifyWebApi<Option, Res, Err, Config = unknown>(
|
|
|
39
50
|
toastSuccess = false,
|
|
40
51
|
toastError = true,
|
|
41
52
|
showLog = true,
|
|
53
|
+
resFilter,
|
|
54
|
+
logExtra,
|
|
42
55
|
} = finalConfig;
|
|
56
|
+
|
|
43
57
|
const {
|
|
44
58
|
log,
|
|
45
59
|
toast,
|
|
46
60
|
showLoading: showLoadingFn,
|
|
47
61
|
hideLoading: hideLoadingFn,
|
|
48
62
|
} = getBaseToolsConfig();
|
|
49
|
-
const fname = apiName || '
|
|
63
|
+
const fname = apiName || 'enhanceWebApi'; // webApi.name经过打包后取不到原函数名,不如默认'enhanceWebApi'
|
|
50
64
|
|
|
51
65
|
if (showLoading) {
|
|
52
66
|
const title = typeof showLoading === 'string' ? showLoading : '';
|
|
@@ -57,15 +71,30 @@ export function promisifyWebApi<Option, Res, Err, Config = unknown>(
|
|
|
57
71
|
webApi(option, finalConfig)
|
|
58
72
|
.then((res) => {
|
|
59
73
|
if (showLoading) hideLoadingFn?.();
|
|
60
|
-
if (showLog) log?.('info', { name: fname, status: 'success', option, res });
|
|
61
|
-
resolve(res);
|
|
62
74
|
|
|
63
|
-
const
|
|
75
|
+
const finalRes = resFilter ? resFilter(res) : res;
|
|
76
|
+
|
|
77
|
+
if (showLog) {
|
|
78
|
+
const logData: AppLogInfo = { name: fname, status: 'success', option, ...logExtra };
|
|
79
|
+
|
|
80
|
+
if (resFilter) {
|
|
81
|
+
logData.res = res; // 输出原始数据
|
|
82
|
+
logData.resFilter = cloneDeep(finalRes); // 深拷贝处理后数据,避免外部修改对象,造成输出不一致
|
|
83
|
+
} else {
|
|
84
|
+
logData.res = cloneDeep(res); // 深拷贝原始数据,避免外部修改对象,造成输出不一致
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
log?.('info', logData);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
resolve(finalRes);
|
|
91
|
+
|
|
92
|
+
const msg = typeof toastSuccess === 'function' ? toastSuccess(finalRes) : toastSuccess;
|
|
64
93
|
if (msg) toast?.({ msg, status: 'success' });
|
|
65
94
|
})
|
|
66
95
|
.catch((e) => {
|
|
67
96
|
if (showLoading) hideLoadingFn?.();
|
|
68
|
-
if (showLog) log?.('error', { name: fname, status: 'fail', option, e });
|
|
97
|
+
if (showLog) log?.('error', { name: fname, status: 'fail', option, e, ...logExtra });
|
|
69
98
|
|
|
70
99
|
const msg = typeof toastError === 'function' ? toastError(e) : toastError;
|
|
71
100
|
if (msg) {
|
|
@@ -52,12 +52,16 @@ export type RequestConfig<D extends RequestData = RequestData> = Partial<Request
|
|
|
52
52
|
export type RequestConfigBase<D extends RequestData = RequestData> = {
|
|
53
53
|
/** 接口地址 */
|
|
54
54
|
url: string;
|
|
55
|
+
|
|
55
56
|
/** 请求方法 */
|
|
56
57
|
method?: RequestMethod;
|
|
58
|
+
|
|
57
59
|
/** 请求头(会自动过滤undefined, null, "";不过滤0和false; 数字和布尔值会自动转换为字符串) */
|
|
58
60
|
header?: Record<string, string | number | boolean | null | undefined>;
|
|
61
|
+
|
|
59
62
|
/** 请求参数 */
|
|
60
63
|
data?: D;
|
|
64
|
+
|
|
61
65
|
/** 超时时间 (毫秒), 默认 60000 */
|
|
62
66
|
timeout?: number;
|
|
63
67
|
|
|
@@ -88,8 +92,8 @@ export type RequestConfigBase<D extends RequestData = RequestData> = {
|
|
|
88
92
|
/** 是否输出日志 (默认true) */
|
|
89
93
|
isLog?: boolean;
|
|
90
94
|
|
|
91
|
-
/**
|
|
92
|
-
|
|
95
|
+
/** 成功和失败时,额外输出的日志数据 (可覆盖内部log参数,如'name') */
|
|
96
|
+
logExtra?: Record<string, unknown>;
|
|
93
97
|
|
|
94
98
|
/** 响应数据的缓存时间, 单位毫秒。仅在成功时缓存;仅缓存在内存,应用退出,缓存消失。(默认0,不开启缓存) */
|
|
95
99
|
cacheTime?: number;
|
|
@@ -444,7 +448,7 @@ function logRequestInfo(options: {
|
|
|
444
448
|
if (!log || !isLog) return;
|
|
445
449
|
|
|
446
450
|
const { config, res, fromCache = false, startTime, status, e } = options;
|
|
447
|
-
const { url, data, header, method,
|
|
451
|
+
const { url, data, header, method, logExtra } = config;
|
|
448
452
|
const endTime = Date.now();
|
|
449
453
|
const fmt = 'YYYY-MM-DD HH:mm:ss.SSS';
|
|
450
454
|
|
|
@@ -459,7 +463,7 @@ function logRequestInfo(options: {
|
|
|
459
463
|
startTime: toDayjs(startTime).format(fmt),
|
|
460
464
|
endTime: toDayjs(endTime).format(fmt),
|
|
461
465
|
duration: endTime - startTime,
|
|
462
|
-
...
|
|
466
|
+
...logExtra,
|
|
463
467
|
};
|
|
464
468
|
|
|
465
469
|
if (status === 'success') {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { enhanceWebApi } from '../async';
|
|
2
2
|
import type { WebApiConfig } from '../async';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -118,7 +118,7 @@ function upload<T>(option: UploadFileOption, config?: UploadConfig) {
|
|
|
118
118
|
data.append(name, file);
|
|
119
119
|
if (formData) {
|
|
120
120
|
Object.entries(formData).forEach(([k, v]) => {
|
|
121
|
-
if (v !== undefined) data.append(k, String(v));
|
|
121
|
+
if (v !== undefined && v !== null) data.append(k, String(v));
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
124
|
|
|
@@ -141,12 +141,6 @@ function upload<T>(option: UploadFileOption, config?: UploadConfig) {
|
|
|
141
141
|
* task.onProgressUpdate((res) => console.log('上传进度:', res.progress)),
|
|
142
142
|
* });
|
|
143
143
|
*/
|
|
144
|
-
export function uploadFile
|
|
145
|
-
option
|
|
146
|
-
config?: UploadConfig & WebApiConfig<T, UploadFail>,
|
|
147
|
-
) {
|
|
148
|
-
return promisifyWebApi<UploadFileOption, T, UploadFail, UploadConfig>(upload, 'uploadFile')(
|
|
149
|
-
option,
|
|
150
|
-
config,
|
|
151
|
-
);
|
|
144
|
+
export function uploadFile(option: UploadFileOption, config?: UploadConfig & WebApiConfig) {
|
|
145
|
+
return enhanceWebApi(upload, 'uploadFile')(option, config);
|
|
152
146
|
}
|
package/src/web/storage/index.ts
CHANGED
|
@@ -6,10 +6,8 @@ const WK = {
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* 写入 localStorage(自动 JSON 序列化)
|
|
9
|
-
* 当 `value` 为 `null` 或 `undefined` 时,会移除该键。
|
|
10
|
-
* 支持保存:对象、数组、字符串、数字、布尔值。
|
|
11
9
|
* @param key 键名
|
|
12
|
-
* @param value
|
|
10
|
+
* @param value 任意可序列化的值:对象、数组、字符串、数字、布尔值。(`null` 或 `undefined` 会自动移除该键)
|
|
13
11
|
* @param days 过期天数(从当前时间起算)
|
|
14
12
|
* @example
|
|
15
13
|
* setLocalStorage('user', { id: 1, name: 'Alice' }); // 对象
|