@ibiz-template/core 0.0.4-beta.5 → 0.1.1

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.
Files changed (91) hide show
  1. package/dist/index.esm.js +427 -96
  2. package/dist/index.system.min.js +2 -1
  3. package/dist/index.system.min.js.map +1 -0
  4. package/out/constant/core/core.d.ts +2 -2
  5. package/out/constant/core/core.js +3 -4
  6. package/out/constant/util/util.d.ts.map +1 -1
  7. package/out/context/index.d.ts +17 -7
  8. package/out/context/index.d.ts.map +1 -1
  9. package/out/context/index.js +82 -40
  10. package/out/environment/environment.d.ts.map +1 -1
  11. package/out/environment/environment.js +5 -0
  12. package/out/error/model-error/model-error.d.ts +2 -2
  13. package/out/error/model-error/model-error.d.ts.map +1 -1
  14. package/out/error/model-error/model-error.js +0 -1
  15. package/out/error/runtime-model-error/runtime-model-error.d.ts +2 -2
  16. package/out/error/runtime-model-error/runtime-model-error.d.ts.map +1 -1
  17. package/out/error/runtime-model-error/runtime-model-error.js +0 -1
  18. package/out/ibizsys.d.ts +6 -4
  19. package/out/ibizsys.d.ts.map +1 -1
  20. package/out/ibizsys.js +6 -4
  21. package/out/index.d.ts +0 -1
  22. package/out/index.d.ts.map +1 -1
  23. package/out/index.js +0 -1
  24. package/out/install.d.ts.map +1 -1
  25. package/out/install.js +0 -2
  26. package/out/interface/i-environment/i-environment.d.ts +39 -0
  27. package/out/interface/i-environment/i-environment.d.ts.map +1 -1
  28. package/out/types.d.ts +11 -22
  29. package/out/types.d.ts.map +1 -1
  30. package/out/utils/download-file/download-file.d.ts.map +1 -1
  31. package/out/utils/index.d.ts +1 -1
  32. package/out/utils/index.d.ts.map +1 -1
  33. package/out/utils/index.js +1 -1
  34. package/out/utils/interceptor/core-interceptor.d.ts.map +1 -1
  35. package/out/utils/interceptor/core-interceptor.js +6 -2
  36. package/out/utils/interceptor/interceptor.d.ts +2 -2
  37. package/out/utils/interceptor/interceptor.d.ts.map +1 -1
  38. package/out/utils/logger/logger.d.ts +2 -2
  39. package/out/utils/logger/logger.d.ts.map +1 -1
  40. package/out/utils/logger/logger.js +5 -1
  41. package/out/utils/namespace/namespace.d.ts.map +1 -1
  42. package/out/utils/net/net.d.ts +12 -2
  43. package/out/utils/net/net.d.ts.map +1 -1
  44. package/out/utils/net/net.js +31 -5
  45. package/out/utils/recursive/find-recursive-child.d.ts +43 -0
  46. package/out/utils/recursive/find-recursive-child.d.ts.map +1 -0
  47. package/out/utils/recursive/find-recursive-child.js +90 -0
  48. package/out/utils/string-util/string-util.js +1 -2
  49. package/out/utils/style/remote-style.d.ts.map +1 -1
  50. package/out/utils/style/remote-style.js +1 -2
  51. package/out/utils/sync/count-latch.d.ts.map +1 -1
  52. package/out/utils/upload/select-file.d.ts.map +1 -1
  53. package/out/utils/upload/select-file.js +1 -1
  54. package/out/utils/upload/upload-file.d.ts.map +1 -1
  55. package/out/utils/upload/upload-file.js +2 -1
  56. package/out/utils/url-helper/url-helper.d.ts.map +1 -1
  57. package/out/utils/util/util.d.ts +58 -0
  58. package/out/utils/util/util.d.ts.map +1 -1
  59. package/out/utils/util/util.js +123 -0
  60. package/package.json +9 -8
  61. package/src/constant/core/core.ts +2 -2
  62. package/src/constant/util/util.ts +1 -1
  63. package/src/context/index.ts +91 -47
  64. package/src/environment/environment.ts +5 -0
  65. package/src/error/model-error/model-error.ts +4 -2
  66. package/src/error/runtime-model-error/runtime-model-error.ts +4 -2
  67. package/src/ibizsys.ts +7 -4
  68. package/src/index.ts +0 -1
  69. package/src/install.ts +0 -2
  70. package/src/interface/i-environment/i-environment.ts +44 -0
  71. package/src/types.ts +12 -23
  72. package/src/utils/click-outside/click-outside.ts +6 -6
  73. package/src/utils/download-file/download-file.ts +2 -2
  74. package/src/utils/event/event.ts +1 -1
  75. package/src/utils/index.ts +1 -1
  76. package/src/utils/interceptor/core-interceptor.ts +7 -2
  77. package/src/utils/interceptor/interceptor.ts +3 -3
  78. package/src/utils/logger/logger.ts +8 -1
  79. package/src/utils/namespace/namespace.ts +4 -1
  80. package/src/utils/net/net.ts +35 -11
  81. package/src/utils/recursive/find-recursive-child.ts +133 -0
  82. package/src/utils/style/remote-style.ts +1 -3
  83. package/src/utils/sync/count-latch.ts +5 -5
  84. package/src/utils/upload/select-file.ts +2 -2
  85. package/src/utils/upload/upload-file.ts +6 -5
  86. package/src/utils/url-helper/url-helper.ts +4 -4
  87. package/src/utils/util/util.ts +144 -2
  88. package/out/factory-center.d.ts +0 -11
  89. package/out/factory-center.d.ts.map +0 -1
  90. package/out/factory-center.js +0 -10
  91. package/src/factory-center.ts +0 -9
@@ -28,6 +28,16 @@ export class Net {
28
28
  * @protected
29
29
  */
30
30
  this.urlReg = /^http[s]?:\/\/[^\s]*/;
31
+ /**
32
+ * 请求等待队列,防止重复请求。当有完全相同请求参数的请求时,会等待上一个请求完成后把结果返回给当前请求,不会重复请求
33
+ * key: 由请求的 config 生成的字符串,用于唯一标识请求
34
+ * value: 当前正在请求的 Promise
35
+ *
36
+ * @author chitanda
37
+ * @date 2023-06-07 14:06:19
38
+ * @protected
39
+ */
40
+ this.waitRequest = new Map();
31
41
  /**
32
42
  * 注册的拦截器
33
43
  *
@@ -142,10 +152,6 @@ export class Net {
142
152
  * @return {*} {Promise<IHttpResponse>}
143
153
  */
144
154
  async get(url, params = {}, headers = {}, option = {}) {
145
- // if (params.srfparentdata) {
146
- // Object.assign(params, params.srfparentdata);
147
- // delete params.srfparentdata;
148
- // }
149
155
  url = this.attachUrlParam(url, params);
150
156
  try {
151
157
  const response = await this.request(url, merge({ method: 'get', headers }, option));
@@ -230,11 +236,31 @@ export class Net {
230
236
  * @returns {*} {Promise<IHttpResponse>}
231
237
  */
232
238
  async request(url, config = {}) {
239
+ // axios 请求参数配置
240
+ const cfg = this.mergeConfig({ url }, config);
241
+ // 当前请求的唯一标识
242
+ const key = JSON.stringify(cfg);
233
243
  try {
234
- const response = await this.instance.request(this.mergeConfig({ url }, config));
244
+ let requestPromise = null;
245
+ if (!this.waitRequest.has(key)) {
246
+ requestPromise = this.instance.request(cfg);
247
+ this.waitRequest.set(key, requestPromise);
248
+ }
249
+ else {
250
+ requestPromise = this.waitRequest.get(key);
251
+ }
252
+ const response = await requestPromise;
253
+ // 当第一个请求完成后就删除等待队列中的请求
254
+ if (this.waitRequest.has(key)) {
255
+ this.waitRequest.delete(key);
256
+ }
235
257
  return this.doResponseResult(response);
236
258
  }
237
259
  catch (error) {
260
+ // 请求异常删除等待队列中的请求体
261
+ if (this.waitRequest.has(key)) {
262
+ this.waitRequest.delete(key);
263
+ }
238
264
  throw new HttpError(error);
239
265
  }
240
266
  }
@@ -0,0 +1,43 @@
1
+ /** 默认配置参数 */
2
+ declare const IterateOpts: {
3
+ /** 子集合属性数组 */
4
+ childrenFields: string[];
5
+ };
6
+ /**
7
+ * 递归遍历子元素
8
+ * @author lxm
9
+ * @date 2023-04-23 09:07:06
10
+ * @export
11
+ * @param {IData} parent 父元素
12
+ * @param {(item: any) => boolean} callback 每一个子元素的回调
13
+ * @param {Partial<typeof IterateOpts>} [opts]
14
+ */
15
+ export declare function recursiveIterate(parent: IData, callback: (item: any) => boolean | void, opts?: Partial<typeof IterateOpts>): void;
16
+ /** 默认配置参数 */
17
+ declare const CompareOpts: {
18
+ /** 比较的属性 */
19
+ compareField: string;
20
+ /** 子集合属性数组 */
21
+ childrenFields: string[];
22
+ };
23
+ type ICompareOpts = Partial<typeof CompareOpts> & {
24
+ /**
25
+ * 自定义比较回调
26
+ * @author lxm
27
+ * @date 2023-04-23 09:06:42
28
+ */
29
+ compareCallback?: (child: IData, key: string, compareField: string) => boolean;
30
+ };
31
+ /**
32
+ * 递归查找子元素
33
+ * @author lxm
34
+ * @date 2023-04-20 08:53:35
35
+ * @export
36
+ * @param {IData} parent 父对象
37
+ * @param {string} key 子元素的比较属性的值
38
+ * @param {ICompareOpts} [opts]
39
+ * @return {*} {(IData | undefined)}
40
+ */
41
+ export declare function findRecursiveChild(parent: IData, key: string, opts?: ICompareOpts): IData | undefined;
42
+ export {};
43
+ //# sourceMappingURL=find-recursive-child.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-recursive-child.d.ts","sourceRoot":"","sources":["../../../src/utils/recursive/find-recursive-child.ts"],"names":[],"mappings":"AAGA,aAAa;AACb,QAAA,MAAM,WAAW;IACf,cAAc;;CAEf,CAAC;AA0CF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,GAAG,IAAI,EACvC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,GACjC,IAAI,CAQN;AAED,aAAa;AACb,QAAA,MAAM,WAAW;IAEf,YAAY;;IAtEZ,cAAc;;CAwEf,CAAC;AAEF,KAAK,YAAY,GAAG,OAAO,CAAC,OAAO,WAAW,CAAC,GAAG;IAChD;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAChB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC;CACd,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,EACb,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,YAAY,GAClB,KAAK,GAAG,SAAS,CA0BnB"}
@@ -0,0 +1,90 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { mergeDeepRight } from 'ramda';
3
+ /** 默认配置参数 */
4
+ const IterateOpts = {
5
+ /** 子集合属性数组 */
6
+ childrenFields: ['children'],
7
+ };
8
+ const BreakError = new Error('中断操作');
9
+ /**
10
+ * 获取子属性集合
11
+ * @author lxm
12
+ * @date 2023-04-20 08:54:32
13
+ * @param {IData} parent
14
+ * @param {string[]} fields 子集合可能的属性名称
15
+ * @return {*} {(IData[] | undefined)}
16
+ */
17
+ function getChildField(parent, fields) {
18
+ var _a;
19
+ for (const field of fields) {
20
+ if ((_a = parent[field]) === null || _a === void 0 ? void 0 : _a.length) {
21
+ return parent[field];
22
+ }
23
+ }
24
+ }
25
+ function _recursiveIterate(parent, callback, opts) {
26
+ const { childrenFields } = mergeDeepRight(IterateOpts, opts || {});
27
+ const children = getChildField(parent, childrenFields);
28
+ if (children === null || children === void 0 ? void 0 : children.length) {
29
+ for (const child of children) {
30
+ // 递归自身的子成员
31
+ const isBreak = callback(child);
32
+ // 如果回调返回true则退出
33
+ if (isBreak) {
34
+ throw BreakError;
35
+ }
36
+ // 递归孙的成员
37
+ recursiveIterate(child, callback, opts);
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * 递归遍历子元素
43
+ * @author lxm
44
+ * @date 2023-04-23 09:07:06
45
+ * @export
46
+ * @param {IData} parent 父元素
47
+ * @param {(item: any) => boolean} callback 每一个子元素的回调
48
+ * @param {Partial<typeof IterateOpts>} [opts]
49
+ */
50
+ export function recursiveIterate(parent, callback, opts) {
51
+ try {
52
+ _recursiveIterate(parent, callback, opts);
53
+ }
54
+ catch (error) {
55
+ if (error !== BreakError) {
56
+ throw error;
57
+ }
58
+ }
59
+ }
60
+ /** 默认配置参数 */
61
+ const CompareOpts = Object.assign(Object.assign({}, IterateOpts), {
62
+ /** 比较的属性 */
63
+ compareField: 'name' });
64
+ /**
65
+ * 递归查找子元素
66
+ * @author lxm
67
+ * @date 2023-04-20 08:53:35
68
+ * @export
69
+ * @param {IData} parent 父对象
70
+ * @param {string} key 子元素的比较属性的值
71
+ * @param {ICompareOpts} [opts]
72
+ * @return {*} {(IData | undefined)}
73
+ */
74
+ export function findRecursiveChild(parent, key, opts) {
75
+ const { compareField, compareCallback } = mergeDeepRight(CompareOpts, opts || {});
76
+ // 默认比较方法
77
+ const _compareCallback = compareCallback ||
78
+ ((child) => {
79
+ return child[compareField] === key;
80
+ });
81
+ // 递归遍历,找到后中断遍历,返回找到项
82
+ let find;
83
+ recursiveIterate(parent, item => {
84
+ if (_compareCallback(item, key, compareField)) {
85
+ find = item;
86
+ return true;
87
+ }
88
+ }, opts);
89
+ return find;
90
+ }
@@ -7,7 +7,7 @@ import { notNilEmpty } from 'qx-util';
7
7
  * @export
8
8
  * @class StringUtil
9
9
  */
10
- class StringUtil {
10
+ export class StringUtil {
11
11
  /**
12
12
  * 填充字符串中的数据
13
13
  *
@@ -55,4 +55,3 @@ StringUtil.contextReg = /\$\{context.[a-zA-Z_$][a-zA-Z0-9_$]{1,}\}/g;
55
55
  * @static
56
56
  */
57
57
  StringUtil.dataReg = /\$\{data.[a-zA-Z_$][a-zA-Z0-9_$]{1,}\}/g;
58
- export { StringUtil };
@@ -1 +1 @@
1
- {"version":3,"file":"remote-style.d.ts","sourceRoot":"","sources":["../../../src/utils/style/remote-style.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D"}
1
+ {"version":3,"file":"remote-style.d.ts","sourceRoot":"","sources":["../../../src/utils/style/remote-style.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D"}
@@ -1,4 +1,3 @@
1
- import { Logger } from '../logger/logger';
2
1
  /**
3
2
  * 设置远程样式表
4
3
  *
@@ -17,6 +16,6 @@ export async function setRemoteStyle(url) {
17
16
  document.head.appendChild(styleDom);
18
17
  }
19
18
  catch (error) {
20
- Logger.debug('加载远程样式表失败', url);
19
+ ibiz.log.debug('加载远程样式表失败', url);
21
20
  }
22
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"count-latch.d.ts","sourceRoot":"","sources":["../../../src/utils/sync/count-latch.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA8B;IAE7C,OAAO,CAAC,OAAO,CAAwC;IAEvD;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAK;IAElB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;OAMG;IACH,IAAI;IAOJ;;;;;;OAMG;IACH,MAAM;IAUN;;;;;OAKG;IACG,KAAK;CAKZ"}
1
+ {"version":3,"file":"count-latch.d.ts","sourceRoot":"","sources":["../../../src/utils/sync/count-latch.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA8B;IAE7C,OAAO,CAAC,OAAO,CAAwC;IAEvD;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAK;IAElB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;OAMG;IACH,IAAI,IAAI,IAAI;IAOZ;;;;;;OAMG;IACH,MAAM,IAAI,IAAI;IAUd;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-file.d.ts","sourceRoot":"","sources":["../../../src/utils/upload/select-file.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,CAMxD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,QAwB/C"}
1
+ {"version":3,"file":"select-file.d.ts","sourceRoot":"","sources":["../../../src/utils/upload/select-file.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,CAMxD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAwBtD"}
@@ -32,7 +32,7 @@ export function selectFile(_opts) {
32
32
  input.setAttribute('type', 'file');
33
33
  input.setAttribute('multiple', `${opts.multiple}`);
34
34
  input.setAttribute('accept', opts.accept);
35
- input.onchange = e => {
35
+ input.onchange = (e) => {
36
36
  const inputEl = e.target;
37
37
  const files = inputEl.files ? fileListToArr(inputEl.files) : [];
38
38
  if (files.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"upload-file.d.ts","sourceRoot":"","sources":["../../../src/utils/upload/upload-file.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC;IACrE,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACpE,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,QA2JhD"}
1
+ {"version":3,"file":"upload-file.d.ts","sourceRoot":"","sources":["../../../src/utils/upload/upload-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC;IACrE,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACpE,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CA2JvD"}
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-empty-function */
2
2
  /* eslint-disable no-param-reassign */
3
3
  import { cloneDeep, isFunction, merge, round, uniqueId } from 'lodash-es';
4
+ import { RuntimeError } from '../../error';
4
5
  import { selectFile } from './select-file';
5
6
  /**
6
7
  * 使用上传文件逻辑
@@ -62,7 +63,7 @@ export function uploadFile(_opts) {
62
63
  // onUploadProgress: onProgress,
63
64
  // });
64
65
  // return res;
65
- throw new Error(`多应用模式等待重新实现请求`);
66
+ throw new RuntimeError(`多应用模式等待重新实现请求`);
66
67
  };
67
68
  /**
68
69
  * 执行一次上传,可能是一个文件也可能是多个文件
@@ -1 +1 @@
1
- {"version":3,"file":"url-helper.d.ts","sourceRoot":"","sources":["../../../src/utils/url-helper/url-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB;;;;;;;;OAQG;IACH,MAAM,KAAK,SAAS,WAGnB;IAED;;;;;;;;OAQG;IACH,MAAM,KAAK,OAAO,WAGjB;IAED;;;;;;;;OAQG;IACH,MAAM,KAAK,SAAS,WAEnB;IAED;;;;;;;;OAQG;IACH,MAAM,KAAK,QAAQ,WAElB;CACF"}
1
+ {"version":3,"file":"url-helper.d.ts","sourceRoot":"","sources":["../../../src/utils/url-helper/url-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB;;;;;;;;OAQG;IACH,MAAM,KAAK,SAAS,IAAI,MAAM,CAG7B;IAED;;;;;;;;OAQG;IACH,MAAM,KAAK,OAAO,IAAI,MAAM,CAG3B;IAED;;;;;;;;OAQG;IACH,MAAM,KAAK,SAAS,IAAI,MAAM,CAE7B;IAED;;;;;;;;OAQG;IACH,MAAM,KAAK,QAAQ,IAAI,MAAM,CAE5B;CACF"}
@@ -18,6 +18,17 @@ export declare function getToken(): string | null;
18
18
  * @returns {*} {boolean}
19
19
  */
20
20
  export declare function isOverlap(arr1: any[], arr2: any[]): boolean;
21
+ /**
22
+ * 是否元素相同
23
+ * @author lxm
24
+ * @date 2023-05-22 12:50:53
25
+ * @export
26
+ * @param {any[]} arr1
27
+ * @param {any[]} arr2
28
+ * @param {string} [field] 比较元素里的某个固定属性
29
+ * @return {*} {boolean}
30
+ */
31
+ export declare function isElementSame(arr1: any[], arr2: any[], field?: string): boolean;
21
32
  /**
22
33
  * 防抖并合并每次的参数,
23
34
  * 最后一次才会执行
@@ -52,4 +63,51 @@ export declare function debounceAndMerge<T extends (...args: any[]) => any>(func
52
63
  * @returns {*}
53
64
  */
54
65
  export declare function debounceAndAsyncMerge<T extends (...args: any[]) => Promise<any>>(func: T, mergeFunc: (oldParams: Parameters<T>, newParams: Parameters<T>) => Parameters<T>, wait?: number): T;
66
+ /**
67
+ * 把右侧的对象里非空的属性合并到左侧对象里
68
+ * @author lxm
69
+ * @date 2023-05-16 02:23:39
70
+ * @param {IData} l
71
+ * @param {IData} r
72
+ */
73
+ export declare function mergeInLeft(l: IData, r: IData): void;
74
+ /**
75
+ * 把右侧的对象里非空的属性合并到左侧对象属性为空里
76
+ *
77
+ * @author zk
78
+ * @date 2023-06-01 02:06:36
79
+ * @export
80
+ * @param {IData} l
81
+ * @param {IData} r
82
+ */
83
+ export declare function mergeDefaultInLeft(l: IData, r: IData): void;
84
+ /**
85
+ * 比较两个数组集合,找出相同和不同的元素
86
+ * @author lxm
87
+ * @date 2023-05-29 12:33:55
88
+ * @export
89
+ * @param {IData[]} arr1 数组一
90
+ * @param {IData[]} arr2 数组二
91
+ * @param {string} [keyField] 主键属性,有主键比较主键
92
+ * @return {*} {{
93
+ * more: IData[]; arr1多的元素
94
+ * less: IData[]; arr1少的元素
95
+ * same: IData[]; 相同的元素
96
+ * }}
97
+ */
98
+ export declare function compareArr(arr1: IData[], arr2: IData[], keyField?: string): {
99
+ more: IData[];
100
+ less: IData[];
101
+ same: IData[];
102
+ };
103
+ /**
104
+ * 转换为数字或undefined
105
+ * - 如果是undefined或null 返回undefined
106
+ * - 其他情况转成数字,能转成数字的返回数字,NaN的返回undefined
107
+ * @author lxm
108
+ * @date 2023-06-08 06:30:57
109
+ * @param {unknown} value 值
110
+ * @return {*} {(number | undefined)}
111
+ */
112
+ export declare function toNumberOrNil(value: unknown): number | undefined;
55
113
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/utils/util/util.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAExC;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAG3D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAChE,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,CACT,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,KACrB,UAAU,CAAC,CAAC,CAAC,EAClB,IAAI,CAAC,EAAE,MAAM,aASI,WAAW,CAAC,CAAC,SAS/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAE1C,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,CACT,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,KACrB,UAAU,CAAC,CAAC,CAAC,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,CAAC,CAoCH"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/utils/util/util.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAExC;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAG3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,GAAG,EAAE,EACX,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAUT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAChE,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,CACT,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,KACrB,UAAU,CAAC,CAAC,CAAC,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAiBjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAE1C,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,CACT,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,KACrB,UAAU,CAAC,CAAC,CAAC,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,CAAC,CAoCH;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAMpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAM3D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,KAAK,EAAE,EACb,IAAI,EAAE,KAAK,EAAE,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB;IACD,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,IAAI,EAAE,KAAK,EAAE,CAAC;CACf,CAuCA;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAShE"}
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { debounce } from 'lodash-es';
3
3
  import { getCookie } from 'qx-util';
4
+ import { isNotNil, isNil } from 'ramda';
4
5
  import { CoreConst } from '../../constant';
5
6
  /**
6
7
  * 获取认证令牌
@@ -27,6 +28,26 @@ export function isOverlap(arr1, arr2) {
27
28
  const newArr = Array.from(new Set([...arr1, ...arr2]));
28
29
  return newArr.length !== arr1.length + arr2.length;
29
30
  }
31
+ /**
32
+ * 是否元素相同
33
+ * @author lxm
34
+ * @date 2023-05-22 12:50:53
35
+ * @export
36
+ * @param {any[]} arr1
37
+ * @param {any[]} arr2
38
+ * @param {string} [field] 比较元素里的某个固定属性
39
+ * @return {*} {boolean}
40
+ */
41
+ export function isElementSame(arr1, arr2, field) {
42
+ if (arr1.length !== arr2.length) {
43
+ return false;
44
+ }
45
+ const allElements = field
46
+ ? [...arr1.map(item => item[field]), ...arr2.map(item => item[field])]
47
+ : [...arr1, ...arr2];
48
+ const newArr = Array.from(new Set(allElements));
49
+ return newArr.length === arr1.length;
50
+ }
30
51
  /**
31
52
  * 防抖并合并每次的参数,
32
53
  * 最后一次才会执行
@@ -115,3 +136,105 @@ export function debounceAndAsyncMerge(func, mergeFunc, wait) {
115
136
  };
116
137
  return fun;
117
138
  }
139
+ /**
140
+ * 把右侧的对象里非空的属性合并到左侧对象里
141
+ * @author lxm
142
+ * @date 2023-05-16 02:23:39
143
+ * @param {IData} l
144
+ * @param {IData} r
145
+ */
146
+ export function mergeInLeft(l, r) {
147
+ Object.keys(r).forEach(key => {
148
+ if (isNotNil(r[key])) {
149
+ l[key] = r[key];
150
+ }
151
+ });
152
+ }
153
+ /**
154
+ * 把右侧的对象里非空的属性合并到左侧对象属性为空里
155
+ *
156
+ * @author zk
157
+ * @date 2023-06-01 02:06:36
158
+ * @export
159
+ * @param {IData} l
160
+ * @param {IData} r
161
+ */
162
+ export function mergeDefaultInLeft(l, r) {
163
+ Object.keys(r).forEach(key => {
164
+ if (isNotNil(r[key]) && isNil(l[key])) {
165
+ l[key] = r[key];
166
+ }
167
+ });
168
+ }
169
+ /**
170
+ * 比较两个数组集合,找出相同和不同的元素
171
+ * @author lxm
172
+ * @date 2023-05-29 12:33:55
173
+ * @export
174
+ * @param {IData[]} arr1 数组一
175
+ * @param {IData[]} arr2 数组二
176
+ * @param {string} [keyField] 主键属性,有主键比较主键
177
+ * @return {*} {{
178
+ * more: IData[]; arr1多的元素
179
+ * less: IData[]; arr1少的元素
180
+ * same: IData[]; 相同的元素
181
+ * }}
182
+ */
183
+ export function compareArr(arr1, arr2, keyField) {
184
+ const all = new Set([...arr1, ...arr2]);
185
+ const more = [];
186
+ const less = [];
187
+ const same = [];
188
+ if (keyField) {
189
+ const arr1Keys = arr1.map(item => item[keyField]);
190
+ const arr2Keys = arr2.map(item => item[keyField]);
191
+ all.forEach(item => {
192
+ if (!arr1Keys.includes(item[keyField])) {
193
+ less.push(item);
194
+ return;
195
+ }
196
+ if (!arr2Keys.includes(item[keyField])) {
197
+ more.push(item);
198
+ return;
199
+ }
200
+ same.push(item);
201
+ });
202
+ }
203
+ else {
204
+ all.forEach(item => {
205
+ if (!arr1.includes(item)) {
206
+ less.push(item);
207
+ return;
208
+ }
209
+ if (!arr2.includes(item)) {
210
+ more.push(item);
211
+ return;
212
+ }
213
+ same.push(item);
214
+ });
215
+ }
216
+ return {
217
+ more,
218
+ less,
219
+ same,
220
+ };
221
+ }
222
+ /**
223
+ * 转换为数字或undefined
224
+ * - 如果是undefined或null 返回undefined
225
+ * - 其他情况转成数字,能转成数字的返回数字,NaN的返回undefined
226
+ * @author lxm
227
+ * @date 2023-06-08 06:30:57
228
+ * @param {unknown} value 值
229
+ * @return {*} {(number | undefined)}
230
+ */
231
+ export function toNumberOrNil(value) {
232
+ if (isNil(value)) {
233
+ return undefined;
234
+ }
235
+ const num = Number(value);
236
+ if (Number.isNaN(num)) {
237
+ return undefined;
238
+ }
239
+ return num;
240
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/core",
3
- "version": "0.0.4-beta.5",
3
+ "version": "0.1.1",
4
4
  "description": "核心包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -23,9 +23,10 @@
23
23
  "lint:fix": "eslint --fix 'src/**/*.ts'",
24
24
  "clean": "rimraf out dist",
25
25
  "test": "jest",
26
- "prepublish": "npm run build",
27
- "publish:next": "npm publish --access public --tag next",
28
- "publish:npm": "npm publish --access public"
26
+ "publish:next": "npm run build && npm publish --access public --tag=next",
27
+ "publish:dev": "npm run build && npm publish --access public --tag=dev",
28
+ "publish:beta": "npm run build && npm publish --access public --tag=beta",
29
+ "publish:npm": "npm run build && npm publish --access public --registry=https://registry.npmjs.org/"
29
30
  },
30
31
  "author": "chitanda",
31
32
  "license": "MIT",
@@ -33,7 +34,8 @@
33
34
  "axios": "^1.4.0",
34
35
  "lodash-es": "^4.17.21",
35
36
  "loglevel": "^1.8.1",
36
- "qs": "^6.11.1",
37
+ "loglevel-plugin-prefix": "^0.8.4",
38
+ "qs": "^6.11.2",
37
39
  "qx-util": "^0.4.8",
38
40
  "ramda": "^0.29.0"
39
41
  },
@@ -41,11 +43,10 @@
41
43
  "@types/qs": "^6.9.7"
42
44
  },
43
45
  "peerDependencies": {
44
- "axios": "^1.3.5",
46
+ "axios": "^1.4.0",
45
47
  "lodash-es": "^4.17.21",
46
48
  "qs": "^6.11.0",
47
49
  "qx-util": "^0.4.8",
48
50
  "ramda": "^0.29.0"
49
- },
50
- "gitHead": "899c34a41e55998a64d331fcf8ea28c94d1fdbce"
51
+ }
51
52
  }
@@ -19,7 +19,7 @@ export class CoreConst {
19
19
  * @date 2022-07-20 15:07:28
20
20
  * @static
21
21
  */
22
- static readonly TOKEN = 'access_token';
22
+ static readonly TOKEN = 'ibzuaa-token';
23
23
 
24
24
  /**
25
25
  * 访问令牌标识过期时间
@@ -29,5 +29,5 @@ export class CoreConst {
29
29
  * @static
30
30
  * @memberof CoreConst
31
31
  */
32
- static readonly TOKEN_EXPIRES = 'access_token_expires';
32
+ static readonly TOKEN_EXPIRES = 'ibzuaa-token-expires';
33
33
  }
@@ -2,4 +2,4 @@
2
2
  /**
3
3
  * 无操作函数
4
4
  */
5
- export const NOOP = () => {};
5
+ export const NOOP = (): void => {};