baja-lite 1.1.3 → 1.1.4

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 (76) hide show
  1. package/.eslintignore +7 -0
  2. package/.eslintrc.cjs +89 -0
  3. package/.prettierrc +4 -0
  4. package/ci.js +29 -0
  5. package/package-cjs.json +17 -0
  6. package/package.json +6 -6
  7. package/{boot-remote.js → src/boot-remote.ts} +7 -6
  8. package/{boot.js → src/boot.ts} +39 -32
  9. package/{code.js → src/code.ts} +67 -64
  10. package/{convert-xml.js → src/convert-xml.ts} +155 -105
  11. package/src/enum.ts +71 -0
  12. package/src/error.ts +11 -0
  13. package/src/fn.ts +295 -0
  14. package/{index.d.ts → src/index.ts} +11 -11
  15. package/{list.js → src/list.ts} +9 -8
  16. package/src/math.ts +405 -0
  17. package/src/object.ts +247 -0
  18. package/src/set-ex.ts +374 -0
  19. package/src/sql.ts +5281 -0
  20. package/{sqlite.js → src/sqlite.ts} +52 -53
  21. package/src/string.ts +111 -0
  22. package/{test-mysql.js → src/test-mysql.ts} +126 -135
  23. package/src/test-postgresql.ts +79 -0
  24. package/{test-sqlite.js → src/test-sqlite.ts} +80 -89
  25. package/{test-xml.js → src/test-xml.ts} +1 -1
  26. package/src/test.ts +2 -0
  27. package/src/wx/base.ts +76 -0
  28. package/src/wx/mini.ts +133 -0
  29. package/src/wx/organ.ts +290 -0
  30. package/{wx/types.d.ts → src/wx/types.ts} +10 -21
  31. package/test.json +0 -0
  32. package/tsconfig.base.json +80 -0
  33. package/tsconfig.cjs.json +42 -0
  34. package/tsconfig.json +44 -0
  35. package/xml/event-report.xml +13 -0
  36. package/yarn.lock +1493 -0
  37. package/boot-remote.d.ts +0 -2
  38. package/boot.d.ts +0 -2
  39. package/code.d.ts +0 -2
  40. package/convert-xml.d.ts +0 -10
  41. package/enum.d.ts +0 -18
  42. package/enum.js +0 -59
  43. package/error.d.ts +0 -5
  44. package/error.js +0 -13
  45. package/fn.d.ts +0 -128
  46. package/fn.js +0 -172
  47. package/index.js +0 -11
  48. package/list.d.ts +0 -10
  49. package/math.d.ts +0 -83
  50. package/math.js +0 -451
  51. package/object.d.ts +0 -83
  52. package/object.js +0 -222
  53. package/set-ex.d.ts +0 -198
  54. package/set-ex.js +0 -338
  55. package/sql.d.ts +0 -1858
  56. package/sql.js +0 -5025
  57. package/sqlite.d.ts +0 -32
  58. package/string.d.ts +0 -17
  59. package/string.js +0 -105
  60. package/test-mysql.d.ts +0 -2
  61. package/test-postgresql.d.ts +0 -2
  62. package/test-postgresql.js +0 -90
  63. package/test-sqlite.d.ts +0 -1
  64. package/test-xml.d.ts +0 -1
  65. package/test.d.ts +0 -1
  66. package/test.js +0 -2
  67. package/wx/base.d.ts +0 -11
  68. package/wx/base.js +0 -78
  69. package/wx/mini.d.ts +0 -45
  70. package/wx/mini.js +0 -102
  71. package/wx/organ.d.ts +0 -65
  72. package/wx/organ.js +0 -171
  73. package/wx/types.js +0 -1
  74. package/wx.js +0 -3
  75. /package/{README.md → Readme.md} +0 -0
  76. /package/{wx.d.ts → src/wx.ts} +0 -0
package/src/set-ex.ts ADDED
@@ -0,0 +1,374 @@
1
+ import iterate from "iterare";
2
+
3
+ export class SetEx<T> extends Set {
4
+ private _key: keyof T;
5
+ private _onExist1?: (oldData: T, newData: T) => void | null;
6
+ private _onNotExist1?: (newData: T) => void | null;
7
+ private _replaceIfExits1: boolean;
8
+ private _onExist2?: (oldData: T, newData: T) => void | null;
9
+ private _onNotExist2?: (newData: T) => void | null;
10
+ private _replaceIfExits2: boolean;
11
+ private _map: Map<string, T> = new Map();
12
+ /**
13
+ * @param key 识别是否存在的对象的属性名
14
+ * @param onExist 当存在时作何操作? oldData/newData 哪个将添加到set,由replaceItemWhenExits决定,默认是oldData生效
15
+ * @param onNotExist 当不存在时作何操作?
16
+ * @param replaceWhenExits 当存在时是否覆盖?
17
+ * @param values 初始数组
18
+ */
19
+ constructor(
20
+ option: {
21
+ key: keyof T;
22
+ /** add&addAll触发 */
23
+ onExist1?: (oldData: T, newData: T) => void;
24
+ /** add&addAll触发 */
25
+ onNotExist1?: (newData: T) => void;
26
+ /** add&addAll触发 */
27
+ replaceIfExits1?: boolean;
28
+ /** add2&addAll2触发 */
29
+ onExist2?: (oldData: T, newData: T) => void;
30
+ /** add2&addAll2触发 */
31
+ onNotExist2?: (newData: T) => void;
32
+ /** add2&addAll2触发 */
33
+ replaceIfExits2?: boolean;
34
+ values?: ReadonlyArray<T> | null;
35
+ }
36
+ ) {
37
+ super();
38
+ this._key = option.key;
39
+ this._onExist1 = option.onExist1;
40
+ this._onNotExist1 = option.onNotExist1;
41
+ this._replaceIfExits1 = option.replaceIfExits1 === true;
42
+ this._onExist2 = option.onExist2;
43
+ this._onNotExist2 = option.onNotExist2;
44
+ this._replaceIfExits2 = option.replaceIfExits2 === true;
45
+ if (option.values) {
46
+ this.addAll(...option.values);
47
+ }
48
+ }
49
+
50
+ /**
51
+ *
52
+ * 添加返回
53
+ * @param {T} value
54
+ * @returns {this} 当前对象
55
+ */
56
+ override add(value: T): this {
57
+ let flag = false;
58
+ const key = value[this._key] as string;
59
+ const item = this._map.get(key);
60
+ if (item) {
61
+ flag = true;
62
+ if (this._onExist1) {
63
+ this._onExist1(item, value);
64
+ }
65
+ if (this._replaceIfExits1 === true) {
66
+ super.delete(item);
67
+ this._map.delete(key);
68
+ flag = false;
69
+ }
70
+ }
71
+ if (flag === false) {
72
+ super.add(value);
73
+ this._map.set(key, value);
74
+ if (this._onNotExist1) {
75
+ this._onNotExist1(value);
76
+ }
77
+ }
78
+ return this;
79
+ }
80
+ /**
81
+ * 批量添加
82
+ * @param values
83
+ * @returns 当前对象
84
+ */
85
+ addAll(...values: T[]): this {
86
+ for (const value of values) {
87
+ this.add(value);
88
+ }
89
+ return this;
90
+ }
91
+ /**
92
+ *
93
+ * 添加
94
+ * @param {T} value
95
+ * @returns {T} 添加成功的对象:可能是新加入集合的,也可能是原本存在的
96
+ */
97
+ add2(value: T): T {
98
+ let flag = false;
99
+ const key = value[this._key] as string;
100
+ const item = this._map.get(key);
101
+ let tmp = value;
102
+ if (item) {
103
+ flag = true;
104
+ if (this._onExist2) {
105
+ this._onExist2(item, value);
106
+ }
107
+ if (this._replaceIfExits2 === true) {
108
+ super.delete(value);
109
+ this._map.delete(key);
110
+ flag = false;
111
+ } else {
112
+ tmp = item;
113
+ }
114
+ }
115
+ if (flag === false) {
116
+ super.add(value);
117
+ this._map.set(key, value);
118
+ if (this._onNotExist2) {
119
+ this._onNotExist2(value);
120
+ }
121
+ }
122
+ return tmp;
123
+ }
124
+ /**
125
+ *
126
+ * 添加并返回添加成功的对象:可能是新加入集合的,也可能是原本存在的
127
+ * @param {T} values
128
+ * @returns {T}
129
+ */
130
+ addAll2(values: T[]): T[] {
131
+ const result: T[] = [];
132
+ for (const value of values) {
133
+ result.push(this.add2(value));
134
+ }
135
+ return result;
136
+ }
137
+ /**
138
+ * 用key找到匹配的第一个对象
139
+ * @param {*} key 这是对象的关键属性,而非对象
140
+ * @returns {(T | null)}
141
+ */
142
+ find(key: T[keyof T]): T | null {
143
+ return this._map.get(key as string) ?? null;
144
+ }
145
+ /**
146
+ * 用key找到匹配的所有对象
147
+ * @param {*} key 这是对象的关键属性,而非对象
148
+ * @returns {T[]}
149
+ */
150
+ findAll(key: T[keyof T]): T[] {
151
+ return iterate(key as string[]).map(k => this._map.get(k)).filter(v => v !== undefined).toArray() as T[];
152
+ }
153
+ /**
154
+ *
155
+ * 用函数回调找到匹配的第一个对象
156
+ * @param {(item: T) => boolean} fn
157
+ * @returns {T[]}
158
+ */
159
+ filter(fn: (item: T) => boolean): T | null {
160
+ for (const item of this) {
161
+ if (fn(item) === true) {
162
+ return item;
163
+ }
164
+ }
165
+ return null;
166
+ }
167
+ /**
168
+ *
169
+ * 用函数回调找到匹配的所有对象
170
+ * @param {(item: T) => boolean} fn
171
+ * @returns {T[]}
172
+ */
173
+ filterAll(fn: (item: T) => boolean): T[] {
174
+ const res = new Array<T>();
175
+ this.forEach((item) => {
176
+ if (fn(item) === true) {
177
+ res.push(item);
178
+ }
179
+ });
180
+ return res;
181
+ }
182
+ /**
183
+ *
184
+ * 是否存在key对应的对象
185
+ * @param {*} value 这是对象的关键属性,而非对象
186
+ * @returns {boolean}
187
+ */
188
+ override has(key: T[keyof T]): boolean {
189
+ return this._map.has(key as string);
190
+ }
191
+ /**
192
+ * 转为数组
193
+ * @param param0
194
+ * @returns
195
+ */
196
+ toArray({ sort, each, filter, map }: {
197
+ sort?: (a: T, b: T) => number;
198
+ each?: (a: T) => void;
199
+ filter?: (a: T) => boolean;
200
+ map?: (a: T) => T;
201
+ } = {}): T[] {
202
+ let list = Array.from(this);
203
+ if (filter) { list = list.filter(filter); }
204
+ if (sort) { list.sort(sort); }
205
+ if (each) { list.forEach(each); }
206
+ if (map) { list = list.map(map); }
207
+ return list;
208
+ }
209
+ /**
210
+ * 转为JSON对象
211
+ * @param key
212
+ * @param value
213
+ * @param param2
214
+ * @returns
215
+ */
216
+ toJSON<L = T>(key: keyof T, value?: keyof T, { sort, each, filter, map }: {
217
+ sort?: (a: T, b: T) => number;
218
+ each?: (a: T) => void;
219
+ filter?: (a: T) => boolean;
220
+ map?: (a: T) => T;
221
+ } = {}): { [k: string]: L } {
222
+ return Object.fromEntries(this.toArray({ sort, each, filter, map }).map(i => [i[key], value ? i[value] : i]));
223
+ }
224
+ /**
225
+ *
226
+ * 删除key对应的对象
227
+ * @param {*} _key 这是对象的关键属性,而非对象
228
+ * @returns {boolean}
229
+ */
230
+ override delete(_key: T[keyof T]): boolean {
231
+ const key = _key as string;
232
+ const item = this._map.get(key);
233
+ if (item) {
234
+ super.delete(item);
235
+ this._map.delete(key);
236
+ return true;
237
+ }
238
+ return false;
239
+ }
240
+ /**
241
+ *
242
+ * 重置
243
+ * @param {keyof T} key
244
+ * @param {(oldData: T, newData: T) => void} [onExist]
245
+ * @param {boolean} [replaceWhenExits=false]
246
+ */
247
+ reset(option: {
248
+ key?: keyof T;
249
+ /** add&addAll触发 */
250
+ onExist1?: (oldData: T, newData: T) => void;
251
+ /** add&addAll触发 */
252
+ onNotExist1?: (newData: T) => void;
253
+ /** add&addAll触发 */
254
+ replaceIfExits1?: boolean;
255
+ /** add2&addAll2触发 */
256
+ onExist2?: (oldData: T, newData: T) => void;
257
+ /** add2&addAll2触发 */
258
+ onNotExist2?: (newData: T) => void;
259
+ /** add2&addAll2触发 */
260
+ replaceIfExits2?: boolean;
261
+ values?: ReadonlyArray<T> | null;
262
+ }): this {
263
+ this.clear();
264
+ this._map.clear();
265
+ if (option.key) { this._key = option.key; }
266
+ if (option.onExist1) { this._onExist1 = option.onExist1; }
267
+ if (option.onNotExist1) { this._onNotExist1 = option.onNotExist1; }
268
+ if (option.replaceIfExits1) { this._replaceIfExits1 = option.replaceIfExits1; }
269
+ if (option.onExist2) { this._onExist2 = option.onExist2; }
270
+ if (option.onNotExist2) { this._onNotExist2 = option.onNotExist2; }
271
+ if (option.replaceIfExits2) { this._replaceIfExits2 = option.replaceIfExits2; }
272
+ if (option.values) {
273
+ this.addAll(...option.values);
274
+ }
275
+ return this;
276
+ }
277
+ /**
278
+ *
279
+ * @param param0 转为JSON对象,value可能是数组
280
+ * @returns
281
+ */
282
+ toJSONArray({ sort, each, filter, map }: {
283
+ sort?: (a: T, b: T) => number;
284
+ each?: (a: T) => void;
285
+ filter?: (a: T) => boolean;
286
+ map?: (a: T) => T;
287
+ } = {}) {
288
+ const result: { [k: string]: T[keyof T][] } = {};
289
+ const list = this.toArray({ sort, each, filter, map });
290
+ for (const item of list) {
291
+ for (const key in item) {
292
+ if (!result[key]) {
293
+ result[key] = [];
294
+ }
295
+ result[key]!.push(item[key]);
296
+ }
297
+ }
298
+ return result;
299
+ }
300
+ /**
301
+ * 转为hot-table支持的数组
302
+ * @param param0
303
+ * @param keys
304
+ * @returns
305
+ */
306
+ toDataGrid({ sort, each, filter, map }: {
307
+ sort?: (a: T, b: T) => number;
308
+ each?: (a: T) => void;
309
+ filter?: (a: T) => boolean;
310
+ map?: (a: T) => T;
311
+ } = {}, ...keys: (keyof T)[]) {
312
+ if (this.size === 0) { return []; }
313
+ if (keys.length === 0) { keys = Object.keys(this.values().next().value) as any; }
314
+ const result: (T[keyof T] | keyof T)[][] = [keys];
315
+ const list = this.toArray({ sort, each, filter, map });
316
+ for (const item of list) {
317
+ const one: T[keyof T][] = [];
318
+ for (const key of keys) {
319
+ one.push(item[key]);
320
+ }
321
+ result.push(one);
322
+ }
323
+ return result;
324
+ }
325
+ /**
326
+ * 转为饼图支持的数组
327
+ * @param param0
328
+ * @param keys
329
+ * @returns
330
+ */
331
+ toPieGrid({ sort, each, filter, map }: {
332
+ sort?: (a: T, b: T) => number;
333
+ each?: (a: T) => void;
334
+ filter?: (a: T) => boolean;
335
+ map?: (a: T) => T;
336
+ } = {}, ...keys: (keyof T)[]): { [k: string]: { value: T[keyof T], name: T[keyof T] }[] } {
337
+ if (this.size === 0) { return {}; }
338
+ if (keys.length === 0) { keys = Object.keys(this.values().next().value) as any; }
339
+ const result: { [k: string]: { value: T[keyof T], name: T[keyof T] }[] } = {};
340
+ const list = this.toArray({ sort, each, filter, map });
341
+ for (const item of list) {
342
+ const name = item[this._key];
343
+ for (const key in item) {
344
+ if (!result[key]) {
345
+ result[key] = [];
346
+ }
347
+ result[key]!.push({ name, value: item[key] });
348
+ }
349
+ }
350
+ return result;
351
+ }
352
+
353
+ set onExist1(onExist1: ((oldData: T, newData: T) => void) | undefined) {
354
+ this._onExist1 = onExist1;
355
+ }
356
+ set onExist2(onExist2: ((oldData: T, newData: T) => void) | undefined) {
357
+ this._onExist2 = onExist2;
358
+ }
359
+ set onNotExist1(onNotExist1: ((newData: T) => void) | undefined) {
360
+ this._onNotExist1 = onNotExist1;
361
+ }
362
+ set onNotExist2(onNotExist2: ((newData: T) => void) | undefined) {
363
+ this._onNotExist2 = onNotExist2;
364
+ }
365
+ set replaceIfExits1(replaceIfExits1: boolean) {
366
+ this._replaceIfExits1 = replaceIfExits1;
367
+ }
368
+ set replaceIfExits2(replaceIfExits2: boolean) {
369
+ this._replaceIfExits2 = replaceIfExits2;
370
+ }
371
+ set key(key: keyof T) {
372
+ this._key = key;
373
+ }
374
+ }