szdl-utils-kit 0.2.30 → 0.3.5
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 +206 -140
- package/dist/index.js +1435 -928
- package/dist/index.umd.cjs +2 -2
- package/dist/types/background-worker.d.ts +81 -0
- package/dist/types/batch.d.ts +121 -55
- package/dist/types/bx-boot.d.ts +109 -154
- package/dist/types/bx-helper.d.ts +14 -20
- package/dist/types/bx-logger.d.ts +32 -35
- package/dist/types/index.d.ts +3 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
if (!e.has(
|
|
5
|
-
throw TypeError("Cannot " +
|
|
1
|
+
var _t = Object.defineProperty;
|
|
2
|
+
var pt = (N, e, r) => e in N ? _t(N, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : N[e] = r;
|
|
3
|
+
var S = (N, e, r) => (pt(N, typeof e != "symbol" ? e + "" : e, r), r), at = (N, e, r) => {
|
|
4
|
+
if (!e.has(N))
|
|
5
|
+
throw TypeError("Cannot " + r);
|
|
6
6
|
};
|
|
7
|
-
var
|
|
8
|
-
if (e.has(
|
|
7
|
+
var p = (N, e, r) => (at(N, e, "read from private field"), r ? r.call(N) : e.get(N)), H = (N, e, r) => {
|
|
8
|
+
if (e.has(N))
|
|
9
9
|
throw TypeError("Cannot add the same private member more than once");
|
|
10
|
-
e instanceof WeakSet ? e.add(
|
|
11
|
-
},
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
function
|
|
15
|
-
return
|
|
10
|
+
e instanceof WeakSet ? e.add(N) : e.set(N, r);
|
|
11
|
+
}, F = (N, e, r, i) => (at(N, e, "write to private field"), i ? i.call(N, r) : e.set(N, r), r);
|
|
12
|
+
var X = (N, e, r) => (at(N, e, "access private method"), r);
|
|
13
|
+
var yt = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
|
|
14
|
+
function Et(N) {
|
|
15
|
+
return N && N.__esModule && Object.prototype.hasOwnProperty.call(N, "default") ? N.default : N;
|
|
16
16
|
}
|
|
17
|
-
var
|
|
18
|
-
(function(
|
|
19
|
-
(function(
|
|
20
|
-
Array.prototype.indexOf || (Array.prototype.indexOf = function(t,
|
|
21
|
-
var l,
|
|
22
|
-
for (l =
|
|
17
|
+
var lt = { exports: {} };
|
|
18
|
+
(function(N, e) {
|
|
19
|
+
(function(r) {
|
|
20
|
+
Array.prototype.indexOf || (Array.prototype.indexOf = function(t, n) {
|
|
21
|
+
var l, f;
|
|
22
|
+
for (l = n || 0, f = this.length; l < f; l += 1)
|
|
23
23
|
if (this[l] === t)
|
|
24
24
|
return l;
|
|
25
25
|
return -1;
|
|
26
26
|
});
|
|
27
|
-
var
|
|
28
|
-
for (var l = t.toString(); l.length <
|
|
27
|
+
var i = this, A = function(t, n) {
|
|
28
|
+
for (var l = t.toString(); l.length < n; )
|
|
29
29
|
l = "0" + l;
|
|
30
30
|
return l;
|
|
31
|
-
}, o = function(t,
|
|
32
|
-
return
|
|
33
|
-
},
|
|
34
|
-
var l,
|
|
35
|
-
return l = t.slice(
|
|
36
|
-
},
|
|
37
|
-
var l,
|
|
38
|
-
t.slice(
|
|
39
|
-
t.charAt(
|
|
40
|
-
t.slice(
|
|
41
|
-
t.charAt(
|
|
42
|
-
t.slice(
|
|
43
|
-
],
|
|
44
|
-
return !isNaN(Number(
|
|
45
|
-
t.slice(
|
|
46
|
-
t.charAt(
|
|
47
|
-
t.slice(
|
|
48
|
-
t.charAt(
|
|
49
|
-
t.slice(
|
|
50
|
-
], !isNaN(Number(
|
|
51
|
-
},
|
|
31
|
+
}, o = function(t, n) {
|
|
32
|
+
return n !== r ? (t.year(n.year() || n.year), t.month(n.month() || n.month), t.day(n.day() || n.day), t.hours(n.hours() || n.hours), t.minutes(n.minutes() || n.minutes), t.seconds(n.seconds() || n.seconds), t.milliseconds(n.milliseconds() || n.milliseconds), t) : r;
|
|
33
|
+
}, h = function(t, n) {
|
|
34
|
+
var l, f = "";
|
|
35
|
+
return l = t.slice(n, n + 1), l !== "" && !isNaN(Number(l)) && (f += "%H"), l = t.charAt(n + 2), l !== "" && l === ":" && (f += l), l = t.slice(n + 3, n + 4), l !== "" && !isNaN(Number(l)) && (f += "%M"), l = t.charAt(n + 5), l !== "" && l === ":" && (f += l), l = t.slice(n + 6, n + 7), l !== "" && !isNaN(Number(l)) && (f += "%S"), f;
|
|
36
|
+
}, m = function(t, n) {
|
|
37
|
+
var l, f = [
|
|
38
|
+
t.slice(n, n + 1),
|
|
39
|
+
t.charAt(n + 2),
|
|
40
|
+
t.slice(n + 3, n + 4),
|
|
41
|
+
t.charAt(n + 5),
|
|
42
|
+
t.slice(n + 6, n + 9)
|
|
43
|
+
], L;
|
|
44
|
+
return !isNaN(Number(f[0])) && !isNaN(Number(f[2])) && !isNaN(Number(f[4])) ? (f[1] === "." && f[3] === "." ? l = "%d.%m.%Y" : f[1] === "-" && f[3] === "-" ? l = "%m-%d-%Y" : f[1] === "/" && f[3] === "/" && (l = "%m/%d/%Y"), l) : (L = [
|
|
45
|
+
t.slice(n, n + 3),
|
|
46
|
+
t.charAt(n + 4),
|
|
47
|
+
t.slice(n + 5, n + 6),
|
|
48
|
+
t.charAt(n + 7),
|
|
49
|
+
t.slice(n + 8, n + 9)
|
|
50
|
+
], !isNaN(Number(L[0])) && !isNaN(Number(L[2])) && !isNaN(Number(L[4])) ? (L[1] === "-" && L[3] === "-" && (l = "%Y-%m-%d"), l) : "");
|
|
51
|
+
}, u = i.tempus, s, d, g = i.navigator || {}, a = "en", c = {
|
|
52
52
|
en: {
|
|
53
53
|
JANUARY_SHORT: "Jan",
|
|
54
54
|
FEBRUARY_SHORT: "Feb",
|
|
@@ -209,70 +209,70 @@ var vt = { exports: {} };
|
|
|
209
209
|
FRIDAY_LONG: "Freitag",
|
|
210
210
|
SATURDAY_LONG: "Samstag"
|
|
211
211
|
}
|
|
212
|
-
},
|
|
212
|
+
}, y = function() {
|
|
213
213
|
return [
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
214
|
+
c[a].JANUARY_LONG,
|
|
215
|
+
c[a].FEBRUARY_LONG,
|
|
216
|
+
c[a].MARCH_LONG,
|
|
217
|
+
c[a].APRIL_LONG,
|
|
218
|
+
c[a].MAY_LONG,
|
|
219
|
+
c[a].JUNE_LONG,
|
|
220
|
+
c[a].JULY_LONG,
|
|
221
|
+
c[a].AUGUST_LONG,
|
|
222
|
+
c[a].SEPTEMBER_LONG,
|
|
223
|
+
c[a].OCTOBER_LONG,
|
|
224
|
+
c[a].NOVEMBER_LONG,
|
|
225
|
+
c[a].DECEMBER_LONG
|
|
226
226
|
];
|
|
227
|
-
},
|
|
227
|
+
}, O = function() {
|
|
228
228
|
return [
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
229
|
+
c[a].JANUARY_SHORT,
|
|
230
|
+
c[a].FEBRUARY_SHORT,
|
|
231
|
+
c[a].MARCH_SHORT,
|
|
232
|
+
c[a].APRIL_SHORT,
|
|
233
|
+
c[a].MAY_SHORT,
|
|
234
|
+
c[a].JUNE_SHORT,
|
|
235
|
+
c[a].JULY_SHORT,
|
|
236
|
+
c[a].AUGUST_SHORT,
|
|
237
|
+
c[a].SEPTEMBER_SHORT,
|
|
238
|
+
c[a].OCTOBER_SHORT,
|
|
239
|
+
c[a].NOVEMBER_SHORT,
|
|
240
|
+
c[a].DECEMBER_SHORT
|
|
241
241
|
];
|
|
242
|
-
},
|
|
242
|
+
}, R = function() {
|
|
243
243
|
return [
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
244
|
+
c[a].SUNDAY_LONG,
|
|
245
|
+
c[a].MONDAY_LONG,
|
|
246
|
+
c[a].TUESDAY_LONG,
|
|
247
|
+
c[a].WEDNESDAY_LONG,
|
|
248
|
+
c[a].THURSDAY_LONG,
|
|
249
|
+
c[a].FRIDAY_LONG,
|
|
250
|
+
c[a].SATURDAY_LONG
|
|
251
251
|
];
|
|
252
|
-
},
|
|
252
|
+
}, G = function() {
|
|
253
253
|
return [
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
254
|
+
c[a].SUNDAY_SHORT,
|
|
255
|
+
c[a].MONDAY_SHORT,
|
|
256
|
+
c[a].TUESDAY_SHORT,
|
|
257
|
+
c[a].WEDNESDAY_SHORT,
|
|
258
|
+
c[a].THURSDAY_SHORT,
|
|
259
|
+
c[a].FRIDAY_SHORT,
|
|
260
|
+
c[a].SATURDAY_SHORT
|
|
261
261
|
];
|
|
262
|
-
},
|
|
263
|
-
var
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) :
|
|
267
|
-
},
|
|
262
|
+
}, P, w, I, M, q = function(t, n, l) {
|
|
263
|
+
var f;
|
|
264
|
+
i.XMLHttpRequest ? f = new XMLHttpRequest() : f = new ActiveXObject("Microsoft.XMLHTTP"), f.onreadystatechange = function() {
|
|
265
|
+
f.readyState === 4 && (f.status === 200 ? n && (i.JSON === r ? alert(`Please, include json2 into your project if you want use old browsers!
|
|
266
|
+
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : n(JSON.parse(f.responseText))) : l && l(f));
|
|
267
|
+
}, f.open("GET", t, !1), f.send();
|
|
268
268
|
}, B = {
|
|
269
269
|
"%d": {
|
|
270
270
|
format: function(t) {
|
|
271
|
-
return
|
|
271
|
+
return A(t.day() || s.MIN_DAY, 2);
|
|
272
272
|
},
|
|
273
273
|
parse: function(t) {
|
|
274
|
-
var
|
|
275
|
-
return { day: isNaN(
|
|
274
|
+
var n = Number(t);
|
|
275
|
+
return { day: isNaN(n) ? r : n };
|
|
276
276
|
},
|
|
277
277
|
minLength: 2,
|
|
278
278
|
maxLength: 2,
|
|
@@ -280,11 +280,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
280
280
|
},
|
|
281
281
|
"%m": {
|
|
282
282
|
format: function(t) {
|
|
283
|
-
return
|
|
283
|
+
return A(t.month() || s.MIN_MONTH, 2);
|
|
284
284
|
},
|
|
285
285
|
parse: function(t) {
|
|
286
|
-
var
|
|
287
|
-
return { month: isNaN(
|
|
286
|
+
var n = Number(t);
|
|
287
|
+
return { month: isNaN(n) ? r : n };
|
|
288
288
|
},
|
|
289
289
|
minLength: 2,
|
|
290
290
|
maxLength: 2,
|
|
@@ -292,11 +292,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
292
292
|
},
|
|
293
293
|
"%Y": {
|
|
294
294
|
format: function(t) {
|
|
295
|
-
return
|
|
295
|
+
return A(t.year() || s.MIN_YEAR, 4);
|
|
296
296
|
},
|
|
297
297
|
parse: function(t) {
|
|
298
|
-
var
|
|
299
|
-
return { year: isNaN(
|
|
298
|
+
var n = Number(t);
|
|
299
|
+
return { year: isNaN(n) ? r : n };
|
|
300
300
|
},
|
|
301
301
|
minLength: 4,
|
|
302
302
|
maxLength: 4,
|
|
@@ -304,7 +304,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
304
304
|
},
|
|
305
305
|
"%w": {
|
|
306
306
|
format: function(t) {
|
|
307
|
-
return t.dayOfWeek() ||
|
|
307
|
+
return t.dayOfWeek() || s.MIN_DAY_OF_WEEK;
|
|
308
308
|
},
|
|
309
309
|
parse: function() {
|
|
310
310
|
return {};
|
|
@@ -315,8 +315,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
315
315
|
},
|
|
316
316
|
"%a": {
|
|
317
317
|
format: function(t) {
|
|
318
|
-
var
|
|
319
|
-
return
|
|
318
|
+
var n = t.dayOfWeek();
|
|
319
|
+
return M[n !== r ? n : s.MIN_DAY_OF_WEEK];
|
|
320
320
|
},
|
|
321
321
|
parse: function() {
|
|
322
322
|
return {};
|
|
@@ -327,8 +327,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
327
327
|
},
|
|
328
328
|
"%A": {
|
|
329
329
|
format: function(t) {
|
|
330
|
-
var
|
|
331
|
-
return
|
|
330
|
+
var n = t.dayOfWeek();
|
|
331
|
+
return I[n !== r ? n : s.MIN_DAY_OF_WEEK];
|
|
332
332
|
},
|
|
333
333
|
parse: function() {
|
|
334
334
|
return {};
|
|
@@ -339,12 +339,12 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
339
339
|
},
|
|
340
340
|
"%b": {
|
|
341
341
|
format: function(t) {
|
|
342
|
-
var
|
|
343
|
-
return
|
|
342
|
+
var n = s.options("monthFromZero") ? t.month() : t.month() - 1;
|
|
343
|
+
return w[n !== r ? n : s.MIN_MONTH];
|
|
344
344
|
},
|
|
345
345
|
parse: function(t) {
|
|
346
|
-
var
|
|
347
|
-
return { month:
|
|
346
|
+
var n = s.monthNames().indexOf(t) + (s.options("monthFromZero") ? 0 : 1);
|
|
347
|
+
return { month: n !== -1 ? n : r };
|
|
348
348
|
},
|
|
349
349
|
minLength: 1,
|
|
350
350
|
maxLength: 999,
|
|
@@ -352,12 +352,12 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
352
352
|
},
|
|
353
353
|
"%B": {
|
|
354
354
|
format: function(t) {
|
|
355
|
-
var
|
|
356
|
-
return
|
|
355
|
+
var n = s.options("monthFromZero") ? t.month() : t.month() - 1;
|
|
356
|
+
return P[n !== r ? n : s.MIN_MONTH];
|
|
357
357
|
},
|
|
358
358
|
parse: function(t) {
|
|
359
|
-
var
|
|
360
|
-
return { month:
|
|
359
|
+
var n = s.monthNames(!0).indexOf(t) + (s.options("monthFromZero") ? 0 : 1);
|
|
360
|
+
return { month: n !== -1 ? n : r };
|
|
361
361
|
},
|
|
362
362
|
minLength: 1,
|
|
363
363
|
maxLength: 999,
|
|
@@ -365,11 +365,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
365
365
|
},
|
|
366
366
|
"%H": {
|
|
367
367
|
format: function(t) {
|
|
368
|
-
return
|
|
368
|
+
return A(t.hours() || s.MIN_HOURS, 2);
|
|
369
369
|
},
|
|
370
370
|
parse: function(t) {
|
|
371
|
-
var
|
|
372
|
-
return { hours: isNaN(
|
|
371
|
+
var n = Number(t);
|
|
372
|
+
return { hours: isNaN(n) ? r : n };
|
|
373
373
|
},
|
|
374
374
|
minLength: 2,
|
|
375
375
|
maxLength: 2,
|
|
@@ -377,11 +377,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
377
377
|
},
|
|
378
378
|
"%M": {
|
|
379
379
|
format: function(t) {
|
|
380
|
-
return
|
|
380
|
+
return A(t.minutes() || s.MIN_MINUTES, 2);
|
|
381
381
|
},
|
|
382
382
|
parse: function(t) {
|
|
383
|
-
var
|
|
384
|
-
return { minutes: isNaN(
|
|
383
|
+
var n = Number(t);
|
|
384
|
+
return { minutes: isNaN(n) ? r : n };
|
|
385
385
|
},
|
|
386
386
|
minLength: 2,
|
|
387
387
|
maxLength: 2,
|
|
@@ -389,11 +389,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
389
389
|
},
|
|
390
390
|
"%S": {
|
|
391
391
|
format: function(t) {
|
|
392
|
-
return
|
|
392
|
+
return A(t.seconds() || s.MIN_SECONDS, 2);
|
|
393
393
|
},
|
|
394
394
|
parse: function(t) {
|
|
395
|
-
var
|
|
396
|
-
return { seconds: isNaN(
|
|
395
|
+
var n = Number(t);
|
|
396
|
+
return { seconds: isNaN(n) ? r : n };
|
|
397
397
|
},
|
|
398
398
|
minLength: 2,
|
|
399
399
|
maxLength: 2,
|
|
@@ -404,7 +404,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
404
404
|
return t.timestamp();
|
|
405
405
|
},
|
|
406
406
|
parse: function(t) {
|
|
407
|
-
return isNaN(Number(t)) ? {} :
|
|
407
|
+
return isNaN(Number(t)) ? {} : s(Number(t)).get();
|
|
408
408
|
},
|
|
409
409
|
minLength: 1,
|
|
410
410
|
maxLength: 20,
|
|
@@ -412,14 +412,14 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
412
412
|
},
|
|
413
413
|
"%F": {
|
|
414
414
|
format: function(t) {
|
|
415
|
-
return
|
|
415
|
+
return A(t.year() || s.MIN_YEAR, 4) + "-" + A(t.month() || s.MIN_MONTH, 2) + "-" + A(t.day() || s.MIN_DAY, 2);
|
|
416
416
|
},
|
|
417
417
|
parse: function(t) {
|
|
418
|
-
var
|
|
418
|
+
var n = Number(t.slice(0, 4)), l = Number(t.slice(5, 7)), f = Number(t.slice(8, 10));
|
|
419
419
|
return {
|
|
420
|
-
year:
|
|
420
|
+
year: n,
|
|
421
421
|
month: l,
|
|
422
|
-
day:
|
|
422
|
+
day: f
|
|
423
423
|
};
|
|
424
424
|
},
|
|
425
425
|
minLength: 10,
|
|
@@ -428,13 +428,13 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
428
428
|
},
|
|
429
429
|
"%D": {
|
|
430
430
|
format: function(t) {
|
|
431
|
-
return
|
|
431
|
+
return A(t.month() || s.MIN_MONTH, 2) + "/" + A(t.day() || s.MIN_DAY, 2) + "/" + A(t.year() || s.MIN_YEAR, 4);
|
|
432
432
|
},
|
|
433
433
|
parse: function(t) {
|
|
434
|
-
var
|
|
434
|
+
var n = Number(t.slice(0, 2)), l = Number(t.slice(3, 5)), f = Number(t.slice(6, 10));
|
|
435
435
|
return {
|
|
436
|
-
year:
|
|
437
|
-
month:
|
|
436
|
+
year: f,
|
|
437
|
+
month: n,
|
|
438
438
|
day: l
|
|
439
439
|
};
|
|
440
440
|
},
|
|
@@ -442,11 +442,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
442
442
|
maxLength: 10,
|
|
443
443
|
type: "string"
|
|
444
444
|
}
|
|
445
|
-
},
|
|
445
|
+
}, tt = {
|
|
446
446
|
useMilliseconds: !1,
|
|
447
447
|
monthFromZero: !1
|
|
448
|
-
},
|
|
449
|
-
|
|
448
|
+
}, E;
|
|
449
|
+
E = function(t, n, l) {
|
|
450
450
|
return this._d = /* @__PURE__ */ new Date(), this._i = {
|
|
451
451
|
year: !1,
|
|
452
452
|
month: !1,
|
|
@@ -455,56 +455,56 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
455
455
|
minutes: !1,
|
|
456
456
|
seconds: !1,
|
|
457
457
|
milliseconds: !1
|
|
458
|
-
}, t !==
|
|
459
|
-
},
|
|
460
|
-
var t = this.month(),
|
|
461
|
-
return this.leapYear() && t === (
|
|
462
|
-
},
|
|
458
|
+
}, t !== r && this.set(t, n, l), this;
|
|
459
|
+
}, E.fn = E.prototype, E.fn.dayCount = function() {
|
|
460
|
+
var t = this.month(), n = s.MAX_DAY_IN_MONTHS[t - (s.options("monthFromZero") ? 0 : 1)];
|
|
461
|
+
return this.leapYear() && t === (s.options("monthFromZero") ? 1 : 2) && (n += 1), n;
|
|
462
|
+
}, E.fn.year = function(t) {
|
|
463
463
|
if (arguments.length !== 0)
|
|
464
|
-
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >=
|
|
464
|
+
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_YEAR && Number(t) <= s.MAX_YEAR ? (this._d.setFullYear(Number(t)), this._i.year = !1) : this._i.year = Number(t) : (this._d.setFullYear(s.MIN_YEAR), this._i.year = !1);
|
|
465
465
|
else
|
|
466
466
|
return this._i.year === !1 ? this._d.getFullYear() : this._i.year;
|
|
467
467
|
return this;
|
|
468
|
-
},
|
|
468
|
+
}, E.fn.month = function(t) {
|
|
469
469
|
if (arguments.length !== 0)
|
|
470
|
-
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >=
|
|
470
|
+
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_MONTH && Number(t) <= s.MAX_MONTH ? (this._d.setMonth(s.options("monthFromZero") ? Number(t) : Number(t) - 1), this._i.month = !1) : this._i.month = Number(t) : (this._d.setMonth(s.options("monthFromZero") ? s.MIN_MONTH : s.MIN_MONTH - 1), this._i.month = !1);
|
|
471
471
|
else
|
|
472
|
-
return this._i.month === !1 ?
|
|
472
|
+
return this._i.month === !1 ? s.options("monthFromZero") ? this._d.getMonth() : this._d.getMonth() + 1 : this._i.month;
|
|
473
473
|
return this;
|
|
474
|
-
},
|
|
474
|
+
}, E.fn.day = function(t) {
|
|
475
475
|
if (arguments.length !== 0)
|
|
476
|
-
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >=
|
|
476
|
+
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_DAY && Number(t) <= this.dayCount() ? (this._d.setDate(Number(t)), this._i.day = !1) : this._i.day = Number(t) : (this._d.setDate(s.MIN_DAY), this._i.day = !1);
|
|
477
477
|
else
|
|
478
478
|
return this._i.day === !1 ? this._d.getDate() : this._i.day;
|
|
479
479
|
return this;
|
|
480
|
-
},
|
|
480
|
+
}, E.fn.hours = function(t) {
|
|
481
481
|
if (arguments.length !== 0)
|
|
482
|
-
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >=
|
|
482
|
+
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_HOURS && Number(t) <= s.MAX_HOURS ? (this._d.setHours(Number(t)), this._i.hours = !1) : this._i.hours = Number(t) : (this._d.setHours(s.MIN_HOURS), this._i.hours = !1);
|
|
483
483
|
else
|
|
484
484
|
return this._i.hours === !1 ? this._d.getHours() : this._i.hours;
|
|
485
485
|
return this;
|
|
486
|
-
},
|
|
486
|
+
}, E.fn.minutes = function(t) {
|
|
487
487
|
if (arguments.length !== 0)
|
|
488
|
-
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >=
|
|
488
|
+
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_MINUTES && Number(t) <= s.MAX_MINUTES ? (this._d.setMinutes(Number(t)), this._i.minutes = !1) : this._i.minutes = Number(t) : (this._d.setMinutes(s.MIN_MINUTES), this._i.minutes = !1);
|
|
489
489
|
else
|
|
490
490
|
return this._i.minutes === !1 ? this._d.getMinutes() : this._i.minutes;
|
|
491
491
|
return this;
|
|
492
|
-
},
|
|
492
|
+
}, E.fn.seconds = function(t) {
|
|
493
493
|
if (arguments.length !== 0)
|
|
494
|
-
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >=
|
|
494
|
+
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_SECONDS && Number(t) <= s.MAX_SECONDS ? (this._d.setSeconds(Number(t)), this._i.seconds = !1) : this._i.seconds = Number(t) : (this._d.setSeconds(s.MIN_SECONDS), this._i.seconds = !1);
|
|
495
495
|
else
|
|
496
496
|
return this._i.seconds === !1 ? this._d.getSeconds() : this._i.seconds;
|
|
497
497
|
return this;
|
|
498
|
-
},
|
|
498
|
+
}, E.fn.milliseconds = function(t) {
|
|
499
499
|
if (arguments.length !== 0)
|
|
500
|
-
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >=
|
|
500
|
+
(typeof t == "number" || typeof t == "string") && !isNaN(Number(t)) ? Number(t) >= s.MIN_MILLISECONDS && Number(t) <= s.MAX_MILLISECONDS ? (this._d.setMilliseconds(Number(t)), this._i.milliseconds = !1) : this._i.milliseconds = Number(t) : (this._d.setMilliseconds(s.MIN_MILLISECONDS), this._i.milliseconds = !1);
|
|
501
501
|
else
|
|
502
502
|
return this._i.milliseconds === !1 ? this._d.getMilliseconds() : this._i.milliseconds;
|
|
503
503
|
return this;
|
|
504
|
-
},
|
|
505
|
-
var t = new Date(this.year(), 0, 1),
|
|
506
|
-
return Math.ceil(((
|
|
507
|
-
},
|
|
504
|
+
}, E.fn.week = function() {
|
|
505
|
+
var t = new Date(this.year(), 0, 1), n = s(this.utc()).hours(0).minutes(0).seconds(0).milliseconds(0).utc() * 1e3;
|
|
506
|
+
return Math.ceil(((n - t.getTime()) / 864e5 + t.getDay() + 1) / 7);
|
|
507
|
+
}, E.fn.set = function(t, n, l) {
|
|
508
508
|
if (this._i = {
|
|
509
509
|
year: !1,
|
|
510
510
|
month: !1,
|
|
@@ -513,16 +513,16 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
513
513
|
minutes: !1,
|
|
514
514
|
seconds: !1,
|
|
515
515
|
milliseconds: !1
|
|
516
|
-
}, t ===
|
|
516
|
+
}, t === r)
|
|
517
517
|
return this._d = /* @__PURE__ */ new Date(), this;
|
|
518
518
|
if (t instanceof Date)
|
|
519
519
|
return this._d = t, this;
|
|
520
520
|
if (typeof t == "number")
|
|
521
|
-
return this._d = new Date(t * (
|
|
522
|
-
if (typeof t == "object" && (t instanceof Array ? (this.day(
|
|
523
|
-
var
|
|
524
|
-
if (t ===
|
|
525
|
-
return
|
|
521
|
+
return this._d = new Date(t * (s.options("useMilliseconds") ? 1 : 1e3)), this;
|
|
522
|
+
if (typeof t == "object" && (t instanceof Array ? (this.day(s.MIN_DAY), this.year(t[0]), this.month(t[1]), this.day(t[2]), this.hours(t[3]), this.minutes(t[4]), this.seconds(t[5]), this.milliseconds(t[6])) : (this.day(s.MIN_DAY), this.year(t.year), this.month(t.month), this.day(t.day), this.hours(t.hours), this.minutes(t.minutes), this.seconds(t.seconds), this.milliseconds(t.milliseconds))), typeof t == "string") {
|
|
523
|
+
var f, L = [], _, T, J = [], Y = 0, U = 0, b, W, D = {}, k;
|
|
524
|
+
if (t === r)
|
|
525
|
+
return _ = o(this, l), _ === r && (this._i = {
|
|
526
526
|
year: -1,
|
|
527
527
|
month: -1,
|
|
528
528
|
day: -1,
|
|
@@ -530,26 +530,26 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
530
530
|
minutes: -1,
|
|
531
531
|
seconds: -1,
|
|
532
532
|
milliseconds: -1
|
|
533
|
-
}),
|
|
534
|
-
for (
|
|
535
|
-
if (
|
|
536
|
-
if (
|
|
537
|
-
switch (
|
|
533
|
+
}), _;
|
|
534
|
+
for (n === r && (n = s.detectFormat(t)); Y < n.length; ) {
|
|
535
|
+
if (n.charAt(Y) === "%") {
|
|
536
|
+
if (T = n.charAt(Y) + n.charAt(Y + 1), B[T] !== r) {
|
|
537
|
+
switch (b = 0, W = "", B[T].type) {
|
|
538
538
|
case "number":
|
|
539
|
-
for (;
|
|
540
|
-
|
|
539
|
+
for (; b < B[T].maxLength && U + b < t.length && !isNaN(Number(t.charAt(U + b))); )
|
|
540
|
+
W += t.charAt(U + b), b += 1;
|
|
541
541
|
break;
|
|
542
542
|
case "word":
|
|
543
|
-
for (;
|
|
544
|
-
|
|
543
|
+
for (; b < B[T].maxLength && U + b < t.length && /^[\u00BF-\u1FFF\u2C00-\uD7FF\w]+$/.test(t.charAt(U + b)); )
|
|
544
|
+
W += t.charAt(U + b), b += 1;
|
|
545
545
|
break;
|
|
546
546
|
case "string":
|
|
547
|
-
for (;
|
|
548
|
-
|
|
547
|
+
for (; b < B[T].maxLength && U + b < t.length; )
|
|
548
|
+
W += t.charAt(U + b), b += 1;
|
|
549
549
|
break;
|
|
550
550
|
}
|
|
551
|
-
if (
|
|
552
|
-
return
|
|
551
|
+
if (b < B[T].minLength)
|
|
552
|
+
return _ = o(this, l), _ === r && (this._i = {
|
|
553
553
|
year: -1,
|
|
554
554
|
month: -1,
|
|
555
555
|
day: -1,
|
|
@@ -557,11 +557,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
557
557
|
minutes: -1,
|
|
558
558
|
seconds: -1,
|
|
559
559
|
milliseconds: -1
|
|
560
|
-
}),
|
|
561
|
-
|
|
560
|
+
}), _;
|
|
561
|
+
L.push(T), J.push(W), b -= 1, U += b, Y += 1;
|
|
562
562
|
}
|
|
563
|
-
} else if (t.charAt(
|
|
564
|
-
return
|
|
563
|
+
} else if (t.charAt(U) !== n.charAt(Y))
|
|
564
|
+
return _ = o(this, l), _ === r && (this._i = {
|
|
565
565
|
year: -1,
|
|
566
566
|
month: -1,
|
|
567
567
|
day: -1,
|
|
@@ -569,34 +569,34 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
569
569
|
minutes: -1,
|
|
570
570
|
seconds: -1,
|
|
571
571
|
milliseconds: -1
|
|
572
|
-
}),
|
|
573
|
-
|
|
572
|
+
}), _;
|
|
573
|
+
Y += 1, U += 1;
|
|
574
574
|
}
|
|
575
|
-
for (
|
|
576
|
-
|
|
577
|
-
year:
|
|
578
|
-
month:
|
|
579
|
-
day:
|
|
580
|
-
hours:
|
|
581
|
-
minutes:
|
|
582
|
-
seconds:
|
|
575
|
+
for (f in L)
|
|
576
|
+
L.hasOwnProperty(f) && B.hasOwnProperty(L[f]) && (k = B[L[f]].parse(J[f]), D = {
|
|
577
|
+
year: k.year !== r ? k.year : D.year,
|
|
578
|
+
month: k.month !== r ? k.month : D.month,
|
|
579
|
+
day: k.day !== r ? k.day : D.day,
|
|
580
|
+
hours: k.hours !== r ? k.hours : D.hours,
|
|
581
|
+
minutes: k.minutes !== r ? k.minutes : D.minutes,
|
|
582
|
+
seconds: k.seconds !== r ? k.seconds : D.seconds
|
|
583
583
|
});
|
|
584
|
-
this.day(
|
|
584
|
+
this.day(s.MIN_DAY), this.year(D.year), this.month(D.month), this.day(D.day), this.hours(D.hours), this.minutes(D.minutes), this.seconds(D.seconds), this.milliseconds(D.milliseconds);
|
|
585
585
|
}
|
|
586
586
|
return this;
|
|
587
|
-
},
|
|
587
|
+
}, E.fn.leapYear = function() {
|
|
588
588
|
var t = this.year();
|
|
589
589
|
return t % 4 === 0 ? t % 100 === 0 ? t % 400 === 0 : !0 : !1;
|
|
590
|
-
},
|
|
591
|
-
return arguments.length !== 0 ? (this._d = new Date(Number(t) * (
|
|
592
|
-
},
|
|
593
|
-
return arguments.length !== 0 ? (this._d = new Date(Number(t) * (
|
|
594
|
-
},
|
|
590
|
+
}, E.fn.timestamp = function(t) {
|
|
591
|
+
return arguments.length !== 0 ? (this._d = new Date(Number(t) * (s.options("useMilliseconds") ? 1 : 1e3) + this._d.getTimezoneOffset() * 6e4), this) : s.options("useMilliseconds") ? this._d.getTime() - this._d.getTimezoneOffset() * 6e4 : Math.floor(this._d.getTime() / 1e3) - this._d.getTimezoneOffset() * 60;
|
|
592
|
+
}, E.fn.utc = function(t) {
|
|
593
|
+
return arguments.length !== 0 ? (this._d = new Date(Number(t) * (s.options("useMilliseconds") ? 1 : 1e3)), this) : s.options("useMilliseconds") ? this._d.getTime() : Math.floor(this._d.getTime() / 1e3);
|
|
594
|
+
}, E.fn.dayOfWeek = function(t) {
|
|
595
595
|
if (t === "long")
|
|
596
|
-
return
|
|
596
|
+
return I[this._d.getDay()];
|
|
597
597
|
if (t === "short")
|
|
598
|
-
return
|
|
599
|
-
if (t ===
|
|
598
|
+
return M[this._d.getDay()];
|
|
599
|
+
if (t === r)
|
|
600
600
|
return this._d.getDay();
|
|
601
601
|
if (t === 0 || t === "Sunday")
|
|
602
602
|
return this.calc({ day: -this.dayOfWeek() });
|
|
@@ -612,7 +612,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
612
612
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -2 : 5) - this.dayOfWeek() });
|
|
613
613
|
if (t === 6 || t === "Saturday")
|
|
614
614
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -1 : 6) - this.dayOfWeek() });
|
|
615
|
-
},
|
|
615
|
+
}, E.fn.timezone = function(t) {
|
|
616
616
|
switch (t) {
|
|
617
617
|
case "hours":
|
|
618
618
|
return Math.floor(this._d.getTimezoneOffset() / 60);
|
|
@@ -621,12 +621,12 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
621
621
|
default:
|
|
622
622
|
return this._d.getTimezoneOffset() * 60;
|
|
623
623
|
}
|
|
624
|
-
},
|
|
624
|
+
}, E.fn.get = function(t) {
|
|
625
625
|
switch (t) {
|
|
626
626
|
case "Date":
|
|
627
627
|
return new Date(
|
|
628
628
|
this.year(),
|
|
629
|
-
this.month() - (
|
|
629
|
+
this.month() - (s.options("monthFromZero") ? 0 : 1),
|
|
630
630
|
this.day(),
|
|
631
631
|
this.hours(),
|
|
632
632
|
this.minutes(),
|
|
@@ -636,7 +636,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
636
636
|
case "DateUTC":
|
|
637
637
|
return new Date(Date.UTC(
|
|
638
638
|
this.year(),
|
|
639
|
-
this.month() - (
|
|
639
|
+
this.month() - (s.options("monthFromZero") ? 0 : 1),
|
|
640
640
|
this.day(),
|
|
641
641
|
this.hours(),
|
|
642
642
|
this.minutes(),
|
|
@@ -670,540 +670,569 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : s(JSON.pars
|
|
|
670
670
|
timestamp: this.timestamp()
|
|
671
671
|
};
|
|
672
672
|
}
|
|
673
|
-
},
|
|
674
|
-
for (var
|
|
675
|
-
t.charAt(
|
|
673
|
+
}, E.fn.format = function(t) {
|
|
674
|
+
for (var n = 0, l = "", f; n < t.length; )
|
|
675
|
+
t.charAt(n) === "%" ? (f = t.charAt(n) + t.charAt(n + 1), B[f] !== r ? (l += B[f].format(this), n += 1) : l += "%") : l += t.charAt(n), n += 1;
|
|
676
676
|
return l;
|
|
677
|
-
},
|
|
677
|
+
}, E.fn.valid = function() {
|
|
678
678
|
return this._i.year === !1 && this._i.month === !1 && this._i.day === !1 && this._i.hours === !1 && this._i.minutes === !1 && this._i.seconds === !1 && this._i.milliseconds === !1;
|
|
679
|
-
},
|
|
679
|
+
}, E.fn.errors = function() {
|
|
680
680
|
return this._i;
|
|
681
|
-
},
|
|
682
|
-
var l = this.timestamp(),
|
|
683
|
-
switch (
|
|
681
|
+
}, E.fn.between = function(t, n) {
|
|
682
|
+
var l = this.timestamp(), f = t.timestamp();
|
|
683
|
+
switch (n) {
|
|
684
684
|
case "year":
|
|
685
|
-
return Math.floor((
|
|
685
|
+
return Math.floor((f - l) / 31556952);
|
|
686
686
|
case "month":
|
|
687
|
-
return Math.floor((
|
|
687
|
+
return Math.floor((f - l) / 2629746);
|
|
688
688
|
case "day":
|
|
689
|
-
return Math.floor((
|
|
689
|
+
return Math.floor((f - l) / 86400);
|
|
690
690
|
case "hours":
|
|
691
|
-
return Math.floor((
|
|
691
|
+
return Math.floor((f - l) / 3600);
|
|
692
692
|
case "minutes":
|
|
693
|
-
return Math.floor((
|
|
693
|
+
return Math.floor((f - l) / 60);
|
|
694
694
|
case "seconds":
|
|
695
|
-
return
|
|
695
|
+
return f - l;
|
|
696
696
|
default:
|
|
697
|
-
return
|
|
697
|
+
return r;
|
|
698
698
|
}
|
|
699
|
-
},
|
|
700
|
-
return t.year !==
|
|
701
|
-
},
|
|
702
|
-
return new
|
|
703
|
-
},
|
|
704
|
-
if (t ===
|
|
705
|
-
return
|
|
706
|
-
if (
|
|
707
|
-
if (
|
|
708
|
-
return
|
|
709
|
-
|
|
699
|
+
}, E.fn.calc = function(t) {
|
|
700
|
+
return t.year !== r && this._d.setFullYear(this._d.getFullYear() + t.year), t.month !== r && this._d.setMonth(this._d.getMonth() + t.month), t.day !== r && this._d.setDate(this._d.getDate() + t.day), t.hours !== r && this._d.setHours(this._d.getHours() + t.hours), t.minutes !== r && this._d.setMinutes(this._d.getMinutes() + t.minutes), t.seconds !== r && this._d.setSeconds(this._d.getSeconds() + t.seconds), t.milliseconds !== r && this._d.setMilliseconds(this._d.getMilliseconds() + t.milliseconds), this;
|
|
701
|
+
}, s = function(t, n, l) {
|
|
702
|
+
return new E(t, n, l);
|
|
703
|
+
}, s.MIN_YEAR = 1e3, s.MAX_YEAR = 3e3, s.MIN_MONTH = 1, s.MAX_MONTH = 12, s.MIN_DAY = 1, s.MAX_DAY_IN_MONTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], s.MIN_DAY_OF_WEEK = 0, s.MAX_DAY_OF_WEEK = 6, s.MIN_HOURS = 0, s.MAX_HOURS = 23, s.MIN_MINUTES = 0, s.MAX_MINUTES = 59, s.MIN_SECONDS = 0, s.MAX_SECONDS = 59, s.MIN_MILLISECONDS = 0, s.MAX_MILLISECONDS = 999, s.VERSION = "0.2.18", s.options = function(t, n) {
|
|
704
|
+
if (t === r)
|
|
705
|
+
return tt;
|
|
706
|
+
if (tt.hasOwnProperty(t)) {
|
|
707
|
+
if (n === r)
|
|
708
|
+
return tt[t];
|
|
709
|
+
tt[t] = n, t === "monthFromZero" && (s.MIN_MONTH = n ? 0 : 1, s.MAX_MONTH = n ? 11 : 12);
|
|
710
710
|
}
|
|
711
|
-
return
|
|
712
|
-
},
|
|
713
|
-
return
|
|
714
|
-
},
|
|
715
|
-
var
|
|
716
|
-
if (typeof t.dateFrom != "number" && (t.dateFrom instanceof
|
|
711
|
+
return r;
|
|
712
|
+
}, s.noConflict = function() {
|
|
713
|
+
return i.tempus = u, s;
|
|
714
|
+
}, s.generate = function(t) {
|
|
715
|
+
var n, l, f, L, _, T, J, Y;
|
|
716
|
+
if (typeof t.dateFrom != "number" && (t.dateFrom instanceof E ? n = t.dateFrom.utc() : n = s(t.dateFrom, t.formatFrom).utc()), typeof t.dateTo != "number" && (t.dateTo instanceof E ? l = t.dateTo.utc() : l = s(t.dateTo, t.formatTo !== r ? t.formatTo : t.formatFrom).utc()), typeof t.period == "number" ? _ = {
|
|
717
717
|
year: 0,
|
|
718
718
|
month: 0,
|
|
719
719
|
day: 0,
|
|
720
720
|
hours: 0,
|
|
721
721
|
minutes: 0,
|
|
722
722
|
seconds: t.period
|
|
723
|
-
} : typeof t.period == "string" ?
|
|
723
|
+
} : typeof t.period == "string" ? _ = {
|
|
724
724
|
year: t.period === "year" ? 1 : 0,
|
|
725
725
|
month: t.period === "month" ? 1 : 0,
|
|
726
726
|
day: t.period === "day" ? 1 : 0,
|
|
727
727
|
hours: t.period === "hours" ? 1 : 0,
|
|
728
728
|
minutes: t.period === "minutes" ? 1 : 0,
|
|
729
729
|
seconds: t.period === "seconds" ? 1 : 0
|
|
730
|
-
} : typeof t.period == "object" && (
|
|
731
|
-
year: t.period.year !==
|
|
732
|
-
month: t.period.month !==
|
|
733
|
-
day: t.period.day !==
|
|
734
|
-
hours: t.period.hours !==
|
|
735
|
-
minutes: t.period.minutes !==
|
|
736
|
-
seconds: t.period.seconds !==
|
|
737
|
-
}), t.groupBy ===
|
|
738
|
-
return t.asObject === !0 ? t.format !==
|
|
739
|
-
}, t.groupBy !==
|
|
740
|
-
var
|
|
741
|
-
year:
|
|
742
|
-
month:
|
|
743
|
-
day:
|
|
744
|
-
hours:
|
|
745
|
-
minutes:
|
|
746
|
-
seconds:
|
|
747
|
-
milliseconds:
|
|
730
|
+
} : typeof t.period == "object" && (_ = {
|
|
731
|
+
year: t.period.year !== r ? t.period.year : 0,
|
|
732
|
+
month: t.period.month !== r ? t.period.month : 0,
|
|
733
|
+
day: t.period.day !== r ? t.period.day : 0,
|
|
734
|
+
hours: t.period.hours !== r ? t.period.hours : 0,
|
|
735
|
+
minutes: t.period.minutes !== r ? t.period.minutes : 0,
|
|
736
|
+
seconds: t.period.seconds !== r ? t.period.seconds : 0
|
|
737
|
+
}), t.groupBy === r ? T = t.asObject === !0 ? {} : [] : (T = [], T.push([]), J = s(n).get()[t.groupBy]), Y = function(W, D, k) {
|
|
738
|
+
return t.asObject === !0 ? t.format !== r ? W[s(D).format(t.format)] = {} : W[s(D).format("%F %H:%M:%S")] = {} : t.format !== r ? W.push(k ? null : s(D).format(t.format)) : W.push(k ? null : s(D)), W;
|
|
739
|
+
}, t.groupBy !== r && t.fillNulls) {
|
|
740
|
+
var U = {
|
|
741
|
+
year: _.year ? -_.year : r,
|
|
742
|
+
month: _.month ? -_.month : r,
|
|
743
|
+
day: _.day ? -_.day : r,
|
|
744
|
+
hours: _.hours ? -_.hours : r,
|
|
745
|
+
minutes: _.minutes ? -_.minutes : r,
|
|
746
|
+
seconds: _.seconds ? -_.seconds : r,
|
|
747
|
+
milliseconds: _.milliseconds ? -_.milliseconds : r
|
|
748
748
|
};
|
|
749
|
-
for (
|
|
750
|
-
|
|
749
|
+
for (f = s(n).calc(U).utc(); s(f).get()[t.groupBy] === J; )
|
|
750
|
+
Y(T[T.length - 1], f, !0), f = s(f).calc(U).utc();
|
|
751
751
|
if (t.groupBy === "week") {
|
|
752
|
-
var
|
|
753
|
-
for (
|
|
754
|
-
|
|
752
|
+
var b = s(n).dayOfWeek();
|
|
753
|
+
for (f = s(n).dayOfWeek(0).utc(); T[0].length < b && f < n; )
|
|
754
|
+
Y(T[T.length - 1], f, !0), f = s(f).calc(_).utc();
|
|
755
755
|
}
|
|
756
756
|
}
|
|
757
|
-
for (;
|
|
758
|
-
t.groupBy ===
|
|
759
|
-
if (t.groupBy !==
|
|
760
|
-
for (
|
|
761
|
-
|
|
762
|
-
return
|
|
763
|
-
},
|
|
757
|
+
for (; n <= l; )
|
|
758
|
+
t.groupBy === r ? Y(T, n) : s(n).get()[t.groupBy] === J ? Y(T[T.length - 1], n) : (T.push([]), Y(T[T.length - 1], n), J = s(n).get()[t.groupBy]), n = s(n).calc(_).utc();
|
|
759
|
+
if (t.groupBy !== r && t.fillNulls)
|
|
760
|
+
for (L = s(l).calc(_).utc(); s(L).get()[t.groupBy] === J; )
|
|
761
|
+
Y(T[T.length - 1], L, !0), L = s(L).calc(_).utc();
|
|
762
|
+
return T;
|
|
763
|
+
}, s.monthNames = function(t) {
|
|
764
764
|
switch (t) {
|
|
765
765
|
case "long":
|
|
766
|
-
return
|
|
766
|
+
return P;
|
|
767
767
|
default:
|
|
768
|
-
return
|
|
768
|
+
return w;
|
|
769
769
|
}
|
|
770
|
-
},
|
|
770
|
+
}, s.dayNames = function(t) {
|
|
771
771
|
switch (t) {
|
|
772
772
|
case "long":
|
|
773
|
-
return
|
|
773
|
+
return I;
|
|
774
774
|
default:
|
|
775
|
-
return
|
|
775
|
+
return M;
|
|
776
776
|
}
|
|
777
|
-
},
|
|
778
|
-
if (t !==
|
|
779
|
-
|
|
777
|
+
}, s.lang = function(t) {
|
|
778
|
+
if (t !== r)
|
|
779
|
+
a = t, c[a] === r && (a = "en"), P = y(), w = O(), I = R(), M = G();
|
|
780
780
|
else
|
|
781
|
-
return
|
|
782
|
-
return
|
|
783
|
-
},
|
|
784
|
-
return Object.keys(
|
|
785
|
-
},
|
|
781
|
+
return a;
|
|
782
|
+
return r;
|
|
783
|
+
}, s.availableLangs = function() {
|
|
784
|
+
return Object.keys(c);
|
|
785
|
+
}, s.registerFormat = function(t, n, l, f, L, _) {
|
|
786
786
|
B[t] = {
|
|
787
|
-
format:
|
|
787
|
+
format: n,
|
|
788
788
|
parse: l,
|
|
789
|
-
minLength:
|
|
790
|
-
maxLength:
|
|
791
|
-
type:
|
|
789
|
+
minLength: f,
|
|
790
|
+
maxLength: L,
|
|
791
|
+
type: _
|
|
792
792
|
};
|
|
793
|
-
},
|
|
793
|
+
}, s.unregisterFormat = function(t) {
|
|
794
794
|
delete B[t];
|
|
795
|
-
},
|
|
796
|
-
var
|
|
797
|
-
return
|
|
795
|
+
}, s.detectFormat = function(t) {
|
|
796
|
+
var n, l, f;
|
|
797
|
+
return n = m(t, 0), n !== "" && (f = 10), l = t.charAt(f), (l === "T" || l === " ") && (n += l, f += 1), n += h(t, f), n;
|
|
798
798
|
}, d = {
|
|
799
|
-
TempusDate:
|
|
800
|
-
},
|
|
801
|
-
if (
|
|
799
|
+
TempusDate: E
|
|
800
|
+
}, s.classes = function(t, n) {
|
|
801
|
+
if (n === r)
|
|
802
802
|
return d[t];
|
|
803
|
-
d[t] =
|
|
804
|
-
},
|
|
805
|
-
typeof t == "object" ?
|
|
806
|
-
|
|
807
|
-
}, function(
|
|
803
|
+
d[t] = n;
|
|
804
|
+
}, s.loadTranslations = function(t) {
|
|
805
|
+
typeof t == "object" ? c = t : typeof t == "string" && q(t, function(n) {
|
|
806
|
+
c = n;
|
|
807
|
+
}, function(n) {
|
|
808
808
|
});
|
|
809
|
-
},
|
|
810
|
-
}).call(
|
|
811
|
-
})(
|
|
812
|
-
var
|
|
813
|
-
const
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
O(this, ct);
|
|
818
|
-
O(this, mt);
|
|
819
|
-
O(this, gt);
|
|
820
|
-
O(this, ut);
|
|
821
|
-
O(this, Et);
|
|
822
|
-
/* batchChunk для batchUpdateField */
|
|
823
|
-
O(this, Tt);
|
|
824
|
-
O(this, Rt);
|
|
825
|
-
O(this, kt);
|
|
826
|
-
O(this, Pt);
|
|
827
|
-
O(this, St);
|
|
828
|
-
O(this, pt);
|
|
829
|
-
O(this, Mt);
|
|
830
|
-
O(this, ft);
|
|
831
|
-
O(this, Lt);
|
|
832
|
-
O(this, Wt);
|
|
833
|
-
O(this, ot);
|
|
834
|
-
O(this, Nt);
|
|
835
|
-
O(this, Ot);
|
|
836
|
-
/* преобразование стандартного вида запроса для batch в вид запроса для batchUpdateField */
|
|
837
|
-
O(this, Jt);
|
|
838
|
-
O(this, v, null);
|
|
839
|
-
O(this, dt, null);
|
|
840
|
-
O(this, q, []);
|
|
841
|
-
O(this, U, {});
|
|
842
|
-
O(this, Q, 50);
|
|
843
|
-
O(this, Z, 50);
|
|
844
|
-
O(this, $, !0);
|
|
845
|
-
O(this, tt, null);
|
|
846
|
-
O(this, F, null);
|
|
847
|
-
O(this, K, null);
|
|
848
|
-
O(this, Ft, 100);
|
|
849
|
-
O(this, nt, "no");
|
|
850
|
-
O(this, k, !1);
|
|
851
|
-
O(this, et, !1);
|
|
852
|
-
O(this, at, !1);
|
|
853
|
-
C(this, "errors", {});
|
|
854
|
-
C(this, "answerData", {});
|
|
855
|
-
C(this, "timeLimit", !1);
|
|
856
|
-
g(this, v, e), g(this, dt, A);
|
|
857
|
-
}
|
|
858
|
-
get serial() {
|
|
859
|
-
return h(this, k);
|
|
809
|
+
}, a = (g.language || g.systemLanguage || g.userLanguage || "en").substr(0, 2).toLowerCase(), c[a] === r && (a = "en"), P = y(), w = O(), I = R(), M = G(), N.exports && (e = N.exports = s), e.tempus = s;
|
|
810
|
+
}).call(yt);
|
|
811
|
+
})(lt, lt.exports);
|
|
812
|
+
var Tt = lt.exports;
|
|
813
|
+
const et = /* @__PURE__ */ Et(Tt);
|
|
814
|
+
class j {
|
|
815
|
+
constructor(e) {
|
|
816
|
+
this.callBatch = e, this.result = {}, this.errors = {}, this.limit = 50, this.canContinue = !0, this.progressCall = "", this.limitCall = "", this.progressData = "", this.progressTimer = "", this.progressDelay = 100, this.oldPercent = "no", this.chunkRate = 1, this.totalProgress = 0, this.skipList = /* @__PURE__ */ new Set();
|
|
860
817
|
}
|
|
861
|
-
|
|
862
|
-
|
|
818
|
+
/**
|
|
819
|
+
* Извлечение данных из ответа API с учетом различных форматов
|
|
820
|
+
* @param {Object} data - Ответ от API
|
|
821
|
+
* @returns {any} Данные из ответа
|
|
822
|
+
*/
|
|
823
|
+
getData(e) {
|
|
824
|
+
return (e == null ? void 0 : e.items) ?? (e == null ? void 0 : e.tasks) ?? (e == null ? void 0 : e.types) ?? (e == null ? void 0 : e.type) ?? (e == null ? void 0 : e.fields) ?? (e == null ? void 0 : e.workgroups) ?? e;
|
|
863
825
|
}
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
826
|
+
/**
|
|
827
|
+
* Вычисление текущего прогресса выполнения batch запросов
|
|
828
|
+
* @returns {{percent: number, allCount: number, allTotal: number}}
|
|
829
|
+
*/
|
|
830
|
+
get progressPercent() {
|
|
831
|
+
let e = 0;
|
|
832
|
+
if (!this.progressData)
|
|
833
|
+
return { percent: Math.round(e), allCount: 0, allTotal: 0 };
|
|
834
|
+
let r = 0, i = 0;
|
|
835
|
+
return Object.values(this.progressData).forEach((A) => {
|
|
836
|
+
const { total: o, count: h } = A;
|
|
837
|
+
r += o ?? 0, i += h ?? 0;
|
|
838
|
+
}), r ? e = i / r * 100 * this.chunkRate + this.totalProgress : i === 0 && r === 0 ? e = 100 * this.chunkRate + this.totalProgress : e = 100, { percent: Math.round(e), allCount: i, allTotal: r };
|
|
868
839
|
}
|
|
869
|
-
|
|
870
|
-
|
|
840
|
+
/**
|
|
841
|
+
* Обновление данных прогресса выполнения
|
|
842
|
+
* @param {Object} params
|
|
843
|
+
* @param {string} params.key - Ключ запроса
|
|
844
|
+
* @param {Object} params.value - Значение ответа от API
|
|
845
|
+
* @param {string} params.type - Тип обработки ('count' или undefined)
|
|
846
|
+
*/
|
|
847
|
+
setProgressData({ key: e, value: r, type: i }) {
|
|
848
|
+
const A = this.getData(r.data()), o = Array.isArray(A) ? A.length : 0;
|
|
849
|
+
let h = r.total() || o;
|
|
850
|
+
i === "count" && (h = o);
|
|
851
|
+
let m = 1;
|
|
852
|
+
A && (m = o), this.progressCall && (this.progressData || (this.progressData = {}), this.progressData[e] && this.progressData[e].count && (m += this.progressData[e].count), this.progressData[e] ? this.progressData[e].count = m : this.progressData[e] = { total: h, count: m }, this.progressTimer || (this.progressTimer = setInterval(() => {
|
|
853
|
+
const { percent: u, allCount: s, allTotal: d } = this.progressPercent;
|
|
854
|
+
(this.oldPercent === "no" || this.oldPercent < this.progressPercent.percent) && (this.progressCall({
|
|
855
|
+
data: this.progressData,
|
|
856
|
+
percent: u,
|
|
857
|
+
allCount: s,
|
|
858
|
+
allTotal: d
|
|
859
|
+
}), this.oldPercent = this.progressPercent.percent), u >= 100 && this.clearProgressData();
|
|
860
|
+
}, this.progressDelay)));
|
|
871
861
|
}
|
|
872
|
-
|
|
873
|
-
|
|
862
|
+
/**
|
|
863
|
+
* Задержка между запросами
|
|
864
|
+
* @returns {Promise<void>}
|
|
865
|
+
*/
|
|
866
|
+
delay() {
|
|
867
|
+
return new Promise((e) => setTimeout(e, 500));
|
|
874
868
|
}
|
|
869
|
+
/**
|
|
870
|
+
* Остановка выполнения batch запросов
|
|
871
|
+
*/
|
|
875
872
|
stop() {
|
|
876
|
-
|
|
873
|
+
this.canContinue = !1;
|
|
877
874
|
}
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
875
|
+
/**
|
|
876
|
+
* Очистка данных прогресса
|
|
877
|
+
*/
|
|
878
|
+
clearProgressData() {
|
|
879
|
+
clearInterval(this.progressTimer), this.progressTimer = "", this.progressData = "", this.progressCall = "", this.limitCall = "", this.oldPercent = "no";
|
|
880
|
+
}
|
|
881
|
+
/** Основная функция при вызове batch
|
|
882
|
+
* @param {Array/Object} request - Массив/объект методов
|
|
883
|
+
* @param {Function} progressCall - Функция получающая данные выполнения батча
|
|
884
|
+
* @returns {Promise}
|
|
885
|
+
*/
|
|
886
|
+
async batch(e, r, i) {
|
|
887
|
+
this.progressTimer && this.clearProgressData(), r && (this.progressCall = r), i && (this.limitCall = i), this.canContinue = !0, this.result = {}, this.errors = {};
|
|
888
|
+
const A = {};
|
|
889
|
+
this.chunkRate = (1 / Math.ceil(Object.keys(e).length / this.limit)).toFixed(5);
|
|
890
|
+
let o = {}, h = 0;
|
|
891
|
+
for (const [m, u] of Object.entries(e)) {
|
|
892
|
+
if (!this.canContinue)
|
|
893
|
+
break;
|
|
894
|
+
const s = this.arrayChunk(u);
|
|
895
|
+
if (!s) {
|
|
896
|
+
h++;
|
|
897
|
+
continue;
|
|
896
898
|
}
|
|
897
|
-
|
|
899
|
+
o[m] = s, (Object.keys(o).length >= 50 || h + 1 === Object.keys(e).length) && (await this.batchChunk(o), Object.entries(this.result).forEach(([d, g]) => {
|
|
900
|
+
A[d] = g;
|
|
901
|
+
}), this.totalProgress = Math.round(
|
|
902
|
+
h / Object.keys(e).length * 100
|
|
903
|
+
), o = {}), h++;
|
|
898
904
|
}
|
|
905
|
+
return Object.entries(this.errors).length && (A.errorsList = this.errors), r && r({ percent: 100 }), Promise.resolve(A);
|
|
899
906
|
}
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
}
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
907
|
+
/**
|
|
908
|
+
* Аналогично this.batch, но возвращает количество элементов
|
|
909
|
+
* Работает корректно как для методов С полем total (crm.deal.list),
|
|
910
|
+
* так и для методов БЕЗ поля total (tasks.task.list)
|
|
911
|
+
*
|
|
912
|
+
* @param {Object} requestList - Объект с методами для выполнения
|
|
913
|
+
* @param {Function} progressCall - Callback для отслеживания прогресса
|
|
914
|
+
* @param {Function} limitCall - Callback при превышении лимитов
|
|
915
|
+
* @returns {Promise<Object>} Объект с количеством элементов для каждого ключа
|
|
916
|
+
*/
|
|
917
|
+
async batchTotalCount(e, r, i) {
|
|
918
|
+
this.progressTimer && this.clearProgressData(), r && (this.progressCall = r), i && (this.limitCall = i), this.canContinue = !0, this.result = {}, this.errors = {};
|
|
919
|
+
const A = {};
|
|
920
|
+
this.chunkRate = (1 / Math.ceil(Object.keys(e).length / this.limit)).toFixed(5);
|
|
921
|
+
let o = {}, h = 0;
|
|
922
|
+
for (const [m, u] of Object.entries(e)) {
|
|
923
|
+
if (!this.canContinue)
|
|
924
|
+
break;
|
|
925
|
+
const s = this.arrayChunk(u);
|
|
926
|
+
if (!s) {
|
|
927
|
+
h++;
|
|
928
|
+
continue;
|
|
918
929
|
}
|
|
919
|
-
|
|
930
|
+
o[m] = s, (Object.keys(o).length >= 50 || h + 1 === Object.keys(e).length) && (await this.batchChunk(o, "count"), Object.entries(this.result).forEach(([d, g]) => {
|
|
931
|
+
A[d] = g;
|
|
932
|
+
}), this.totalProgress = Math.round(
|
|
933
|
+
h / Object.keys(e).length * 100
|
|
934
|
+
), o = {}), h++;
|
|
920
935
|
}
|
|
936
|
+
return Object.entries(this.errors).length && (A.errorsList = this.errors), r && r({ percent: 100 }), Promise.resolve(A);
|
|
921
937
|
}
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
if (
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
938
|
+
/** Валидация запросов
|
|
939
|
+
* Чтобы не перегружать Битрикс сервера запросами с start - добавляем нужные поля в параметры
|
|
940
|
+
* Так же переделываем некоторые запросы в нужный вид (Для task-методов)
|
|
941
|
+
* @param {Array/Object} request - Массив/объект методов
|
|
942
|
+
*/
|
|
943
|
+
arrayChunk(e) {
|
|
944
|
+
let r = "", i = {};
|
|
945
|
+
if (Array.isArray(e) ? [r] = e : (r = e.method, i = e.params), this.skipList.has(r))
|
|
946
|
+
return !1;
|
|
947
|
+
if ((r.includes("list") || r === "user.get") && r !== "task.item.list") {
|
|
948
|
+
if (!i)
|
|
949
|
+
i = {
|
|
950
|
+
order: { ID: "ASC", id: "ASC" }
|
|
951
|
+
};
|
|
952
|
+
else {
|
|
953
|
+
r === "tasks.task.list" ? (i.order || (i.order = {}), i.order.ID = "asc") : r === "user.get" ? (i.sort || (i.sort = "ID"), i.order || (i.order = "ASC")) : i.order = { ID: "ASC", id: "ASC" }, Array.isArray(i.select) && !i.select.includes("ID") && i.select.push("ID");
|
|
954
|
+
const A = r === "user.get" ? i.FILTER : i.filter;
|
|
955
|
+
typeof A == "object" && A !== null && !Array.isArray(A) && Object.entries(A).forEach(([o, h]) => {
|
|
956
|
+
(i.start === void 0 || i.start !== -1) && ["id", "ID"].includes(o) && (typeof h == "string" || Array.isArray(h) && h.length <= 50) && (i.start = -1);
|
|
957
|
+
});
|
|
942
958
|
}
|
|
943
|
-
|
|
959
|
+
r === "crm.type.list" && i.order && delete i.order.ID;
|
|
944
960
|
}
|
|
961
|
+
if (r === "task.item.list")
|
|
962
|
+
if (!i)
|
|
963
|
+
i = [{ ID: "ASC" }, [""], [""], ["ID"]];
|
|
964
|
+
else {
|
|
965
|
+
Array.isArray(i[0]) && (i[0] = {});
|
|
966
|
+
const [A, o, h, m] = i;
|
|
967
|
+
A.ID = "ASC", m[0] !== "" && m.includes("ID") || m.push("ID");
|
|
968
|
+
}
|
|
969
|
+
return { method: r, params: i };
|
|
945
970
|
}
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
this.errors[d] = { error: N, method: b }, f += 1;
|
|
988
|
-
}
|
|
989
|
-
if (y != null && y.answer && Object.keys(y.answer).length) {
|
|
990
|
-
for (let [b, M] of Object.entries(y.answer))
|
|
991
|
-
b != "result" && M && (u[b] = M);
|
|
992
|
-
Object.keys(u).length && (this.answerData[d] = u);
|
|
993
|
-
}
|
|
994
|
-
const Y = _(this, ot, yt).call(this, y.data()), W = Array.isArray(Y) ? Y.length : 0, w = _(this, Nt, wt).call(this, y.total(), W);
|
|
995
|
-
if (Array.isArray(Y) ? h(this, U)[d] = Y : typeof Y == "object" && Y !== null && Object.keys(Y).length === 0 ? h(this, U)[d] = [] : h(this, U)[d] = Y, c += w, n || _(this, gt, qt).call(this, { key: d, value: y }), w > h(this, Q) && w > W) {
|
|
996
|
-
const b = Math.ceil(w / h(this, Q)) - 1, M = Array.from({ length: b });
|
|
997
|
-
a.push([d, o[d], M]);
|
|
971
|
+
/** Выполняет первичный запрос с массивом методов
|
|
972
|
+
* При наличии более 50 элементов в нем, подготоваливаем данные и передаем в this.batchPayload
|
|
973
|
+
* @param {Array} chunk - Массив с методами
|
|
974
|
+
* @param {Array} query - Тот же массив с методами
|
|
975
|
+
* @returns {Object} Объект с результатами запросов
|
|
976
|
+
*/
|
|
977
|
+
async batchChunk(e, r) {
|
|
978
|
+
return new Promise((i) => {
|
|
979
|
+
const A = [];
|
|
980
|
+
let o;
|
|
981
|
+
this.callBatch(e, async (h) => {
|
|
982
|
+
var m, u, s, d, g, a, c;
|
|
983
|
+
for (const [y, O] of Object.entries(h)) {
|
|
984
|
+
if (!this.canContinue)
|
|
985
|
+
return;
|
|
986
|
+
if (O.error())
|
|
987
|
+
switch (this.errors[y] = ((u = (m = O.error()) == null ? void 0 : m.ex) == null ? void 0 : u.error) ?? ((d = (s = O.error()) == null ? void 0 : s.ex) == null ? void 0 : d.error_description) ?? ((g = O.error()) == null ? void 0 : g.toString()) ?? "Неизвестная ошибка", o = !0, ((c = (a = O.error()) == null ? void 0 : a.ex) == null ? void 0 : c.error) ?? "") {
|
|
988
|
+
case "OPERATION_TIME_LIMIT":
|
|
989
|
+
this.skipList.add(e[y].method), this.limitCall && this.limitCall(y);
|
|
990
|
+
break;
|
|
991
|
+
case "QUERY_LIMIT_EXCEEDED":
|
|
992
|
+
this.canContinue = !1;
|
|
993
|
+
break;
|
|
994
|
+
case "ACCESS_DENIED":
|
|
995
|
+
this.skipList.add(e[y].method);
|
|
996
|
+
break;
|
|
997
|
+
}
|
|
998
|
+
const R = this.getData(O.data()), G = Array.isArray(R) ? R.length : 0, P = typeof O.total == "function" && O.total() !== void 0, w = P ? O.total() : G;
|
|
999
|
+
r === "count" ? this.result[y] ? this.result[y] += G : this.result[y] = w : this.result[y] = R, this.setProgressData({ key: y, value: O, type: r });
|
|
1000
|
+
const I = r === "count" ? !P && G === this.limit : w > this.limit && w > G;
|
|
1001
|
+
if (!this.canContinue || I) {
|
|
1002
|
+
let M = e[y];
|
|
1003
|
+
if (Array.isArray(M)) {
|
|
1004
|
+
const [q, B = {}] = M;
|
|
1005
|
+
M = [q, B];
|
|
1006
|
+
} else {
|
|
1007
|
+
const { method: q, params: B = {} } = M;
|
|
1008
|
+
M = [q, B];
|
|
1009
|
+
}
|
|
1010
|
+
A.push([y, M, w]);
|
|
1011
|
+
}
|
|
998
1012
|
}
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
}
|
|
1003
|
-
let r = _(this, Jt, le).call(this, e);
|
|
1004
|
-
return new Promise((o) => {
|
|
1005
|
-
let a = 0;
|
|
1006
|
-
h(this, v).call(this, "batch", r, (f) => {
|
|
1007
|
-
var y, u, N, Y, W, w;
|
|
1008
|
-
let c = ((u = (y = f == null ? void 0 : f.answer) == null ? void 0 : y.result) == null ? void 0 : u.result) ?? null, i = ((Y = (N = f == null ? void 0 : f.answer) == null ? void 0 : N.result) == null ? void 0 : Y.result_error) ?? null, d = ((w = (W = f == null ? void 0 : f.answer) == null ? void 0 : W.result) == null ? void 0 : w.result_time) ?? null;
|
|
1009
|
-
(c || Object.keys(c).length) && Object.entries(c).forEach(([b, M]) => {
|
|
1010
|
-
this.answerData[b] = M;
|
|
1011
|
-
}), (i || Object.keys(i).length) && Object.entries(i).forEach(([b, M]) => {
|
|
1012
|
-
var J, it;
|
|
1013
|
-
let X = ((J = e[b]) == null ? void 0 : J.method) ?? null, x = ((it = e[b]) == null ? void 0 : it.params) ?? null;
|
|
1014
|
-
this.errors[b] = {
|
|
1015
|
-
error: M,
|
|
1016
|
-
method: X,
|
|
1017
|
-
params: x
|
|
1018
|
-
}, a += 1;
|
|
1019
|
-
}), (d || Object.keys(d).length) && Object.entries(d).forEach(([b, M]) => {
|
|
1020
|
-
((M == null ? void 0 : M.operating) ?? 0) >= 475 && (this.timeLimit = !0);
|
|
1021
|
-
}), a > 0 && _(this, Ot, Ct).call(this), o(this.answerData);
|
|
1022
|
-
});
|
|
1023
|
-
});
|
|
1024
|
-
}, Rt = new WeakSet(), ee = function(e) {
|
|
1025
|
-
return new Promise((A) => {
|
|
1026
|
-
const n = _(this, Lt, re).call(this, e);
|
|
1027
|
-
let r = 0;
|
|
1028
|
-
h(this, v).call(this, n, (o) => {
|
|
1029
|
-
Object.entries(o).forEach(([a, f]) => {
|
|
1030
|
-
const c = f.error();
|
|
1031
|
-
c && (this.errors[a] = c, r += 1);
|
|
1032
|
-
const i = _(this, ot, yt).call(this, f.data()), d = Array.isArray(i) ? i.length : 0, y = _(this, Nt, wt).call(this, f.total(), d);
|
|
1033
|
-
h(this, U)[a] = y;
|
|
1034
|
-
}), r > 0 && _(this, Ot, Ct).call(this), A(_(this, ft, Gt).call(this));
|
|
1035
|
-
});
|
|
1036
|
-
});
|
|
1037
|
-
}, kt = new WeakSet(), ae = function(e) {
|
|
1038
|
-
let A = [];
|
|
1039
|
-
e.forEach(([n, r, o]) => {
|
|
1040
|
-
o.forEach((a, f) => {
|
|
1041
|
-
const c = f + 1, i = h(this, Q) * c, y = [[n, c].join("_"), _(this, Wt, he).call(this, r, i)];
|
|
1042
|
-
A.length === h(this, Q) ? (h(this, q).push(A), A = [y]) : A.push(y);
|
|
1043
|
-
});
|
|
1044
|
-
}), A.length && h(this, q).push(A);
|
|
1045
|
-
}, Pt = new WeakSet(), oe = function() {
|
|
1046
|
-
const e = [], A = [], n = (r) => {
|
|
1047
|
-
Object.entries(r).forEach(([o, a]) => {
|
|
1048
|
-
const [f] = o.split("_"), c = _(this, ot, yt).call(this, a.data());
|
|
1049
|
-
Array.isArray(c) && h(this, U)[f].push(...c), _(this, gt, qt).call(this, { key: f, value: a });
|
|
1013
|
+
o > 0 && this.errorLogger(), A.length ? await this.batchPayload(A, r).then(
|
|
1014
|
+
() => i(this.result)
|
|
1015
|
+
) : i(this.result);
|
|
1016
|
+
});
|
|
1050
1017
|
});
|
|
1051
|
-
}
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
}
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
}
|
|
1085
|
-
|
|
1086
|
-
|
|
1018
|
+
}
|
|
1019
|
+
/** Функция для запроса списочных методов
|
|
1020
|
+
* @param {Array} payloadList - Массив с подмассивами списочных методов
|
|
1021
|
+
* @param {String} type - Тип обработки результатов ('count' или undefined)
|
|
1022
|
+
*/
|
|
1023
|
+
async batchPayload(e, r) {
|
|
1024
|
+
const i = /* @__PURE__ */ new Map(), A = (u, s, d, g) => {
|
|
1025
|
+
let a = "ID";
|
|
1026
|
+
this.result[u][this.result[u].length - 1].ID || (a = "id");
|
|
1027
|
+
let c = `${a}`;
|
|
1028
|
+
if (JSON.stringify(g[1]).toLocaleLowerCase().includes('"id":"desc"') ? c = "<" + c : c = ">" + c, s === 1 || d.length === 0)
|
|
1029
|
+
return {
|
|
1030
|
+
field: c,
|
|
1031
|
+
id: this.result[u][this.result[u].length - 1][a]
|
|
1032
|
+
};
|
|
1033
|
+
let O = "";
|
|
1034
|
+
const [R, G] = g;
|
|
1035
|
+
return (R === "tasks.task.list" || R === "task.item.list") && (O = "[tasks]"), ["crm.item.list", "crm.stagehistory.list"].includes(R) && (O = "[items]"), R === "crm.type.list" && (O = "[types]"), R === "socialnetwork.api.workgroup.list" && (O = "[workgroups]"), {
|
|
1036
|
+
field: c,
|
|
1037
|
+
id: `$result[${[u, s - 1].join("__")}]${O}[49][${a}]`
|
|
1038
|
+
};
|
|
1039
|
+
}, o = (u, s) => {
|
|
1040
|
+
const [d, g] = u;
|
|
1041
|
+
let a = JSON.parse(JSON.stringify(g)), c;
|
|
1042
|
+
if (d === "task.item.list") {
|
|
1043
|
+
a = [...a];
|
|
1044
|
+
const [y, O, R, G] = a;
|
|
1045
|
+
return O[s.field] = s.id, [d, a];
|
|
1046
|
+
}
|
|
1047
|
+
return ["user.get"].includes(d) || a.FILTER ? (a.FILTER || (a.FILTER = {}), c = a.FILTER) : (a.filter || (a.filter = {}), c = a.filter), [
|
|
1048
|
+
"socialnetwork.api.workgroup.list",
|
|
1049
|
+
"tasks.task.list"
|
|
1050
|
+
].includes(d) ? c[">ID"] = s.id : c[s.field] = s.id, [d, { ...a, start: -1 }];
|
|
1051
|
+
}, h = (u) => {
|
|
1052
|
+
Object.entries(u).forEach(([s, d]) => {
|
|
1053
|
+
var c, y, O, R, G, P, w;
|
|
1054
|
+
const [g] = s.split("__"), a = this.getData(d.data());
|
|
1055
|
+
if (Array.isArray(a) && (r === "count" ? this.result[g] += a.length : this.result[g].push(...a)), d.error()) {
|
|
1056
|
+
this.errors[g] = ((y = (c = d.error()) == null ? void 0 : c.ex) == null ? void 0 : y.error) ?? ((R = (O = d.error()) == null ? void 0 : O.ex) == null ? void 0 : R.error_description) ?? ((G = d.error()) == null ? void 0 : G.toString()) ?? "Неизвестная ошибка";
|
|
1057
|
+
const I = ((w = (P = d.error()) == null ? void 0 : P.ex) == null ? void 0 : w.error) ?? "";
|
|
1058
|
+
if (I === "OPERATION_TIME_LIMIT") {
|
|
1059
|
+
this.limitCall && this.limitCall(g);
|
|
1060
|
+
const M = i.get(g);
|
|
1061
|
+
switch (I) {
|
|
1062
|
+
case "OPERATION_TIME_LIMIT":
|
|
1063
|
+
M && (this.skipList.add(M), this.limitCall && this.limitCall(g));
|
|
1064
|
+
break;
|
|
1065
|
+
case "QUERY_LIMIT_EXCEEDED":
|
|
1066
|
+
this.canContinue = !1;
|
|
1067
|
+
break;
|
|
1068
|
+
case "ACCESS_DENIED":
|
|
1069
|
+
this.skipList.add(M);
|
|
1070
|
+
break;
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
this.setProgressData({ key: g, value: d, type: r });
|
|
1075
|
+
});
|
|
1076
|
+
};
|
|
1077
|
+
let m = [];
|
|
1078
|
+
for await (const [u, s, d] of e) {
|
|
1079
|
+
if (!this.canContinue)
|
|
1080
|
+
return;
|
|
1081
|
+
const [g] = s;
|
|
1082
|
+
if (i.set(u, g), this.skipList.has(g))
|
|
1083
|
+
continue;
|
|
1084
|
+
let a = 1;
|
|
1085
|
+
for (; d > a * 50 && !this.skipList.has(g); ) {
|
|
1086
|
+
const c = [u, a].join("__"), y = A(u, a, m, s);
|
|
1087
|
+
m.push([c, o(s, y)]), m.length % 50 === 0 && (await new Promise(
|
|
1088
|
+
(O) => this.callBatch(
|
|
1089
|
+
Object.fromEntries(m),
|
|
1090
|
+
(R) => {
|
|
1091
|
+
h(R), O();
|
|
1092
|
+
}
|
|
1093
|
+
)
|
|
1094
|
+
), m = [], await this.delay()), a++;
|
|
1095
|
+
}
|
|
1087
1096
|
}
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
}, ot = new WeakSet(), yt = function(e) {
|
|
1094
|
-
return ((e == null ? void 0 : e.items) || (e == null ? void 0 : e.documents) || (e == null ? void 0 : e.tasks)) ?? e;
|
|
1095
|
-
}, Nt = new WeakSet(), wt = function(e, A) {
|
|
1096
|
-
return e !== e && (e = 0), e === 0 && A === 0 ? 0 : e || A;
|
|
1097
|
-
}, Ot = new WeakSet(), Ct = function() {
|
|
1098
|
-
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([e, A]) => {
|
|
1099
|
-
console.info(`[${e}]`, A);
|
|
1100
|
-
}), console.groupEnd();
|
|
1101
|
-
}, Jt = new WeakSet(), le = function(e) {
|
|
1102
|
-
var n, r, o, a, f, c, i, d, y, u, N, Y, W, w, b, M, X, x, J, it, B, rt, R, t;
|
|
1103
|
-
let A = {
|
|
1104
|
-
halt: 0,
|
|
1105
|
-
cmd: {}
|
|
1106
|
-
};
|
|
1107
|
-
for (let s in e) {
|
|
1108
|
-
const l = s;
|
|
1109
|
-
let m = (n = e[s]) != null && n.method ? (r = e[s]) == null ? void 0 : r.method : "", p = "", E = "", S = "";
|
|
1110
|
-
const P = (a = (o = e[s]) == null ? void 0 : o.params) == null ? void 0 : a.fields;
|
|
1111
|
-
if ((c = (f = e[s]) == null ? void 0 : f.params) != null && c.entityTypeId ? (p = `?entityTypeId=${parseInt((d = (i = e[s]) == null ? void 0 : i.params) == null ? void 0 : d.entityTypeId)}`, (u = (y = e[s]) == null ? void 0 : y.params) != null && u.id && (E = `&id=${(Y = (N = e[s]) == null ? void 0 : N.params) == null ? void 0 : Y.id}`), (w = (W = e[s]) == null ? void 0 : W.params) != null && w.ID && (E = `&ID=${(M = (b = e[s]) == null ? void 0 : b.params) == null ? void 0 : M.ID}`)) : ((x = (X = e[s]) == null ? void 0 : X.params) != null && x.id && (E = `?id=${(it = (J = e[s]) == null ? void 0 : J.params) == null ? void 0 : it.id}`), (rt = (B = e[s]) == null ? void 0 : B.params) != null && rt.ID && (E = `?ID=${(t = (R = e[s]) == null ? void 0 : R.params) == null ? void 0 : t.ID}`)), Object.keys(P).length > 0)
|
|
1112
|
-
for (let H in P)
|
|
1113
|
-
S += `&fields[${H}]=${P[H]}`;
|
|
1114
|
-
A.cmd[l] = `${m}${p}${E}${S}`.trim();
|
|
1097
|
+
m.length && (await new Promise(
|
|
1098
|
+
(u) => this.callBatch(Object.fromEntries(m), (s) => {
|
|
1099
|
+
h(s), u();
|
|
1100
|
+
})
|
|
1101
|
+
), await this.delay());
|
|
1115
1102
|
}
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1103
|
+
/**
|
|
1104
|
+
* Вывод ошибок в консоль в группированном виде
|
|
1105
|
+
*/
|
|
1106
|
+
errorLogger() {
|
|
1107
|
+
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([e, r]) => {
|
|
1108
|
+
r && console.log(`[${e}]`, r.toString());
|
|
1109
|
+
}), console.groupEnd();
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
var v;
|
|
1113
|
+
class ut {
|
|
1120
1114
|
constructor() {
|
|
1121
|
-
|
|
1115
|
+
H(this, v, {});
|
|
1122
1116
|
}
|
|
1117
|
+
/**
|
|
1118
|
+
* Получить случайный хеш-код длиной 8 символов
|
|
1119
|
+
* @returns {string}
|
|
1120
|
+
*/
|
|
1123
1121
|
get hash() {
|
|
1124
1122
|
return this.createHash(8);
|
|
1125
1123
|
}
|
|
1126
|
-
/**
|
|
1124
|
+
/**
|
|
1125
|
+
* Генератор хеш-кода
|
|
1126
|
+
* @param {number} length - Длина генерируемого хеша
|
|
1127
|
+
* @returns {string}
|
|
1128
|
+
*/
|
|
1127
1129
|
createHash(e) {
|
|
1128
|
-
let
|
|
1130
|
+
let r = "abcdefghijklmnopqrstuvwxyz0123456789", i = "";
|
|
1129
1131
|
e = e || 6;
|
|
1130
|
-
for (let
|
|
1131
|
-
|
|
1132
|
-
return
|
|
1132
|
+
for (let A = 0; A < e; A++)
|
|
1133
|
+
i += r.charAt(Math.floor(Math.random() * r.length));
|
|
1134
|
+
return i;
|
|
1133
1135
|
}
|
|
1134
|
-
/**
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1136
|
+
/**
|
|
1137
|
+
* Фильтр часто запускаемых действий (debounce)
|
|
1138
|
+
* @param {Object} params
|
|
1139
|
+
* @param {string} params.keyTimer - Ключ таймера
|
|
1140
|
+
* @param {number} params.duration - Задержка в миллисекундах (по умолчанию 10)
|
|
1141
|
+
* @param {Function} params.action - Функция для выполнения
|
|
1142
|
+
*/
|
|
1143
|
+
actionFilter({ keyTimer: e, duration: r = 10, action: i }) {
|
|
1144
|
+
p(this, v)[e] && (clearTimeout(p(this, v)[e]), p(this, v)[e] = null), i && (p(this, v)[e] = setTimeout(() => {
|
|
1145
|
+
i();
|
|
1146
|
+
}, r));
|
|
1139
1147
|
}
|
|
1140
|
-
/**
|
|
1148
|
+
/**
|
|
1149
|
+
* Включение режима NO-SLEEP для предотвращения засыпания устройства
|
|
1150
|
+
* Создает невидимое видео, которое циклически воспроизводится
|
|
1151
|
+
*/
|
|
1141
1152
|
async noSleep() {
|
|
1142
1153
|
let e = document.createElement("video");
|
|
1143
|
-
e.classList.add("no-sleep"), e.addEventListener("loadeddata", () => {
|
|
1144
|
-
e.style.position = "fixed", e.style.left = "-9999px", document.querySelector("body").append(e), e.play()
|
|
1154
|
+
e.classList.add("no-sleep"), e.muted = !0, e.autoplay = !0, e.setAttribute("playsinline", ""), e.addEventListener("loadeddata", () => {
|
|
1155
|
+
e.style.position = "fixed", e.style.left = "-9999px", document.querySelector("body").append(e), e.play().catch((r) => {
|
|
1156
|
+
console.warn("noSleep: autoplay prevented", r);
|
|
1157
|
+
});
|
|
1145
1158
|
}), e.addEventListener("ended", () => {
|
|
1146
1159
|
this.actionFilter({
|
|
1147
1160
|
keyTimer: "no-sleep",
|
|
1148
1161
|
duration: 5e3,
|
|
1149
|
-
action: () =>
|
|
1162
|
+
action: () => {
|
|
1163
|
+
e.play().catch((r) => {
|
|
1164
|
+
console.warn("noSleep: replay prevented", r);
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1150
1167
|
});
|
|
1151
1168
|
}), e.src = "data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAP5tZGF0AAAAAQYAAADlZYiEE28FmH9jNWDBjI+Z/1tIBZsjfhbmcNNUpBFej0U3p+zhaJ3eemJRL2LUMa5tkidy6bp+eatLE3jBIY864TvaAmqEFCgLMTCwVbem1n3myAw9yDXQdR5HfU/8iYf+eneVnRf7Qx9M70XDUuPx1MJX671XJwAE0VAMpnhbcUDx0pTldvUX9KQPhkZNH3eyZHmObkAeyEJ2tl+BEBJIGc90BiqKL60+5EA6fXB6iG5UU/M5KsW8BNAAUw5CbRJIqohNk10fwKbUXwya03rqGkE8+wuYGtEbrVYXb+iOl1mHHVPLYQbIAAcGyAAHAAAFNG1vb3YAAABsbXZoZAAAAAAAAAAAAAAAAAAAA+gAAAAvAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAIldHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAFAAAAA8AAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAAAAAAAAAAAQAAAAABnW1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAAQAAAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAUhtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEIc3RibAAAAKRzdHNkAAAAAAAAAAEAAACUYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAPAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAC5hdmNDAU1AC//hABZnTUAL2wUH7ARAAAADAEAAAAQDxQq4AQAFaOrAZXIAAAAQcGFzcAAAAAEAAAABAAAAGHN0dHMAAAAAAAAAAQAAAAEAAAAAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAABRzdHN6AAAAAAAAAO4AAAABAAAAFHN0Y28AAAAAAAAAAQAAADAAAAIadHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAgAAAAAAAAAvAAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAALwAAAAAAAQAAAAABkm1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAArEQAAAgAVcQAAAAAAC1oZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU291bmRIYW5kbGVyAAAAAT1taW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAQFzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAAC7gAAAAViBYCAgAISCAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAAACAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAUc3RzegAAAAAAAAAEAAAAAgAAABRzdGNvAAAAAAAAAAEAAAEeAAAAGnNncGQBAAAAcm9sbAAAAAIAAAAB//8AAAAcc2JncAAAAAByb2xsAAAAAQAAAAIAAAABAAAAgXVkdGEAAAB5bWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWR0YQAAAAAAAAAAAAAAAAAAAAAfa2V5cwAAAAAAAAABAAAAD21kdGFlbmNvZGVyAAAALWlsc3QAAAAlAAAAAQAAAB1kYXRhAAAAAQAAAABMYXZmNTguMTIuMTAw";
|
|
1152
1169
|
}
|
|
1153
|
-
/**
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1170
|
+
/**
|
|
1171
|
+
* Скачать данные в JSON-файл
|
|
1172
|
+
* @param {any} data - Данные для сохранения
|
|
1173
|
+
* @param {string} filename - Имя файла без расширения
|
|
1174
|
+
*/
|
|
1175
|
+
downloadFileJson(e, r) {
|
|
1176
|
+
let i = new Blob([JSON.stringify(e)], { type: "application/json" }), A = URL.createObjectURL(i), o = document.createElement("a");
|
|
1177
|
+
o.style.display = "none", o.href = A, o.download = `${r}.json`, document.body.appendChild(o), o.click(), setTimeout(() => {
|
|
1178
|
+
document.body.removeChild(o), URL.revokeObjectURL(A);
|
|
1158
1179
|
}, 200);
|
|
1159
1180
|
}
|
|
1160
1181
|
}
|
|
1161
|
-
|
|
1162
|
-
const
|
|
1163
|
-
var
|
|
1164
|
-
class
|
|
1182
|
+
v = new WeakMap();
|
|
1183
|
+
const ht = new ut();
|
|
1184
|
+
var x, Q, Z, z, C, V, K, rt, ft, $, ct, st, mt, it, dt, nt, gt;
|
|
1185
|
+
class Rt {
|
|
1165
1186
|
constructor() {
|
|
1166
|
-
|
|
1187
|
+
H(this, rt);
|
|
1167
1188
|
/** Вывод ошибок логера
|
|
1168
1189
|
* @param {'entity'} type - тип ошибки
|
|
1169
1190
|
*/
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1191
|
+
H(this, $);
|
|
1192
|
+
H(this, st);
|
|
1193
|
+
H(this, it);
|
|
1194
|
+
H(this, nt);
|
|
1195
|
+
H(this, x, "logger");
|
|
1196
|
+
H(this, Q, !1);
|
|
1197
|
+
H(this, Z, /* @__PURE__ */ new Map());
|
|
1198
|
+
H(this, z, {});
|
|
1199
|
+
H(this, C, null);
|
|
1200
|
+
H(this, V, !1);
|
|
1201
|
+
H(this, K, !1);
|
|
1181
1202
|
/** Очистка хранилища элементов старше 'N' месяцев */
|
|
1182
|
-
|
|
1183
|
-
|
|
1203
|
+
S(this, "periodClear", 3);
|
|
1204
|
+
X(this, rt, ft).call(this);
|
|
1184
1205
|
}
|
|
1185
1206
|
/** Инициализация логера */
|
|
1186
1207
|
async init() {
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
if (
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1208
|
+
try {
|
|
1209
|
+
let e = new j(BX24.callBatch), { entityList: r } = await e.batch({
|
|
1210
|
+
entityList: { method: "entity.get" }
|
|
1211
|
+
});
|
|
1212
|
+
if (r && Array.isArray(r))
|
|
1213
|
+
if (r.find(
|
|
1214
|
+
(A) => A.ENTITY == p(this, x)
|
|
1215
|
+
))
|
|
1216
|
+
F(this, Q, !0);
|
|
1217
|
+
else {
|
|
1218
|
+
let { entityAdd: A } = await e.batch({
|
|
1219
|
+
entityAdd: {
|
|
1220
|
+
method: "entity.add",
|
|
1221
|
+
params: {
|
|
1222
|
+
ENTITY: p(this, x),
|
|
1223
|
+
NAME: p(this, x),
|
|
1224
|
+
ACCESS: { AU: "X" }
|
|
1225
|
+
}
|
|
1201
1226
|
}
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1227
|
+
});
|
|
1228
|
+
A && F(this, Q, !0);
|
|
1229
|
+
}
|
|
1230
|
+
return X(this, it, dt).call(this).catch((i) => {
|
|
1231
|
+
console.error("Ошибка при проверке периода очистки:", i);
|
|
1232
|
+
}), p(this, Q);
|
|
1233
|
+
} catch (e) {
|
|
1234
|
+
return console.error("Ошибка при инициализации логера:", e), !1;
|
|
1235
|
+
}
|
|
1207
1236
|
}
|
|
1208
1237
|
/**
|
|
1209
1238
|
* @param {{ type: 'call'|'batch'|'batch-total-count';
|
|
@@ -1212,163 +1241,283 @@ class Re {
|
|
|
1212
1241
|
* params: { [key]: any }
|
|
1213
1242
|
* }|{ commandList: { [key]: any }
|
|
1214
1243
|
* }; }}
|
|
1215
|
-
* @returns {string}
|
|
1244
|
+
* @returns {string|null}
|
|
1216
1245
|
*/
|
|
1217
|
-
start({ type: e, data:
|
|
1218
|
-
if (!
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
const
|
|
1223
|
-
return h(this, lt).set(n, {
|
|
1246
|
+
start({ type: e, data: r }) {
|
|
1247
|
+
if (!p(this, Q))
|
|
1248
|
+
return X(this, $, ct).call(this, "entity"), null;
|
|
1249
|
+
if (!e || !r)
|
|
1250
|
+
return console.error("Невалидные данные для логирования:", { type: e, data: r }), null;
|
|
1251
|
+
const i = ht.hash, A = {
|
|
1224
1252
|
type: e,
|
|
1225
|
-
data:
|
|
1226
|
-
userInfo:
|
|
1227
|
-
errorList:
|
|
1253
|
+
data: r,
|
|
1254
|
+
userInfo: p(this, z),
|
|
1255
|
+
errorList: {},
|
|
1228
1256
|
status: "",
|
|
1229
1257
|
answer: null,
|
|
1230
1258
|
date: (/* @__PURE__ */ new Date()).getTime()
|
|
1231
|
-
}
|
|
1259
|
+
};
|
|
1260
|
+
return p(this, Z).set(i, A), F(this, K, !0), i;
|
|
1232
1261
|
}
|
|
1233
1262
|
/**
|
|
1234
1263
|
* @param {{
|
|
1235
1264
|
* key: string;
|
|
1236
|
-
* errorList:
|
|
1265
|
+
* errorList: { [key]: string };
|
|
1237
1266
|
* status: 'success'|'fail'|'fail-runtime',
|
|
1238
1267
|
* answer: { [key]: unknown } }}
|
|
1239
1268
|
*/
|
|
1240
|
-
stop({ key: e, errorList:
|
|
1241
|
-
|
|
1242
|
-
|
|
1269
|
+
async stop({ key: e, errorList: r, status: i, answer: A }) {
|
|
1270
|
+
var h;
|
|
1271
|
+
if (!p(this, K))
|
|
1272
|
+
return;
|
|
1273
|
+
if (!p(this, Q)) {
|
|
1274
|
+
X(this, $, ct).call(this, "entity");
|
|
1243
1275
|
return;
|
|
1244
1276
|
}
|
|
1245
|
-
let o =
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
await _(this, xt, ue).call(this), (a = o == null ? void 0 : o.data) != null && a.updateList && g(this, _t, !0);
|
|
1252
|
-
}
|
|
1253
|
-
});
|
|
1277
|
+
let o = p(this, Z).get(e);
|
|
1278
|
+
if (!o) {
|
|
1279
|
+
console.error(`Не найдены данные логирования для ключа: ${e}`);
|
|
1280
|
+
return;
|
|
1281
|
+
}
|
|
1282
|
+
r && (o.errorList = r), i && (o.status = i), A && (o.answer = A), await X(this, st, mt).call(this), (h = o == null ? void 0 : o.data) != null && h.updateList && F(this, V, !0), F(this, K, !1);
|
|
1254
1283
|
}
|
|
1255
1284
|
/**
|
|
1256
1285
|
* @param { ({percent}:{percent:number})=>{} } progressCall - коллбэк
|
|
1257
1286
|
*/
|
|
1258
1287
|
async getEntityList(e) {
|
|
1259
1288
|
var r;
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
entityList:
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1289
|
+
try {
|
|
1290
|
+
if ((r = p(this, C)) != null && r.length && !p(this, V))
|
|
1291
|
+
return p(this, C);
|
|
1292
|
+
let i = new j(BX24.callBatch), { entityList: A } = await i.batch(
|
|
1293
|
+
{
|
|
1294
|
+
entityList: {
|
|
1295
|
+
method: "entity.item.get",
|
|
1296
|
+
params: {
|
|
1297
|
+
ENTITY: p(this, x),
|
|
1298
|
+
SORT: { ID: "DESC" }
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
},
|
|
1302
|
+
e
|
|
1303
|
+
);
|
|
1304
|
+
return !A || !Array.isArray(A) ? (console.warn("Получен невалидный список записей"), []) : (A = A.map((o) => {
|
|
1305
|
+
try {
|
|
1306
|
+
const { ID: h, DATE_CREATE: m, DETAIL_TEXT: u } = o;
|
|
1307
|
+
return {
|
|
1308
|
+
...JSON.parse(u),
|
|
1309
|
+
id: h,
|
|
1310
|
+
dateCreate: m
|
|
1311
|
+
};
|
|
1312
|
+
} catch (h) {
|
|
1313
|
+
return console.error(
|
|
1314
|
+
`Ошибка парсинга записи ${o.ID}:`,
|
|
1315
|
+
h
|
|
1316
|
+
), null;
|
|
1268
1317
|
}
|
|
1269
|
-
}
|
|
1270
|
-
}
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
return {
|
|
1274
|
-
...JSON.parse(c),
|
|
1275
|
-
id: a,
|
|
1276
|
-
dateCreate: f
|
|
1277
|
-
};
|
|
1278
|
-
}), g(this, _t, !1), n;
|
|
1318
|
+
}).filter((o) => o !== null), F(this, V, !1), F(this, C, A), A);
|
|
1319
|
+
} catch (i) {
|
|
1320
|
+
return console.error("Ошибка при получении списка записей:", i), [];
|
|
1321
|
+
}
|
|
1279
1322
|
}
|
|
1280
1323
|
/** Выгрузка всех данных из хранилища в JSON-файл */
|
|
1281
1324
|
async downAllEntityJson() {
|
|
1282
|
-
|
|
1283
|
-
|
|
1325
|
+
try {
|
|
1326
|
+
if (p(this, C) || await this.getEntityList(), !p(this, C) || p(this, C).length === 0)
|
|
1327
|
+
return console.warn("Нет данных для выгрузки"), !1;
|
|
1328
|
+
let e = et().format("%Y-%m-%d");
|
|
1329
|
+
return ht.downloadFileJson(
|
|
1330
|
+
p(this, C),
|
|
1331
|
+
`sdklogger-entity-data__${e}`
|
|
1332
|
+
), !0;
|
|
1333
|
+
} catch (e) {
|
|
1334
|
+
return console.error("Ошибка при выгрузке данных в JSON:", e), !1;
|
|
1335
|
+
}
|
|
1284
1336
|
}
|
|
1285
1337
|
}
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1338
|
+
x = new WeakMap(), Q = new WeakMap(), Z = new WeakMap(), z = new WeakMap(), C = new WeakMap(), V = new WeakMap(), K = new WeakMap(), rt = new WeakSet(), ft = async function() {
|
|
1339
|
+
try {
|
|
1340
|
+
const e = new j(BX24.callBatch), r = BX24.isAdmin(), { curUser: i } = await e.batch({
|
|
1341
|
+
curUser: { method: "user.current" }
|
|
1342
|
+
});
|
|
1343
|
+
F(this, z, { isAdmin: r, curUser: i });
|
|
1344
|
+
} catch (e) {
|
|
1345
|
+
console.error(
|
|
1346
|
+
"Ошибка при получении информации о пользователе:",
|
|
1347
|
+
e
|
|
1348
|
+
), F(this, z, { isAdmin: !1, curUser: null });
|
|
1349
|
+
}
|
|
1350
|
+
}, $ = new WeakSet(), ct = function(e) {
|
|
1351
|
+
e == "entity" && ht.actionFilter({
|
|
1293
1352
|
keyTimer: "error.logger.entity",
|
|
1294
1353
|
duration: 500,
|
|
1295
1354
|
action: () => {
|
|
1296
1355
|
console.error("Хранилище для логгера не инициализировано");
|
|
1297
1356
|
}
|
|
1298
1357
|
});
|
|
1299
|
-
},
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1358
|
+
}, st = new WeakSet(), mt = async function() {
|
|
1359
|
+
try {
|
|
1360
|
+
let e = {}, r = new j(BX24.callBatch);
|
|
1361
|
+
for (let [i, A] of p(this, Z).entries())
|
|
1362
|
+
if (A.status) {
|
|
1363
|
+
const o = JSON.stringify(A);
|
|
1364
|
+
e[i] = {
|
|
1365
|
+
method: "entity.item.add",
|
|
1366
|
+
params: {
|
|
1367
|
+
ENTITY: p(this, x),
|
|
1368
|
+
NAME: p(this, x),
|
|
1369
|
+
DETAIL_TEXT: o
|
|
1370
|
+
}
|
|
1371
|
+
};
|
|
1308
1372
|
}
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1373
|
+
if (Object.keys(e).length) {
|
|
1374
|
+
let i = await r.batch(e), { errors: A } = r;
|
|
1375
|
+
for (let [o, h] of Object.entries({ ...i, ...A }))
|
|
1376
|
+
p(this, Z).delete(o);
|
|
1377
|
+
return !0;
|
|
1378
|
+
}
|
|
1379
|
+
return !1;
|
|
1380
|
+
} catch (e) {
|
|
1381
|
+
return console.error("Ошибка при добавлении записей в хранилище:", e), !1;
|
|
1315
1382
|
}
|
|
1316
|
-
},
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1383
|
+
}, it = new WeakSet(), dt = async function() {
|
|
1384
|
+
try {
|
|
1385
|
+
let e = new j(BX24.callBatch), { serverTime: r } = await e.batch({
|
|
1386
|
+
serverTime: { method: "server.time" }
|
|
1387
|
+
});
|
|
1388
|
+
if (!r) {
|
|
1389
|
+
console.error("Не удалось получить время сервера");
|
|
1390
|
+
return;
|
|
1391
|
+
}
|
|
1392
|
+
if (p(this, C) || await this.getEntityList(), !p(this, C) || p(this, C).length === 0)
|
|
1393
|
+
return;
|
|
1394
|
+
let i = p(this, C).filter((A) => {
|
|
1395
|
+
try {
|
|
1396
|
+
let { dateCreate: o } = A;
|
|
1397
|
+
return o ? et(new Date(o)).between(
|
|
1398
|
+
et(new Date(r)),
|
|
1399
|
+
"month"
|
|
1400
|
+
) >= this.periodClear : !1;
|
|
1401
|
+
} catch (o) {
|
|
1402
|
+
return console.error("Ошибка при проверке даты записи:", o), !1;
|
|
1334
1403
|
}
|
|
1335
|
-
};
|
|
1336
|
-
|
|
1337
|
-
|
|
1404
|
+
});
|
|
1405
|
+
i.length > 0 && (console.log(
|
|
1406
|
+
`Найдено ${i.length} записей для очистки (старше ${this.periodClear} месяцев)`
|
|
1407
|
+
), await X(this, nt, gt).call(this, i));
|
|
1408
|
+
} catch (e) {
|
|
1409
|
+
console.error("Ошибка при проверке периода очистки:", e);
|
|
1410
|
+
}
|
|
1411
|
+
}, nt = new WeakSet(), gt = async function(e) {
|
|
1412
|
+
try {
|
|
1413
|
+
if (!e || e.length === 0)
|
|
1414
|
+
return !1;
|
|
1415
|
+
let r = new j(BX24.callBatch), i = e.filter((o) => o && o.id).map((o) => {
|
|
1416
|
+
let { id: h } = o;
|
|
1417
|
+
return {
|
|
1418
|
+
method: "entity.item.delete",
|
|
1419
|
+
params: {
|
|
1420
|
+
ENTITY: p(this, x),
|
|
1421
|
+
ID: h
|
|
1422
|
+
}
|
|
1423
|
+
};
|
|
1424
|
+
});
|
|
1425
|
+
if (i.length === 0)
|
|
1426
|
+
return !1;
|
|
1427
|
+
const A = await r.batch(i);
|
|
1428
|
+
return console.log(`Успешно удалено ${i.length} записей`), F(this, V, !0), A;
|
|
1429
|
+
} catch (r) {
|
|
1430
|
+
return console.error("Ошибка при очистке устаревших записей:", r), !1;
|
|
1431
|
+
}
|
|
1338
1432
|
};
|
|
1339
|
-
var
|
|
1340
|
-
class
|
|
1433
|
+
var At, Nt, ot, Ot;
|
|
1434
|
+
class bt {
|
|
1435
|
+
/**
|
|
1436
|
+
* @param {Object} appConst - Константы приложения
|
|
1437
|
+
* @param {string} appConst.appName - Название приложения
|
|
1438
|
+
* @param {string} appConst.pathApp - Путь к приложению
|
|
1439
|
+
*/
|
|
1341
1440
|
constructor(e) {
|
|
1342
1441
|
/** Запрос данных о приложении */
|
|
1343
|
-
|
|
1442
|
+
H(this, At);
|
|
1344
1443
|
/** Запрос данных о текущем пользователе */
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1444
|
+
H(this, ot);
|
|
1445
|
+
S(this, "domain", "");
|
|
1446
|
+
S(this, "isAdmin", !1);
|
|
1447
|
+
S(this, "appInfo", null);
|
|
1448
|
+
S(this, "appConst", null);
|
|
1449
|
+
S(this, "userInfo", null);
|
|
1450
|
+
S(this, "placeData", null);
|
|
1451
|
+
S(this, "placeInfo", null);
|
|
1452
|
+
S(this, "logger", !1);
|
|
1354
1453
|
this.appConst = e;
|
|
1355
1454
|
}
|
|
1455
|
+
/**
|
|
1456
|
+
* Инициализация Bitrix24 SDK
|
|
1457
|
+
* @returns {Promise<boolean>}
|
|
1458
|
+
* @throws {Error} Если BX24 не загружен в течение 30 секунд
|
|
1459
|
+
*/
|
|
1356
1460
|
init() {
|
|
1357
|
-
return new Promise((e) => {
|
|
1461
|
+
return new Promise((e, r) => {
|
|
1358
1462
|
let A = setInterval(() => {
|
|
1359
1463
|
window.BX24 && BX24.init(async () => {
|
|
1360
|
-
console.info("init BX24"), clearInterval(A), this.domain = BX24.getDomain(), this.isAdmin = BX24.isAdmin(), this.placeInfo = BX24.placement.info(), await this.logger.init()
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1464
|
+
console.info("init BX24"), clearInterval(A), clearTimeout(o), this.domain = BX24.getDomain(), this.isAdmin = BX24.isAdmin(), this.placeInfo = BX24.placement.info(), this.logger ? (this.logger = new Rt(), await this.logger.init()) : this.logger = {
|
|
1465
|
+
start: () => {
|
|
1466
|
+
},
|
|
1467
|
+
stop: () => {
|
|
1468
|
+
},
|
|
1469
|
+
getEntityList: () => {
|
|
1470
|
+
}
|
|
1471
|
+
};
|
|
1472
|
+
const [h, m] = await Promise.all([
|
|
1473
|
+
X(this, At, Nt).call(this),
|
|
1474
|
+
X(this, ot, Ot).call(this)
|
|
1364
1475
|
]);
|
|
1365
|
-
this.appInfo =
|
|
1476
|
+
this.appInfo = h, this.userInfo = m;
|
|
1477
|
+
let u = new ut();
|
|
1478
|
+
try {
|
|
1479
|
+
u.noSleep();
|
|
1480
|
+
} catch (s) {
|
|
1481
|
+
console.warn(
|
|
1482
|
+
"Failed to initialize noSleep:",
|
|
1483
|
+
s
|
|
1484
|
+
);
|
|
1485
|
+
}
|
|
1486
|
+
e(!0);
|
|
1366
1487
|
});
|
|
1367
1488
|
}, 100);
|
|
1489
|
+
const o = setTimeout(() => {
|
|
1490
|
+
clearInterval(A);
|
|
1491
|
+
const h = new Error(
|
|
1492
|
+
"BX24 initialization timeout: BX24 object not found within 30 seconds"
|
|
1493
|
+
);
|
|
1494
|
+
console.error(h), r(h);
|
|
1495
|
+
}, 3e4);
|
|
1368
1496
|
});
|
|
1369
1497
|
}
|
|
1370
|
-
|
|
1371
|
-
|
|
1498
|
+
/**
|
|
1499
|
+
* Работа с пользовательскими опциями приложения
|
|
1500
|
+
* @param {string} key - Ключ опции
|
|
1501
|
+
* @param {any} value - Значение для установки (если не указано, метод вернет текущее значение)
|
|
1502
|
+
* @returns {any}
|
|
1503
|
+
*/
|
|
1504
|
+
userOption(e, r) {
|
|
1505
|
+
if (typeof BX24 > "u" || !BX24.userOption) {
|
|
1506
|
+
console.warn(
|
|
1507
|
+
"BX24.userOption is not available. Make sure BX24 is initialized."
|
|
1508
|
+
);
|
|
1509
|
+
return;
|
|
1510
|
+
}
|
|
1511
|
+
return r !== void 0 ? BX24.userOption.set(e, r) : BX24.userOption.get(e);
|
|
1512
|
+
}
|
|
1513
|
+
appOption(e, r) {
|
|
1514
|
+
if (typeof BX24 > "u" || !BX24.appOption) {
|
|
1515
|
+
console.warn(
|
|
1516
|
+
"BX24.appOption is not available. Make sure BX24 is initialized."
|
|
1517
|
+
);
|
|
1518
|
+
return;
|
|
1519
|
+
}
|
|
1520
|
+
return r !== void 0 ? BX24.appOption.set(e, r) : BX24.appOption.get(e);
|
|
1372
1521
|
}
|
|
1373
1522
|
/**
|
|
1374
1523
|
* @param {{
|
|
@@ -1388,32 +1537,48 @@ class pe {
|
|
|
1388
1537
|
* }[]
|
|
1389
1538
|
* }[]
|
|
1390
1539
|
*/
|
|
1391
|
-
call({ method: e, params:
|
|
1392
|
-
let
|
|
1540
|
+
async call({ method: e, params: r, updateList: i }) {
|
|
1541
|
+
let A;
|
|
1542
|
+
if (i && (A = this.logger.start({
|
|
1393
1543
|
type: "call",
|
|
1394
|
-
data: { method: e, params:
|
|
1395
|
-
})
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
if (
|
|
1403
|
-
let
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1544
|
+
data: { method: e, params: r, updateList: i }
|
|
1545
|
+
})), r || (r = {}), typeof BX24 > "u" || !BX24.callMethod) {
|
|
1546
|
+
const o = new Error("BX24 is not initialized");
|
|
1547
|
+
throw console.error(o), o;
|
|
1548
|
+
}
|
|
1549
|
+
return new Promise((o, h) => {
|
|
1550
|
+
BX24.callMethod(e, r, async (m) => {
|
|
1551
|
+
let u = {};
|
|
1552
|
+
if (m != null && m.answer)
|
|
1553
|
+
for (let [s, d] of Object.entries(m.answer))
|
|
1554
|
+
s !== "result" && d && (u[s] = d);
|
|
1555
|
+
if (m.error()) {
|
|
1556
|
+
let s = m.error();
|
|
1557
|
+
if (console.error(s), A)
|
|
1558
|
+
try {
|
|
1559
|
+
await this.logger.stop({
|
|
1560
|
+
answer: u,
|
|
1561
|
+
key: A,
|
|
1562
|
+
status: "fail",
|
|
1563
|
+
errorList: { 0: s.toString() }
|
|
1564
|
+
});
|
|
1565
|
+
} catch (d) {
|
|
1566
|
+
console.error("Logger error:", d);
|
|
1567
|
+
}
|
|
1568
|
+
o(!1);
|
|
1410
1569
|
} else {
|
|
1411
|
-
let
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1570
|
+
let s = m.data();
|
|
1571
|
+
if (s != null && s.items && (s = s.items), A)
|
|
1572
|
+
try {
|
|
1573
|
+
await this.logger.stop({
|
|
1574
|
+
answer: u,
|
|
1575
|
+
key: A,
|
|
1576
|
+
status: "success"
|
|
1577
|
+
});
|
|
1578
|
+
} catch (d) {
|
|
1579
|
+
console.error("Logger error:", d);
|
|
1580
|
+
}
|
|
1581
|
+
o(s);
|
|
1417
1582
|
}
|
|
1418
1583
|
});
|
|
1419
1584
|
});
|
|
@@ -1437,161 +1602,219 @@ class pe {
|
|
|
1437
1602
|
* }[]
|
|
1438
1603
|
* }}
|
|
1439
1604
|
*/
|
|
1440
|
-
async batch(e,
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
});
|
|
1445
|
-
o && (a.limitCommandSerial = o);
|
|
1446
|
-
try {
|
|
1447
|
-
let c = await a.batch(e, A);
|
|
1448
|
-
if (Object.keys(a.errors).length) {
|
|
1449
|
-
let i = Object.entries(a.errors).map(([d, y]) => {
|
|
1450
|
-
var u;
|
|
1451
|
-
return {
|
|
1452
|
-
key: d,
|
|
1453
|
-
error: `${y == null ? void 0 : y.method} ${(u = y == null ? void 0 : y.error) == null ? void 0 : u.toString()}`.trim()
|
|
1454
|
-
};
|
|
1455
|
-
});
|
|
1456
|
-
r && r(a.errors), this.logger.stop({
|
|
1457
|
-
key: f,
|
|
1458
|
-
status: "fail",
|
|
1459
|
-
errorList: i,
|
|
1460
|
-
answer: a.answerData
|
|
1461
|
-
});
|
|
1462
|
-
} else
|
|
1463
|
-
this.logger.stop({
|
|
1464
|
-
key: f,
|
|
1465
|
-
status: "success",
|
|
1466
|
-
answer: a.answerData
|
|
1467
|
-
});
|
|
1468
|
-
return c;
|
|
1469
|
-
} catch (c) {
|
|
1470
|
-
let i = c == null ? void 0 : c.toString();
|
|
1471
|
-
return this.logger.stop({
|
|
1472
|
-
key: f,
|
|
1473
|
-
status: "fail-runtime",
|
|
1474
|
-
errorList: [i],
|
|
1475
|
-
answer: a.answerData
|
|
1476
|
-
}), console.error(c), !1;
|
|
1605
|
+
async batch(e, r, { errorCall: i, limitCommandSerial: A, updateList: o, limitCall: h } = {}) {
|
|
1606
|
+
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1607
|
+
const s = new Error("BX24 is not initialized");
|
|
1608
|
+
return console.error(s), !1;
|
|
1477
1609
|
}
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
o && (a.limitCommandSerial = o);
|
|
1610
|
+
let m = new j(BX24.callBatch), u;
|
|
1611
|
+
o && (u = this.logger.start({
|
|
1612
|
+
type: "batch",
|
|
1613
|
+
data: { commandList: e, updateList: o }
|
|
1614
|
+
})), A && console.warn(
|
|
1615
|
+
"limitCommandSerial is deprecated and not used in current Batch implementation"
|
|
1616
|
+
);
|
|
1486
1617
|
try {
|
|
1487
|
-
let
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1618
|
+
let s = await m.batch(
|
|
1619
|
+
e,
|
|
1620
|
+
r,
|
|
1621
|
+
h
|
|
1622
|
+
);
|
|
1623
|
+
if (Object.keys(m.errors).length) {
|
|
1624
|
+
if (i && i(m.errors), u)
|
|
1625
|
+
try {
|
|
1626
|
+
await this.logger.stop({
|
|
1627
|
+
key: u,
|
|
1628
|
+
status: "fail",
|
|
1629
|
+
errorList: m.errors
|
|
1630
|
+
});
|
|
1631
|
+
} catch (d) {
|
|
1632
|
+
console.error("Logger error:", d);
|
|
1633
|
+
}
|
|
1634
|
+
} else if (u)
|
|
1635
|
+
try {
|
|
1636
|
+
await this.logger.stop({
|
|
1637
|
+
key: u,
|
|
1638
|
+
status: "success"
|
|
1639
|
+
});
|
|
1640
|
+
} catch (d) {
|
|
1641
|
+
console.error("Logger error:", d);
|
|
1642
|
+
}
|
|
1643
|
+
return s;
|
|
1644
|
+
} catch (s) {
|
|
1645
|
+
if (u)
|
|
1646
|
+
try {
|
|
1647
|
+
await this.logger.stop({
|
|
1648
|
+
key: u,
|
|
1649
|
+
status: "fail-runtime",
|
|
1650
|
+
errorList: { 0: s == null ? void 0 : s.toString() }
|
|
1651
|
+
});
|
|
1652
|
+
} catch (d) {
|
|
1653
|
+
console.error("Logger error:", d);
|
|
1654
|
+
}
|
|
1655
|
+
return console.error(s), !1;
|
|
1517
1656
|
}
|
|
1518
1657
|
}
|
|
1519
1658
|
/**
|
|
1520
|
-
*
|
|
1521
|
-
* @param
|
|
1659
|
+
* Получить количество элементов для списочных методов
|
|
1660
|
+
* @param {Object} commandList - объект/массив команд
|
|
1661
|
+
* @param {Function} progressCall - callback(data), в data приходят данные о загрузке данных
|
|
1662
|
+
* @param {{
|
|
1663
|
+
* updateList: {
|
|
1664
|
+
* method: string,
|
|
1665
|
+
* name: string,
|
|
1666
|
+
* list: {
|
|
1667
|
+
* id: string | number,
|
|
1668
|
+
* fields: {
|
|
1669
|
+
* [key: string]: {
|
|
1670
|
+
* oldValue: string | number | string[] | number[],
|
|
1671
|
+
* newValue: string | number | string[] | number[],
|
|
1672
|
+
* }
|
|
1673
|
+
* }
|
|
1674
|
+
* }[]
|
|
1675
|
+
* }[],
|
|
1676
|
+
* errorCall: Function,
|
|
1677
|
+
* limitCall: Function
|
|
1678
|
+
* }}
|
|
1679
|
+
* @returns {Promise<Object|false>}
|
|
1522
1680
|
*/
|
|
1523
|
-
async batchTotalCount(e, A) {
|
|
1524
|
-
|
|
1525
|
-
|
|
1681
|
+
async batchTotalCount(e, r, { errorCall: i, updateList: A, limitCall: o } = {}) {
|
|
1682
|
+
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1683
|
+
const u = new Error("BX24 is not initialized");
|
|
1684
|
+
return console.error(u), !1;
|
|
1685
|
+
}
|
|
1686
|
+
let h = new j(BX24.callBatch), m;
|
|
1687
|
+
A && (m = this.logger.start({
|
|
1688
|
+
type: "batch-total-count",
|
|
1526
1689
|
data: { commandList: e }
|
|
1527
|
-
});
|
|
1690
|
+
}));
|
|
1528
1691
|
try {
|
|
1529
|
-
let
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1692
|
+
let u = await h.batchTotalCount(
|
|
1693
|
+
e,
|
|
1694
|
+
r,
|
|
1695
|
+
o
|
|
1696
|
+
);
|
|
1697
|
+
if (Object.keys(h.errors).length) {
|
|
1698
|
+
if (i && i(h.errors), m)
|
|
1699
|
+
try {
|
|
1700
|
+
await this.logger.stop({
|
|
1701
|
+
key: m,
|
|
1702
|
+
status: "fail",
|
|
1703
|
+
errorList: h.errors
|
|
1704
|
+
});
|
|
1705
|
+
} catch (s) {
|
|
1706
|
+
console.error("Logger error:", s);
|
|
1707
|
+
}
|
|
1708
|
+
} else if (m)
|
|
1709
|
+
try {
|
|
1710
|
+
await this.logger.stop({
|
|
1711
|
+
key: m,
|
|
1712
|
+
status: "success"
|
|
1713
|
+
});
|
|
1714
|
+
} catch (s) {
|
|
1715
|
+
console.error("Logger error:", s);
|
|
1716
|
+
}
|
|
1717
|
+
return u;
|
|
1718
|
+
} catch (u) {
|
|
1719
|
+
if (m)
|
|
1720
|
+
try {
|
|
1721
|
+
await this.logger.stop({
|
|
1722
|
+
key: m,
|
|
1723
|
+
status: "fail-runtime",
|
|
1724
|
+
errorList: { 0: u == null ? void 0 : u.toString() }
|
|
1725
|
+
});
|
|
1726
|
+
} catch (s) {
|
|
1727
|
+
console.error("Logger error:", s);
|
|
1728
|
+
}
|
|
1729
|
+
return console.error(u), !1;
|
|
1552
1730
|
}
|
|
1553
1731
|
}
|
|
1554
1732
|
/** Запрос данных о местах встройки приложения */
|
|
1555
|
-
getPlacement() {
|
|
1556
|
-
return this.call({ method: "placement.get" }).then((e) => (this.placeData || (this.placeData = e), e));
|
|
1733
|
+
async getPlacement() {
|
|
1734
|
+
return await this.call({ method: "placement.get" }).then((e) => (this.placeData || (this.placeData = e), e));
|
|
1557
1735
|
}
|
|
1558
1736
|
/** Встройка приложения в place */
|
|
1559
|
-
async placementBind(e) {
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
r
|
|
1564
|
-
|
|
1565
|
-
}) : this.
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1737
|
+
async placementBind(e, r = !0) {
|
|
1738
|
+
var d;
|
|
1739
|
+
if (!this.isAdmin)
|
|
1740
|
+
return;
|
|
1741
|
+
r && await this.placementCheck();
|
|
1742
|
+
let i = [];
|
|
1743
|
+
if (Array.isArray(e) ? i = e.map((g) => typeof g == "string" ? { placement: g } : g) : typeof e == "string" ? i = [{ placement: e }] : i = [e], this.placeData = await this.getPlacement(), !this.placeData)
|
|
1744
|
+
return;
|
|
1745
|
+
const { appName: A, pathApp: o } = this.appConst;
|
|
1746
|
+
let h = A;
|
|
1747
|
+
this.domain === "szdl.bitrix24.ru" && ((d = this.appInfo) != null && d.ID) && (h = `${A}: #${this.appInfo.ID}`);
|
|
1748
|
+
const m = h.replace(" CRM", ""), u = {}, s = [];
|
|
1749
|
+
for (let g = 0; g < i.length; g++) {
|
|
1750
|
+
const a = i[g], c = a.placement, y = a.userId;
|
|
1751
|
+
let O = o, R = c;
|
|
1752
|
+
if (c === "PAGE_BACKGROUND_WORKER") {
|
|
1753
|
+
if (!y) {
|
|
1754
|
+
console.warn(`placementBind: userId is required for PAGE_BACKGROUND_WORKER, skipping ${c}`);
|
|
1755
|
+
continue;
|
|
1574
1756
|
}
|
|
1757
|
+
O = `${o}?USER_ID=${y}/`;
|
|
1575
1758
|
}
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
HANDLER: A ?? n,
|
|
1759
|
+
if (c === "PAGE_BACKGROUND_WORKER_ALL" && (R = "PAGE_BACKGROUND_WORKER"), this.placeData.find(
|
|
1760
|
+
(I) => I.placement === R && I.handler === O
|
|
1761
|
+
))
|
|
1762
|
+
continue;
|
|
1763
|
+
let P = this.placeData.find(
|
|
1764
|
+
(I) => I.placement === R && I.handler !== O
|
|
1765
|
+
);
|
|
1766
|
+
P && s.push({ placement: R, handler: P.handler });
|
|
1767
|
+
const w = {
|
|
1768
|
+
PLACEMENT: R,
|
|
1769
|
+
HANDLER: O,
|
|
1588
1770
|
LANG_ALL: {
|
|
1589
1771
|
ru: {
|
|
1590
|
-
TITLE:
|
|
1772
|
+
TITLE: R === "USER_PROFILE_TOOLBAR" ? m : h
|
|
1591
1773
|
}
|
|
1774
|
+
},
|
|
1775
|
+
OPTIONS: {
|
|
1776
|
+
errorHandlerUrl: O
|
|
1592
1777
|
}
|
|
1593
|
-
}
|
|
1594
|
-
|
|
1778
|
+
};
|
|
1779
|
+
c === "PAGE_BACKGROUND_WORKER" && y && (w.USER_ID = y), u[`bind_${g}`] = {
|
|
1780
|
+
method: "placement.bind",
|
|
1781
|
+
params: w
|
|
1782
|
+
};
|
|
1783
|
+
}
|
|
1784
|
+
s.length > 0 && await this.placementUnBind(s), Object.keys(u).length > 0 && await this.batch(u), Object.keys(u).length > 0 && (this.placeData = await this.getPlacement(), Object.values(u).forEach((g) => {
|
|
1785
|
+
console.log("Приложение успешно встроено в", g.params.PLACEMENT);
|
|
1786
|
+
}));
|
|
1787
|
+
}
|
|
1788
|
+
/* Отвязка встройки из place */
|
|
1789
|
+
async placementUnBind(e) {
|
|
1790
|
+
let r = [];
|
|
1791
|
+
Array.isArray(e) ? r = e.map((A) => typeof A == "string" ? { placement: A } : A) : typeof e == "string" ? r = [{ placement: e }] : r = [e];
|
|
1792
|
+
const i = {};
|
|
1793
|
+
for (let A = 0; A < r.length; A++) {
|
|
1794
|
+
const o = r[A], h = o.placement, m = o.handler, u = {
|
|
1795
|
+
PLACEMENT: h
|
|
1796
|
+
};
|
|
1797
|
+
m && (u.HANDLER = m), i[`unbind_${A}`] = {
|
|
1798
|
+
method: "placement.unbind",
|
|
1799
|
+
params: u
|
|
1800
|
+
};
|
|
1801
|
+
}
|
|
1802
|
+
Object.keys(i).length > 0 && (await this.batch(i), r.forEach((A) => {
|
|
1803
|
+
console.log("Встройка отвязана", A.placement);
|
|
1804
|
+
}));
|
|
1805
|
+
}
|
|
1806
|
+
/** Удаляем фоновые обработчики прошлых версий и создаем новые */
|
|
1807
|
+
async placementCheck() {
|
|
1808
|
+
if (this.placeData = await this.getPlacement(), !this.placeData)
|
|
1809
|
+
return;
|
|
1810
|
+
const { pathApp: e } = this.appConst, r = [], i = [];
|
|
1811
|
+
for (const A of this.placeData) {
|
|
1812
|
+
if (!A.handler || A.handler.includes(e))
|
|
1813
|
+
continue;
|
|
1814
|
+
const { placement: o, handler: h, userId: m } = A;
|
|
1815
|
+
r.push({ placement: o, handler: h }), i.push({ placement: o, userId: m });
|
|
1816
|
+
}
|
|
1817
|
+
r.length > 0 && await this.placementUnBind(r), i.length > 0 && await this.placementBind(i, !1);
|
|
1595
1818
|
}
|
|
1596
1819
|
/** Чат-бот */
|
|
1597
1820
|
/* получение списка ботов */
|
|
@@ -1600,19 +1823,19 @@ class pe {
|
|
|
1600
1823
|
method: "imbot.bot.list",
|
|
1601
1824
|
params: {}
|
|
1602
1825
|
}).then((e) => {
|
|
1603
|
-
let
|
|
1604
|
-
return console.log("chat-bot list:",
|
|
1826
|
+
let r = Object.values(e);
|
|
1827
|
+
return console.log("chat-bot list:", r), r;
|
|
1605
1828
|
});
|
|
1606
1829
|
}
|
|
1607
1830
|
/* регистрация бота */
|
|
1608
|
-
regBot({ code: e, type:
|
|
1609
|
-
const { appName:
|
|
1831
|
+
regBot({ code: e, type: r, name: i }) {
|
|
1832
|
+
const { appName: A, pathApp: o, chatBotLogo: h } = this.appConst, m = this.appInfo.ID;
|
|
1610
1833
|
return this.call({
|
|
1611
1834
|
method: "imbot.register",
|
|
1612
1835
|
params: {
|
|
1613
1836
|
CODE: e ?? this.appInfo.CODE,
|
|
1614
1837
|
// Строковой идентификатор бота, уникальный в рамках вашего приложения (обяз.)
|
|
1615
|
-
TYPE:
|
|
1838
|
+
TYPE: r ?? "O",
|
|
1616
1839
|
// Тип бота, B - чат-бот, ответы поступают сразу, H - человек, ответы поступают с задержкой от 2-х до 10 секунд, O - чат-бот для Открытых линий, S - чат-бот с повышенными привилегиями (supervisor)
|
|
1617
1840
|
EVENT_HANDLER: o,
|
|
1618
1841
|
// Ссылка на обработчик событий, поступивших от сервера - см. Обработчики событий ниже (обяз).
|
|
@@ -1622,7 +1845,7 @@ class pe {
|
|
|
1622
1845
|
// строковый идентификатор чат-бота, используется только в режиме Вебхуков
|
|
1623
1846
|
PROPERTIES: {
|
|
1624
1847
|
// Личные данные чат-бота (обяз.)
|
|
1625
|
-
NAME: `${
|
|
1848
|
+
NAME: `${i ?? A} - бот #${m}`,
|
|
1626
1849
|
// Имя чат-бота (обязательное одно из полей NAME или LAST_NAME)
|
|
1627
1850
|
LAST_NAME: "",
|
|
1628
1851
|
// Фамилия чат-бота (обязательное одно из полей NAME или LAST_NAME)
|
|
@@ -1630,7 +1853,7 @@ class pe {
|
|
|
1630
1853
|
// Цвет чат-бота для мобильного приложения RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK, LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE
|
|
1631
1854
|
EMAIL: "",
|
|
1632
1855
|
// E-mail для связи. НЕЛЬЗЯ использовать e-mail, дублирующий e-mail реальных пользователей
|
|
1633
|
-
PERSONAL_BIRTHDAY:
|
|
1856
|
+
PERSONAL_BIRTHDAY: et().format("%Y-%m-%d"),
|
|
1634
1857
|
// День рождения в формате YYYY-mm-dd
|
|
1635
1858
|
WORK_POSITION: "Почтальон",
|
|
1636
1859
|
// Занимаемая должность, используется как описание чат-бота
|
|
@@ -1638,11 +1861,11 @@ class pe {
|
|
|
1638
1861
|
// Ссылка на сайт
|
|
1639
1862
|
PERSONAL_GENDER: "M",
|
|
1640
1863
|
// Пол чат-бота, допустимые значения M - мужской, F - женский, пусто, если не требуется указывать
|
|
1641
|
-
PERSONAL_PHOTO:
|
|
1864
|
+
PERSONAL_PHOTO: h ?? ""
|
|
1642
1865
|
// Аватар чат-бота - base64
|
|
1643
1866
|
}
|
|
1644
1867
|
}
|
|
1645
|
-
}).then((
|
|
1868
|
+
}).then((u) => (console.log("Чат-бот добавлен", u), u));
|
|
1646
1869
|
}
|
|
1647
1870
|
/* Убрать регистрацию бота */
|
|
1648
1871
|
unRegBot(e) {
|
|
@@ -1651,22 +1874,306 @@ class pe {
|
|
|
1651
1874
|
params: {
|
|
1652
1875
|
BOT_ID: e
|
|
1653
1876
|
}
|
|
1654
|
-
}).then((
|
|
1877
|
+
}).then((r) => (console.log("чат-бот удален", r), r));
|
|
1655
1878
|
}
|
|
1656
1879
|
/* Получение данных логера */
|
|
1657
1880
|
getLoggerList(e) {
|
|
1658
1881
|
return this.logger.getEntityList(e);
|
|
1659
1882
|
}
|
|
1660
1883
|
}
|
|
1661
|
-
|
|
1884
|
+
At = new WeakSet(), Nt = function() {
|
|
1662
1885
|
return this.call({ method: "app.info" });
|
|
1663
|
-
},
|
|
1886
|
+
}, ot = new WeakSet(), Ot = function() {
|
|
1664
1887
|
return this.call({ method: "user.current" });
|
|
1665
1888
|
};
|
|
1889
|
+
class St {
|
|
1890
|
+
constructor(e) {
|
|
1891
|
+
S(this, "entityName", "tabs");
|
|
1892
|
+
S(this, "maxTabs", 5);
|
|
1893
|
+
S(this, "interval");
|
|
1894
|
+
S(this, "id", 0);
|
|
1895
|
+
S(this, "tabList", []);
|
|
1896
|
+
S(this, "random", this.getRandomNum());
|
|
1897
|
+
S(this, "continueCondition");
|
|
1898
|
+
S(this, "defaultContinueBackground", () => !0);
|
|
1899
|
+
S(this, "activeMaxPause", 60 * 1e3 * 5 + this.random);
|
|
1900
|
+
S(this, "activeMinPause", 60 * 1e3 * 3 + this.random);
|
|
1901
|
+
if (!e) {
|
|
1902
|
+
console.error("В бек-воркер не переданы настройки, отмена вызова"), console.log("BackgroundWorker: Отмена конструктора - отсутствуют опции");
|
|
1903
|
+
return;
|
|
1904
|
+
}
|
|
1905
|
+
const { appFunc: r, bx: i, users: A, continueBackground: o } = e;
|
|
1906
|
+
this.bx = i, this.appPath = i.appConst.pathApp ?? "", this.appName = i.appConst.appName ?? "", this.appInit = r, this.users = A, this.start = /* @__PURE__ */ new Date(), this.continueCondition = typeof o == "function" ? o : this.defaultContinueBackground;
|
|
1907
|
+
}
|
|
1908
|
+
async init() {
|
|
1909
|
+
if (!this.appInit) {
|
|
1910
|
+
console.error("Функция-запуск не передана в appInit, отмена инициализации бекворкера"), console.log("BackgroundWorker: Отмена init - не передана appInit");
|
|
1911
|
+
return;
|
|
1912
|
+
}
|
|
1913
|
+
if (!this.bx) {
|
|
1914
|
+
console.error("Не передан экземпляр bxBoot"), console.log("BackgroundWorker: Отмена init - отсутствует bx");
|
|
1915
|
+
return;
|
|
1916
|
+
}
|
|
1917
|
+
if (await this.bx.placementBind(["PAGE_BACKGROUND_WORKER"]), !await this.continueBackground()) {
|
|
1918
|
+
console.log("BackgroundWorker: Отмена init - условие запуска не выполнено");
|
|
1919
|
+
return;
|
|
1920
|
+
}
|
|
1921
|
+
await this.checkEntity(), this.tabList = await this.getFilteredTabList(), this.id = await this.addTab(), console.log("tabId", this.id), this.interval = setInterval(() => {
|
|
1922
|
+
this.backgroundPolling().catch((e) => {
|
|
1923
|
+
console.error("BackgroundWorker: backgroundPolling failed", e);
|
|
1924
|
+
});
|
|
1925
|
+
}, this.activeMinPause);
|
|
1926
|
+
}
|
|
1927
|
+
async checkEntity() {
|
|
1928
|
+
var i;
|
|
1929
|
+
const e = await this.bx.call({ method: "entity.get" });
|
|
1930
|
+
((i = e == null ? void 0 : e.find) == null ? void 0 : i.call(e, (A) => A.ENTITY === this.entityName)) || await this.bx.call({
|
|
1931
|
+
method: "entity.add",
|
|
1932
|
+
params: {
|
|
1933
|
+
ENTITY: this.entityName,
|
|
1934
|
+
NAME: this.entityName,
|
|
1935
|
+
ACCESS: { AU: "X" }
|
|
1936
|
+
}
|
|
1937
|
+
});
|
|
1938
|
+
}
|
|
1939
|
+
async getTabs() {
|
|
1940
|
+
var r;
|
|
1941
|
+
const e = await this.bx.call({
|
|
1942
|
+
method: "entity.item.get",
|
|
1943
|
+
params: {
|
|
1944
|
+
ENTITY: this.entityName,
|
|
1945
|
+
FILTER: {
|
|
1946
|
+
NAME: (r = this.bx.userInfo) == null ? void 0 : r.ID
|
|
1947
|
+
},
|
|
1948
|
+
SORT: {
|
|
1949
|
+
DATE_CREATE: "DESC"
|
|
1950
|
+
}
|
|
1951
|
+
}
|
|
1952
|
+
});
|
|
1953
|
+
return e != null && e.length ? e.map((i) => {
|
|
1954
|
+
if (!i)
|
|
1955
|
+
return { id: void 0, data: void 0 };
|
|
1956
|
+
try {
|
|
1957
|
+
return { id: i.ID, data: { ...JSON.parse(i.DETAIL_TEXT) } };
|
|
1958
|
+
} catch (A) {
|
|
1959
|
+
return console.log(A), { id: i.ID, data: void 0 };
|
|
1960
|
+
}
|
|
1961
|
+
}) : [];
|
|
1962
|
+
}
|
|
1963
|
+
async addTab() {
|
|
1964
|
+
var r;
|
|
1965
|
+
const e = {
|
|
1966
|
+
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1967
|
+
duration: (/* @__PURE__ */ new Date()).getTime() - this.start.getTime(),
|
|
1968
|
+
start: !1
|
|
1969
|
+
};
|
|
1970
|
+
return this.tabList.length < this.maxTabs && await this.bx.call({
|
|
1971
|
+
method: "entity.item.add",
|
|
1972
|
+
params: {
|
|
1973
|
+
ENTITY: this.entityName,
|
|
1974
|
+
NAME: (r = this.bx.userInfo) == null ? void 0 : r.ID,
|
|
1975
|
+
DETAIL_TEXT: JSON.stringify(e)
|
|
1976
|
+
}
|
|
1977
|
+
}) || 0;
|
|
1978
|
+
}
|
|
1979
|
+
async updateTab(e) {
|
|
1980
|
+
var i;
|
|
1981
|
+
const r = {
|
|
1982
|
+
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1983
|
+
duration: (/* @__PURE__ */ new Date()).getTime() - this.start.getTime(),
|
|
1984
|
+
start: e
|
|
1985
|
+
};
|
|
1986
|
+
await this.bx.call({
|
|
1987
|
+
method: "entity.item.update",
|
|
1988
|
+
params: {
|
|
1989
|
+
ENTITY: this.entityName,
|
|
1990
|
+
ID: this.id,
|
|
1991
|
+
NAME: (i = this.bx.userInfo) == null ? void 0 : i.ID,
|
|
1992
|
+
DETAIL_TEXT: JSON.stringify(r)
|
|
1993
|
+
}
|
|
1994
|
+
});
|
|
1995
|
+
}
|
|
1996
|
+
async deleteTabs(e = []) {
|
|
1997
|
+
if (!e.length)
|
|
1998
|
+
return;
|
|
1999
|
+
const r = e.map((i) => ({
|
|
2000
|
+
method: "entity.item.delete",
|
|
2001
|
+
params: { ENTITY: this.entityName, ID: i.id }
|
|
2002
|
+
}));
|
|
2003
|
+
r.length && await this.bx.batch(r);
|
|
2004
|
+
}
|
|
2005
|
+
getRandomNum() {
|
|
2006
|
+
const e = Math.round(Number(Math.random().toFixed(2)) * 30);
|
|
2007
|
+
return Math.round(Math.random()) ? e : -e;
|
|
2008
|
+
}
|
|
2009
|
+
async continueBackground() {
|
|
2010
|
+
try {
|
|
2011
|
+
const r = !!await Promise.resolve(this.continueCondition(this));
|
|
2012
|
+
return console.log(r ? "BackgroundWorker: Условие продолжения выполнено" : "BackgroundWorker: Отмена continueBackground - внешнее условие вернуло false"), r;
|
|
2013
|
+
} catch (e) {
|
|
2014
|
+
return console.error("BackgroundWorker: Ошибка при выполнении условия продолжения", e), console.log("BackgroundWorker: Отмена continueBackground - исключение в условии запуска"), !1;
|
|
2015
|
+
}
|
|
2016
|
+
}
|
|
2017
|
+
async getFilteredTabList() {
|
|
2018
|
+
const e = [], r = [], i = await this.getTabs();
|
|
2019
|
+
for (const A of i) {
|
|
2020
|
+
if (!(A != null && A.data)) {
|
|
2021
|
+
e.push(A);
|
|
2022
|
+
continue;
|
|
2023
|
+
}
|
|
2024
|
+
(/* @__PURE__ */ new Date()).getTime() - new Date(A.data.lastActive).getTime() > this.activeMaxPause ? e.push(A) : r.push(A);
|
|
2025
|
+
}
|
|
2026
|
+
return await this.deleteTabs(e), r;
|
|
2027
|
+
}
|
|
2028
|
+
async backgroundPolling() {
|
|
2029
|
+
if (!await this.continueBackground()) {
|
|
2030
|
+
this.interval && (clearInterval(this.interval), this.interval = void 0), console.log("BackgroundWorker: Остановка backgroundPolling - условие continueBackground не выполнено");
|
|
2031
|
+
return;
|
|
2032
|
+
}
|
|
2033
|
+
if (this.tabList = await this.getFilteredTabList(), !this.id) {
|
|
2034
|
+
this.id = await this.addTab();
|
|
2035
|
+
return;
|
|
2036
|
+
}
|
|
2037
|
+
let e = this.checkOtherTabs();
|
|
2038
|
+
e && (await this.pause(Math.round(Number(Math.random().toFixed(2)) * 1e4)), this.tabList = await this.getFilteredTabList(), e = this.checkOtherTabs(), e && await this.startBackground());
|
|
2039
|
+
}
|
|
2040
|
+
checkOtherTabs() {
|
|
2041
|
+
var A, o;
|
|
2042
|
+
let e = !1, r = (/* @__PURE__ */ new Date()).getTime() - new Date(this.start).getTime();
|
|
2043
|
+
for (const h of this.tabList)
|
|
2044
|
+
if (+h.id !== this.id && ((A = h.data) != null && A.start && (e = !0), ((o = h.data) == null ? void 0 : o.duration) > r)) {
|
|
2045
|
+
r = !1;
|
|
2046
|
+
break;
|
|
2047
|
+
}
|
|
2048
|
+
const i = !e && !!r;
|
|
2049
|
+
return this.updateTab(i).catch((h) => {
|
|
2050
|
+
console.error("BackgroundWorker: updateTab failed", h);
|
|
2051
|
+
}), console.log(`BackgroundWorker: Проверка вкладок - можно запускать приложение? ${i}`), i;
|
|
2052
|
+
}
|
|
2053
|
+
async startBackground() {
|
|
2054
|
+
this.interval && (clearInterval(this.interval), this.interval = void 0), this.interval = setInterval(() => {
|
|
2055
|
+
this.updateTab(!0).catch((e) => {
|
|
2056
|
+
console.error("BackgroundWorker: periodic updateTab failed", e);
|
|
2057
|
+
});
|
|
2058
|
+
}, this.activeMinPause), await this.appInit(), this.interval && (clearInterval(this.interval), this.interval = void 0), this.id && (await this.deleteTabs([{ id: this.id }]), this.id = 0);
|
|
2059
|
+
}
|
|
2060
|
+
async setBackgroundWorkerAll() {
|
|
2061
|
+
var d, g;
|
|
2062
|
+
if (!((d = this.bx) != null && d.isAdmin)) {
|
|
2063
|
+
console.log("BackgroundWorker: Отмена setBackgroundWorkerAll - пользователь не админ");
|
|
2064
|
+
return;
|
|
2065
|
+
}
|
|
2066
|
+
(g = this.users) != null && g.length || await this.getEntityData();
|
|
2067
|
+
const e = await this.bx.getPlacement(), r = /* @__PURE__ */ new Map();
|
|
2068
|
+
let i = null;
|
|
2069
|
+
e.forEach((a) => {
|
|
2070
|
+
a.placement === "PAGE_BACKGROUND_WORKER" && (a.userId ? r.set(+a.userId, a) : i = a);
|
|
2071
|
+
}), console.log(`setBackgroundWorkerAll: Найдено ${r.size} индивидуальных и ${i ? 1 : 0} общих привязок PAGE_BACKGROUND_WORKER`);
|
|
2072
|
+
const A = await this.getAdminsList(), o = await this.getEligibleUsersForBackgroundWorker(A);
|
|
2073
|
+
o.sort((a, c) => {
|
|
2074
|
+
const y = a.LAST_LOGIN ? new Date(a.LAST_LOGIN) : /* @__PURE__ */ new Date(0);
|
|
2075
|
+
return (c.LAST_LOGIN ? new Date(c.LAST_LOGIN) : /* @__PURE__ */ new Date(0)) - y;
|
|
2076
|
+
}), console.log(`setBackgroundWorkerAll: Найдено ${o.length} подходящих пользователей (админы и руководители)`);
|
|
2077
|
+
const h = [];
|
|
2078
|
+
!i && this.appPath && (h.push({
|
|
2079
|
+
method: "placement.bind",
|
|
2080
|
+
params: {
|
|
2081
|
+
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2082
|
+
HANDLER: `${this.appPath}/`,
|
|
2083
|
+
LANG_ALL: {
|
|
2084
|
+
ru: {
|
|
2085
|
+
TITLE: this.appName
|
|
2086
|
+
}
|
|
2087
|
+
},
|
|
2088
|
+
OPTIONS: {
|
|
2089
|
+
errorHandlerUrl: `${this.appPath}/`
|
|
2090
|
+
}
|
|
2091
|
+
}
|
|
2092
|
+
}), console.log("setBackgroundWorkerAll: Добавлен в очередь создание общего бэк-воркера"));
|
|
2093
|
+
const m = 10, u = o.slice(0, m), s = [];
|
|
2094
|
+
for (const [a] of r)
|
|
2095
|
+
o.find((y) => +y.ID === a) || s.push(a);
|
|
2096
|
+
for (const a of s)
|
|
2097
|
+
this.appPath && (h.push({
|
|
2098
|
+
method: "placement.unbind",
|
|
2099
|
+
params: {
|
|
2100
|
+
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2101
|
+
HANDLER: `${this.appPath}?USER_ID=${a}/`
|
|
2102
|
+
}
|
|
2103
|
+
}), console.log(`setBackgroundWorkerAll: Добавлена в очередь отвязка бэк-воркера от пользователя ${a}`));
|
|
2104
|
+
for (const a of u)
|
|
2105
|
+
r.has(+a.ID) || !this.appPath || h.push({
|
|
2106
|
+
method: "placement.bind",
|
|
2107
|
+
params: {
|
|
2108
|
+
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2109
|
+
HANDLER: `${this.appPath}?USER_ID=${a.ID}/`,
|
|
2110
|
+
LANG_ALL: {
|
|
2111
|
+
ru: {
|
|
2112
|
+
TITLE: this.appName
|
|
2113
|
+
}
|
|
2114
|
+
},
|
|
2115
|
+
OPTIONS: {
|
|
2116
|
+
errorHandlerUrl: `${this.appPath}?USER_ID=${a.ID}/`
|
|
2117
|
+
},
|
|
2118
|
+
USER_ID: a.ID
|
|
2119
|
+
}
|
|
2120
|
+
});
|
|
2121
|
+
h.length ? (console.log(`setBackgroundWorkerAll: Выполняем ${h.length} операций через batch`), await this.bx.batch(h), console.log("setBackgroundWorkerAll: Все операции batch выполнены успешно")) : console.log("setBackgroundWorkerAll: Нет операций для выполнения");
|
|
2122
|
+
}
|
|
2123
|
+
async getEligibleUsersForBackgroundWorker(e = []) {
|
|
2124
|
+
return (this.users ?? []).filter((i) => i.ACTIVE === "Y" || i.ACTIVE === !0).filter((i) => {
|
|
2125
|
+
const A = +i.ID;
|
|
2126
|
+
return e.includes(A);
|
|
2127
|
+
});
|
|
2128
|
+
}
|
|
2129
|
+
async updateAdminsList() {
|
|
2130
|
+
var e, r, i;
|
|
2131
|
+
try {
|
|
2132
|
+
const A = BX24.appOption.get("adminsList");
|
|
2133
|
+
let o = [];
|
|
2134
|
+
if (A)
|
|
2135
|
+
try {
|
|
2136
|
+
o = JSON.parse(A);
|
|
2137
|
+
} catch {
|
|
2138
|
+
console.log("updateAdminsList: Ошибка парсинга существующего списка админов, создаем новый"), o = [];
|
|
2139
|
+
}
|
|
2140
|
+
const h = +(((e = this.bx.userInfo) == null ? void 0 : e.ID) ?? 0);
|
|
2141
|
+
(r = this.bx) != null && r.isAdmin && h && !o.includes(h) && (o.push(h), console.log(`updateAdminsList: Добавлен новый админ ${h}`)), !((i = this.bx) != null && i.isAdmin) && h && o.includes(h) && (o = o.filter((s) => s !== h), console.log(`updateAdminsList: Удален из списка админов пользователь ${h} (больше не админ)`));
|
|
2142
|
+
const m = new Set(
|
|
2143
|
+
(this.users ?? []).filter((s) => s.ACTIVE === "Y" || s.ACTIVE === !0).map((s) => +s.ID)
|
|
2144
|
+
), u = o.filter((s) => m.has(s));
|
|
2145
|
+
return u.length !== o.length && (console.log(`updateAdminsList: Удалено ${o.length - u.length} неактивных админов`), o = u), BX24.appOption.set("adminsList", JSON.stringify(o)), console.log(`BackgroundWorker: Список админов обновлен: ${o.length} админов`), o;
|
|
2146
|
+
} catch (A) {
|
|
2147
|
+
return console.error("BackgroundWorker: Ошибка при обновлении списка админов:", A), [];
|
|
2148
|
+
}
|
|
2149
|
+
}
|
|
2150
|
+
async getAdminsList() {
|
|
2151
|
+
try {
|
|
2152
|
+
const e = BX24.appOption.get("adminsList");
|
|
2153
|
+
return e ? JSON.parse(e) : [];
|
|
2154
|
+
} catch (e) {
|
|
2155
|
+
return console.error("getAdminsList: Ошибка при получении списка админов:", e), [];
|
|
2156
|
+
}
|
|
2157
|
+
}
|
|
2158
|
+
async getEntityData() {
|
|
2159
|
+
const e = {
|
|
2160
|
+
users: { method: "user.get", params: { filter: { ACTIVE: "Y" } } }
|
|
2161
|
+
}, { users: r } = await this.bx.batch(e).then((i) => i ? (Array.isArray(i.users) || (i.users = []), i) : { users: [] });
|
|
2162
|
+
this.users = r;
|
|
2163
|
+
}
|
|
2164
|
+
pause(e = 500, r) {
|
|
2165
|
+
return new Promise((i) => {
|
|
2166
|
+
setTimeout(() => {
|
|
2167
|
+
r && r(), i(!0);
|
|
2168
|
+
}, e);
|
|
2169
|
+
});
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
1666
2172
|
export {
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
2173
|
+
St as BackgroundWorker,
|
|
2174
|
+
j as Batch,
|
|
2175
|
+
bt as BxBoot,
|
|
2176
|
+
ut as BxHelper,
|
|
2177
|
+
Rt as BxLogger,
|
|
2178
|
+
et as tempus
|
|
1672
2179
|
};
|