tools-min-ns 1.6.0 → 1.7.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/README.md CHANGED
@@ -5,6 +5,13 @@ cnpm i tools-min-ns --save
5
5
  ```
6
6
 
7
7
  # updates
8
+ ## v1.7.0
9
+
10
+ > 新增FileUtil
11
+ > ObjectUtil 新增getHash
12
+ > StringUtil 新增getHash
13
+ > BrowserUtil 新增getIdSync
14
+
8
15
  ## v1.6.0
9
16
 
10
17
  > CheckUtil
@@ -11,6 +11,7 @@ declare namespace BrowserUtil {
11
11
  * 获取浏览器id
12
12
  */
13
13
  const getId: () => Promise<any>;
14
+ function getIdSync(): string;
14
15
  /**
15
16
  * 获取浏览器类型
16
17
  * @returns Opera | IE | Edge | Firefox | Safari | Chrome | OverIE10 | ""
@@ -142,6 +142,27 @@ var BrowserUtil;
142
142
  });
143
143
  });
144
144
  };
145
+ function getIdSync() {
146
+ var fingerprint;
147
+ var canvas = document.createElement('canvas');
148
+ var ctx = canvas.getContext('2d');
149
+ var txt = window.location.host;
150
+ ctx.textBaseline = 'top';
151
+ ctx.font = "14px 'Arial'";
152
+ ctx.textBaseline = 'tencent';
153
+ ctx.fillStyle = '#f60';
154
+ ctx.fillRect(125, 1, 62, 20);
155
+ ctx.fillStyle = '#069';
156
+ ctx.fillText(txt, 2, 15);
157
+ ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';
158
+ ctx.fillText(txt, 4, 17);
159
+ var b64 = canvas.toDataURL().replace('data:image/png;base64,', '');
160
+ var bin = atob(b64);
161
+ var crc = bin2hex(bin.slice(-16, -12));
162
+ fingerprint = crc;
163
+ return fingerprint;
164
+ }
165
+ BrowserUtil.getIdSync = getIdSync;
145
166
  /**
146
167
  * 获取浏览器类型
147
168
  * @returns Opera | IE | Edge | Firefox | Safari | Chrome | OverIE10 | ""
@@ -334,4 +355,16 @@ var BrowserUtil;
334
355
  }
335
356
  BrowserUtil.removeMark = removeMark;
336
357
  })(BrowserUtil || (BrowserUtil = {}));
337
- export default BrowserUtil;
358
+ export default BrowserUtil;
359
+ function bin2hex(s) {
360
+ var i,
361
+ l,
362
+ n,
363
+ o = '';
364
+ s += '';
365
+ for (i = 0, l = s.length; i < l; i++) {
366
+ n = s.charCodeAt(i).toString(16);
367
+ o += n.length < 2 ? '0' + n : n;
368
+ }
369
+ return o;
370
+ }
@@ -0,0 +1,10 @@
1
+ declare namespace FileUtil {
2
+ /**
3
+ * 多个文件压缩成zip
4
+ * @param fileList
5
+ * @param onProgress
6
+ * @returns
7
+ */
8
+ function getZipByFiles(fileList: File[], onProgress?: (file: string, percent: number) => void): Promise<File>;
9
+ }
10
+ export default FileUtil;
@@ -0,0 +1,182 @@
1
+ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) {
3
+ return value instanceof P ? value : new P(function (resolve) {
4
+ resolve(value);
5
+ });
6
+ }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) {
9
+ try {
10
+ step(generator.next(value));
11
+ } catch (e) {
12
+ reject(e);
13
+ }
14
+ }
15
+ function rejected(value) {
16
+ try {
17
+ step(generator["throw"](value));
18
+ } catch (e) {
19
+ reject(e);
20
+ }
21
+ }
22
+ function step(result) {
23
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
24
+ }
25
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
26
+ });
27
+ };
28
+ var __generator = this && this.__generator || function (thisArg, body) {
29
+ var _ = {
30
+ label: 0,
31
+ sent: function sent() {
32
+ if (t[0] & 1) throw t[1];
33
+ return t[1];
34
+ },
35
+ trys: [],
36
+ ops: []
37
+ },
38
+ f,
39
+ y,
40
+ t,
41
+ g;
42
+ return g = {
43
+ next: verb(0),
44
+ "throw": verb(1),
45
+ "return": verb(2)
46
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
47
+ return this;
48
+ }), g;
49
+ function verb(n) {
50
+ return function (v) {
51
+ return step([n, v]);
52
+ };
53
+ }
54
+ function step(op) {
55
+ if (f) throw new TypeError("Generator is already executing.");
56
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
57
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
58
+ if (y = 0, t) op = [op[0] & 2, t.value];
59
+ switch (op[0]) {
60
+ case 0:
61
+ case 1:
62
+ t = op;
63
+ break;
64
+ case 4:
65
+ _.label++;
66
+ return {
67
+ value: op[1],
68
+ done: false
69
+ };
70
+ case 5:
71
+ _.label++;
72
+ y = op[1];
73
+ op = [0];
74
+ continue;
75
+ case 7:
76
+ op = _.ops.pop();
77
+ _.trys.pop();
78
+ continue;
79
+ default:
80
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
81
+ _ = 0;
82
+ continue;
83
+ }
84
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
85
+ _.label = op[1];
86
+ break;
87
+ }
88
+ if (op[0] === 6 && _.label < t[1]) {
89
+ _.label = t[1];
90
+ t = op;
91
+ break;
92
+ }
93
+ if (t && _.label < t[2]) {
94
+ _.label = t[2];
95
+ _.ops.push(op);
96
+ break;
97
+ }
98
+ if (t[2]) _.ops.pop();
99
+ _.trys.pop();
100
+ continue;
101
+ }
102
+ op = body.call(thisArg, _);
103
+ } catch (e) {
104
+ op = [6, e];
105
+ y = 0;
106
+ } finally {
107
+ f = t = 0;
108
+ }
109
+ if (op[0] & 5) throw op[1];
110
+ return {
111
+ value: op[0] ? op[1] : void 0,
112
+ done: true
113
+ };
114
+ }
115
+ };
116
+ var __values = this && this.__values || function (o) {
117
+ var s = typeof Symbol === "function" && Symbol.iterator,
118
+ m = s && o[s],
119
+ i = 0;
120
+ if (m) return m.call(o);
121
+ if (o && typeof o.length === "number") return {
122
+ next: function next() {
123
+ if (o && i >= o.length) o = void 0;
124
+ return {
125
+ value: o && o[i++],
126
+ done: !o
127
+ };
128
+ }
129
+ };
130
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
131
+ };
132
+ import JSZip from 'jszip';
133
+ var FileUtil;
134
+ (function (FileUtil) {
135
+ /**
136
+ * 多个文件压缩成zip
137
+ * @param fileList
138
+ * @param onProgress
139
+ * @returns
140
+ */
141
+ function getZipByFiles(fileList, onProgress) {
142
+ return __awaiter(this, void 0, void 0, function () {
143
+ var zip, fileList_1, fileList_1_1, file_1, blob, file;
144
+ var e_1, _a;
145
+ return __generator(this, function (_b) {
146
+ switch (_b.label) {
147
+ case 0:
148
+ zip = new JSZip();
149
+ try {
150
+ for (fileList_1 = __values(fileList), fileList_1_1 = fileList_1.next(); !fileList_1_1.done; fileList_1_1 = fileList_1.next()) {
151
+ file_1 = fileList_1_1.value;
152
+ zip.file(file_1.name, file_1);
153
+ }
154
+ } catch (e_1_1) {
155
+ e_1 = {
156
+ error: e_1_1
157
+ };
158
+ } finally {
159
+ try {
160
+ if (fileList_1_1 && !fileList_1_1.done && (_a = fileList_1.return)) _a.call(fileList_1);
161
+ } finally {
162
+ if (e_1) throw e_1.error;
163
+ }
164
+ }
165
+ return [4 /*yield*/, zip.generateAsync({
166
+ type: 'blob'
167
+ }, function (item) {
168
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress(item.currentFile, item.percent);
169
+ })];
170
+ case 1:
171
+ blob = _b.sent();
172
+ file = new File([blob], "\u201C".concat(fileList[0].name, "\u201D\u7B49").concat(fileList.length, "\u4E2A\u6587\u4EF6.zip"), {
173
+ type: blob.type
174
+ });
175
+ return [2 /*return*/, file];
176
+ }
177
+ });
178
+ });
179
+ }
180
+ FileUtil.getZipByFiles = getZipByFiles;
181
+ })(FileUtil || (FileUtil = {}));
182
+ export default FileUtil;
@@ -37,5 +37,10 @@ declare namespace ObjectUtil {
37
37
  * @returns
38
38
  */
39
39
  function mergeParams<A, B>(paramsA: A, paramsB: B): A & Required<B>;
40
+ /**
41
+ * 获取对象的唯一hash
42
+ * @param obj
43
+ */
44
+ function getHash(obj: any): number;
40
45
  }
41
46
  export default ObjectUtil;
@@ -26,9 +26,8 @@ var __read = this && this.__read || function (o, n) {
26
26
  * @author nanshen
27
27
  * @creat 2021-09-15 14:23:23
28
28
  */
29
- import BaseUtil from "../base/BaseUtil";
30
- var isObject = BaseUtil.isObject,
31
- isArray = BaseUtil.isArray;
29
+ import StringUtil from '../string/StringUtil';
30
+ import BaseUtil from '../base/BaseUtil';
32
31
  var ObjectUtil;
33
32
  (function (ObjectUtil) {
34
33
  /**
@@ -40,12 +39,12 @@ var ObjectUtil;
40
39
  */
41
40
  function deepClone(source) {
42
41
  var target;
43
- if (isObject(source)) {
42
+ if (BaseUtil.isObject(source)) {
44
43
  target = {};
45
44
  for (var key in source) {
46
45
  target[key] = deepClone(source[key]);
47
46
  }
48
- } else if (isArray(source)) {
47
+ } else if (BaseUtil.isArray(source)) {
49
48
  target = [];
50
49
  for (var i = 0, len = source.length; i < len; i++) {
51
50
  target.push(deepClone(source[i]));
@@ -66,7 +65,7 @@ var ObjectUtil;
66
65
  // 判断 object 是否是数组或者对象,否则直接返回默认值 defaultValue
67
66
  if (!BaseUtil.isObject(object)) return defaultValue;
68
67
  // 沿着路径寻找到对应的值,未找到则返回默认值 defaultValue
69
- return path.split(".").reduce(function (o, k) {
68
+ return path.split('.').reduce(function (o, k) {
70
69
  return (o || {})[k];
71
70
  }, object) || defaultValue;
72
71
  }
@@ -81,7 +80,7 @@ var ObjectUtil;
81
80
  function setObjValue(object, path, value, isChangeOriginObj) {
82
81
  if (!BaseUtil.isObject(object)) return object;
83
82
  var newObj = isChangeOriginObj ? object : deepClone(object);
84
- path.split(".").reduce(function (o, k, i, _) {
83
+ path.split('.').reduce(function (o, k, i, _) {
85
84
  if (i === _.length - 1) {
86
85
  // 若遍历结束直接赋值
87
86
  o[k] = value;
@@ -154,5 +153,14 @@ var ObjectUtil;
154
153
  return newData;
155
154
  }
156
155
  ObjectUtil.mergeParams = mergeParams;
156
+ /**
157
+ * 获取对象的唯一hash
158
+ * @param obj
159
+ */
160
+ function getHash(obj) {
161
+ var str = JSON.stringify(obj);
162
+ return StringUtil.getHash(str);
163
+ }
164
+ ObjectUtil.getHash = getHash;
157
165
  })(ObjectUtil || (ObjectUtil = {}));
158
166
  export default ObjectUtil;
@@ -48,5 +48,19 @@ declare namespace RequestUtil {
48
48
  }).then(response => {}).catch(error => {});
49
49
  */
50
50
  const jsonpRquest: typeof jsonpRquestFn;
51
+ /**
52
+ * 异步请求并发处理
53
+ * @param requests 请求列表
54
+ * @param options limit同时处理几个请求默认6个,onUploadProgress进度条
55
+ * @returns
56
+ */
57
+ function handleRequests<T = any>(requests: (() => Promise<any>)[], options?: {
58
+ limit?: number;
59
+ onUploadProgress?: (opt: {
60
+ total: number;
61
+ loaded: number;
62
+ progress: number;
63
+ }) => void;
64
+ }): Promise<T[]>;
51
65
  }
52
66
  export default RequestUtil;
@@ -1,3 +1,118 @@
1
+ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) {
3
+ return value instanceof P ? value : new P(function (resolve) {
4
+ resolve(value);
5
+ });
6
+ }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) {
9
+ try {
10
+ step(generator.next(value));
11
+ } catch (e) {
12
+ reject(e);
13
+ }
14
+ }
15
+ function rejected(value) {
16
+ try {
17
+ step(generator["throw"](value));
18
+ } catch (e) {
19
+ reject(e);
20
+ }
21
+ }
22
+ function step(result) {
23
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
24
+ }
25
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
26
+ });
27
+ };
28
+ var __generator = this && this.__generator || function (thisArg, body) {
29
+ var _ = {
30
+ label: 0,
31
+ sent: function sent() {
32
+ if (t[0] & 1) throw t[1];
33
+ return t[1];
34
+ },
35
+ trys: [],
36
+ ops: []
37
+ },
38
+ f,
39
+ y,
40
+ t,
41
+ g;
42
+ return g = {
43
+ next: verb(0),
44
+ "throw": verb(1),
45
+ "return": verb(2)
46
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
47
+ return this;
48
+ }), g;
49
+ function verb(n) {
50
+ return function (v) {
51
+ return step([n, v]);
52
+ };
53
+ }
54
+ function step(op) {
55
+ if (f) throw new TypeError("Generator is already executing.");
56
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
57
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
58
+ if (y = 0, t) op = [op[0] & 2, t.value];
59
+ switch (op[0]) {
60
+ case 0:
61
+ case 1:
62
+ t = op;
63
+ break;
64
+ case 4:
65
+ _.label++;
66
+ return {
67
+ value: op[1],
68
+ done: false
69
+ };
70
+ case 5:
71
+ _.label++;
72
+ y = op[1];
73
+ op = [0];
74
+ continue;
75
+ case 7:
76
+ op = _.ops.pop();
77
+ _.trys.pop();
78
+ continue;
79
+ default:
80
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
81
+ _ = 0;
82
+ continue;
83
+ }
84
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
85
+ _.label = op[1];
86
+ break;
87
+ }
88
+ if (op[0] === 6 && _.label < t[1]) {
89
+ _.label = t[1];
90
+ t = op;
91
+ break;
92
+ }
93
+ if (t && _.label < t[2]) {
94
+ _.label = t[2];
95
+ _.ops.push(op);
96
+ break;
97
+ }
98
+ if (t[2]) _.ops.pop();
99
+ _.trys.pop();
100
+ continue;
101
+ }
102
+ op = body.call(thisArg, _);
103
+ } catch (e) {
104
+ op = [6, e];
105
+ y = 0;
106
+ } finally {
107
+ f = t = 0;
108
+ }
109
+ if (op[0] & 5) throw op[1];
110
+ return {
111
+ value: op[0] ? op[1] : void 0,
112
+ done: true
113
+ };
114
+ }
115
+ };
1
116
  /**
2
117
  * 请求工具
3
118
  * @description
@@ -49,5 +164,74 @@ var RequestUtil;
49
164
  }).then(response => {}).catch(error => {});
50
165
  */
51
166
  RequestUtil.jsonpRquest = jsonpRquestFn;
167
+ /**
168
+ * 异步请求并发处理
169
+ * @param requests 请求列表
170
+ * @param options limit同时处理几个请求默认6个,onUploadProgress进度条
171
+ * @returns
172
+ */
173
+ function handleRequests(requests, options) {
174
+ return __awaiter(this, void 0, void 0, function () {
175
+ // 存储所有请求的结果
176
+ // 定义一个递归函数,用于处理请求并控制并发数量
177
+ function processRequest() {
178
+ return __awaiter(this, void 0, void 0, function () {
179
+ var res, result;
180
+ return __generator(this, function (_a) {
181
+ switch (_a.label) {
182
+ case 0:
183
+ if (!(requests.length > 0)) return [3 /*break*/, 3];
184
+ res = requests.shift();
185
+ if (!res) return [2 /*return*/];
186
+ return [4 /*yield*/, res()];
187
+ case 1:
188
+ result = _a.sent();
189
+ // 执行请求并等待其完成
190
+ results.push(result);
191
+ // 将结果存储
192
+ // 递归调用,确保有新的请求补充进去
193
+ return [4 /*yield*/, processRequest()];
194
+ case 2:
195
+ // 将结果存储
196
+ // 递归调用,确保有新的请求补充进去
197
+ _a.sent();
198
+ loaded += 1;
199
+ onUploadProgress === null || onUploadProgress === void 0 ? void 0 : onUploadProgress({
200
+ total: resLength,
201
+ loaded: loaded,
202
+ progress: loaded / resLength
203
+ });
204
+ _a.label = 3;
205
+ case 3:
206
+ return [2 /*return*/];
207
+ }
208
+ });
209
+ });
210
+ }
211
+ var _a, _b, limit, onUploadProgress, resLength, results, loaded, concurrent;
212
+ return __generator(this, function (_c) {
213
+ switch (_c.label) {
214
+ case 0:
215
+ _a = options !== null && options !== void 0 ? options : {}, _b = _a.limit, limit = _b === void 0 ? 6 : _b, onUploadProgress = _a.onUploadProgress;
216
+ resLength = requests.length;
217
+ results = [];
218
+ loaded = 0;
219
+ concurrent = Array.from({
220
+ length: Math.min(limit, resLength)
221
+ }, function () {
222
+ return processRequest();
223
+ });
224
+ // 等待所有并发的请求完成
225
+ return [4 /*yield*/, Promise.all(concurrent)];
226
+ case 1:
227
+ // 等待所有并发的请求完成
228
+ _c.sent();
229
+ return [2 /*return*/, results];
230
+ // 返回所有请求的结果
231
+ }
232
+ });
233
+ });
234
+ }
235
+ RequestUtil.handleRequests = handleRequests;
52
236
  })(RequestUtil || (RequestUtil = {}));
53
237
  export default RequestUtil;
@@ -388,5 +388,11 @@ declare namespace StringUtil {
388
388
  * @param index 默认随机
389
389
  */
390
390
  const getColor: (index?: number) => string;
391
+ /**
392
+ * fnv1a算法获取字符串hash
393
+ * @param str
394
+ * @returns
395
+ */
396
+ function getHash(str: string): number;
391
397
  }
392
398
  export default StringUtil;
@@ -552,5 +552,19 @@ var StringUtil;
552
552
  StringUtil.getColor = function (index) {
553
553
  return StringUtil.DEFAULT_COLORS[(index !== null && index !== void 0 ? index : Math.random() + StringUtil.DEFAULT_COLORS.length) % StringUtil.DEFAULT_COLORS.length];
554
554
  };
555
+ /**
556
+ * fnv1a算法获取字符串hash
557
+ * @param str
558
+ * @returns
559
+ */
560
+ function getHash(str) {
561
+ var hash = 0x811c9dc5; // 2166136261
562
+ for (var i = 0; i < str.length; i++) {
563
+ hash ^= str.charCodeAt(i);
564
+ hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
565
+ }
566
+ return hash >>> 0; // 转换为32位无符号整数
567
+ }
568
+ StringUtil.getHash = getHash;
555
569
  })(StringUtil || (StringUtil = {}));
556
570
  export default StringUtil;
@@ -24,7 +24,7 @@ declare namespace TransferUtil {
24
24
  * }
25
25
  * fn()
26
26
  */
27
- function getBase64ByFile(file: any): Promise<unknown> | undefined;
27
+ function getBase64ByFile(file: File): Promise<string> | undefined;
28
28
  /**
29
29
  * 将base64转成文件
30
30
  * @param file 文件
@@ -50,7 +50,7 @@ declare namespace TransferUtil {
50
50
  * }
51
51
  * fn()
52
52
  */
53
- function blobToDataURI(blob: any): Promise<unknown> | undefined;
53
+ function blobToDataURI(blob: Blob): Promise<unknown> | undefined;
54
54
  /**
55
55
  * html编码(转义)
56
56
  * @param { String } text 需要转义的字符串