szdl-utils-kit 0.3.11 → 0.3.14
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 +3 -3
- package/dist/index.js +1191 -1152
- package/dist/index.umd.cjs +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
if (!
|
|
5
|
-
throw TypeError("Cannot " +
|
|
1
|
+
var _t = Object.defineProperty;
|
|
2
|
+
var Et = (_, r, e) => r in _ ? _t(_, r, { enumerable: !0, configurable: !0, writable: !0, value: e }) : _[r] = e;
|
|
3
|
+
var I = (_, r, e) => (Et(_, typeof r != "symbol" ? r + "" : r, e), e), ct = (_, r, e) => {
|
|
4
|
+
if (!r.has(_))
|
|
5
|
+
throw TypeError("Cannot " + e);
|
|
6
6
|
};
|
|
7
|
-
var
|
|
8
|
-
if (
|
|
7
|
+
var T = (_, r, e) => (ct(_, r, "read from private field"), e ? e.call(_) : r.get(_)), U = (_, r, e) => {
|
|
8
|
+
if (r.has(_))
|
|
9
9
|
throw TypeError("Cannot add the same private member more than once");
|
|
10
|
-
|
|
11
|
-
}, X = (
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
function
|
|
15
|
-
return
|
|
10
|
+
r instanceof WeakSet ? r.add(_) : r.set(_, e);
|
|
11
|
+
}, X = (_, r, e, i) => (ct(_, r, "write to private field"), i ? i.call(_, e) : r.set(_, e), e);
|
|
12
|
+
var J = (_, r, e) => (ct(_, r, "access private method"), e);
|
|
13
|
+
var Tt = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
|
|
14
|
+
function Rt(_) {
|
|
15
|
+
return _ && _.__esModule && Object.prototype.hasOwnProperty.call(_, "default") ? _.default : _;
|
|
16
16
|
}
|
|
17
|
-
var
|
|
18
|
-
(function(
|
|
19
|
-
(function(
|
|
20
|
-
Array.prototype.indexOf || (Array.prototype.indexOf = function(t,
|
|
21
|
-
var
|
|
22
|
-
for (
|
|
23
|
-
if (this[
|
|
24
|
-
return
|
|
17
|
+
var lt = { exports: {} };
|
|
18
|
+
(function(_, r) {
|
|
19
|
+
(function(e) {
|
|
20
|
+
Array.prototype.indexOf || (Array.prototype.indexOf = function(t, a) {
|
|
21
|
+
var d, g;
|
|
22
|
+
for (d = a || 0, g = this.length; d < g; d += 1)
|
|
23
|
+
if (this[d] === t)
|
|
24
|
+
return d;
|
|
25
25
|
return -1;
|
|
26
26
|
});
|
|
27
|
-
var i = this, n = function(t,
|
|
28
|
-
for (var
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
},
|
|
32
|
-
return
|
|
33
|
-
},
|
|
34
|
-
var
|
|
35
|
-
return
|
|
36
|
-
}, c = function(t,
|
|
37
|
-
var
|
|
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
|
-
},
|
|
27
|
+
var i = this, n = function(t, a) {
|
|
28
|
+
for (var d = t.toString(); d.length < a; )
|
|
29
|
+
d = "0" + d;
|
|
30
|
+
return d;
|
|
31
|
+
}, o = function(t, a) {
|
|
32
|
+
return a !== e ? (t.year(a.year() || a.year), t.month(a.month() || a.month), t.day(a.day() || a.day), t.hours(a.hours() || a.hours), t.minutes(a.minutes() || a.minutes), t.seconds(a.seconds() || a.seconds), t.milliseconds(a.milliseconds() || a.milliseconds), t) : e;
|
|
33
|
+
}, l = function(t, a) {
|
|
34
|
+
var d, g = "";
|
|
35
|
+
return d = t.slice(a, a + 1), d !== "" && !isNaN(Number(d)) && (g += "%H"), d = t.charAt(a + 2), d !== "" && d === ":" && (g += d), d = t.slice(a + 3, a + 4), d !== "" && !isNaN(Number(d)) && (g += "%M"), d = t.charAt(a + 5), d !== "" && d === ":" && (g += d), d = t.slice(a + 6, a + 7), d !== "" && !isNaN(Number(d)) && (g += "%S"), g;
|
|
36
|
+
}, c = function(t, a) {
|
|
37
|
+
var d, g = [
|
|
38
|
+
t.slice(a, a + 1),
|
|
39
|
+
t.charAt(a + 2),
|
|
40
|
+
t.slice(a + 3, a + 4),
|
|
41
|
+
t.charAt(a + 5),
|
|
42
|
+
t.slice(a + 6, a + 9)
|
|
43
|
+
], k;
|
|
44
|
+
return !isNaN(Number(g[0])) && !isNaN(Number(g[2])) && !isNaN(Number(g[4])) ? (g[1] === "." && g[3] === "." ? d = "%d.%m.%Y" : g[1] === "-" && g[3] === "-" ? d = "%m-%d-%Y" : g[1] === "/" && g[3] === "/" && (d = "%m/%d/%Y"), d) : (k = [
|
|
45
|
+
t.slice(a, a + 3),
|
|
46
|
+
t.charAt(a + 4),
|
|
47
|
+
t.slice(a + 5, a + 6),
|
|
48
|
+
t.charAt(a + 7),
|
|
49
|
+
t.slice(a + 8, a + 9)
|
|
50
|
+
], !isNaN(Number(k[0])) && !isNaN(Number(k[2])) && !isNaN(Number(k[4])) ? (k[1] === "-" && k[3] === "-" && (d = "%Y-%m-%d"), d) : "");
|
|
51
|
+
}, h = i.tempus, s, f, m = i.navigator || {}, A = "en", u = {
|
|
52
52
|
en: {
|
|
53
53
|
JANUARY_SHORT: "Jan",
|
|
54
54
|
FEBRUARY_SHORT: "Feb",
|
|
@@ -209,70 +209,70 @@ var ut = { exports: {} };
|
|
|
209
209
|
FRIDAY_LONG: "Freitag",
|
|
210
210
|
SATURDAY_LONG: "Samstag"
|
|
211
211
|
}
|
|
212
|
-
},
|
|
212
|
+
}, N = function() {
|
|
213
213
|
return [
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
214
|
+
u[A].JANUARY_LONG,
|
|
215
|
+
u[A].FEBRUARY_LONG,
|
|
216
|
+
u[A].MARCH_LONG,
|
|
217
|
+
u[A].APRIL_LONG,
|
|
218
|
+
u[A].MAY_LONG,
|
|
219
|
+
u[A].JUNE_LONG,
|
|
220
|
+
u[A].JULY_LONG,
|
|
221
|
+
u[A].AUGUST_LONG,
|
|
222
|
+
u[A].SEPTEMBER_LONG,
|
|
223
|
+
u[A].OCTOBER_LONG,
|
|
224
|
+
u[A].NOVEMBER_LONG,
|
|
225
|
+
u[A].DECEMBER_LONG
|
|
226
226
|
];
|
|
227
|
-
},
|
|
227
|
+
}, y = function() {
|
|
228
228
|
return [
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
229
|
+
u[A].JANUARY_SHORT,
|
|
230
|
+
u[A].FEBRUARY_SHORT,
|
|
231
|
+
u[A].MARCH_SHORT,
|
|
232
|
+
u[A].APRIL_SHORT,
|
|
233
|
+
u[A].MAY_SHORT,
|
|
234
|
+
u[A].JUNE_SHORT,
|
|
235
|
+
u[A].JULY_SHORT,
|
|
236
|
+
u[A].AUGUST_SHORT,
|
|
237
|
+
u[A].SEPTEMBER_SHORT,
|
|
238
|
+
u[A].OCTOBER_SHORT,
|
|
239
|
+
u[A].NOVEMBER_SHORT,
|
|
240
|
+
u[A].DECEMBER_SHORT
|
|
241
241
|
];
|
|
242
|
-
},
|
|
242
|
+
}, p = function() {
|
|
243
243
|
return [
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
244
|
+
u[A].SUNDAY_LONG,
|
|
245
|
+
u[A].MONDAY_LONG,
|
|
246
|
+
u[A].TUESDAY_LONG,
|
|
247
|
+
u[A].WEDNESDAY_LONG,
|
|
248
|
+
u[A].THURSDAY_LONG,
|
|
249
|
+
u[A].FRIDAY_LONG,
|
|
250
|
+
u[A].SATURDAY_LONG
|
|
251
251
|
];
|
|
252
|
-
},
|
|
252
|
+
}, R = function() {
|
|
253
253
|
return [
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
254
|
+
u[A].SUNDAY_SHORT,
|
|
255
|
+
u[A].MONDAY_SHORT,
|
|
256
|
+
u[A].TUESDAY_SHORT,
|
|
257
|
+
u[A].WEDNESDAY_SHORT,
|
|
258
|
+
u[A].THURSDAY_SHORT,
|
|
259
|
+
u[A].FRIDAY_SHORT,
|
|
260
|
+
u[A].SATURDAY_SHORT
|
|
261
261
|
];
|
|
262
|
-
},
|
|
263
|
-
var
|
|
264
|
-
i.XMLHttpRequest ?
|
|
265
|
-
|
|
266
|
-
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) :
|
|
267
|
-
},
|
|
268
|
-
},
|
|
262
|
+
}, b, M, D, B, F = function(t, a, d) {
|
|
263
|
+
var g;
|
|
264
|
+
i.XMLHttpRequest ? g = new XMLHttpRequest() : g = new ActiveXObject("Microsoft.XMLHTTP"), g.onreadystatechange = function() {
|
|
265
|
+
g.readyState === 4 && (g.status === 200 ? a && (i.JSON === e ? alert(`Please, include json2 into your project if you want use old browsers!
|
|
266
|
+
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.parse(g.responseText))) : d && d(g));
|
|
267
|
+
}, g.open("GET", t, !1), g.send();
|
|
268
|
+
}, S = {
|
|
269
269
|
"%d": {
|
|
270
270
|
format: function(t) {
|
|
271
271
|
return n(t.day() || s.MIN_DAY, 2);
|
|
272
272
|
},
|
|
273
273
|
parse: function(t) {
|
|
274
|
-
var
|
|
275
|
-
return { day: isNaN(
|
|
274
|
+
var a = Number(t);
|
|
275
|
+
return { day: isNaN(a) ? e : a };
|
|
276
276
|
},
|
|
277
277
|
minLength: 2,
|
|
278
278
|
maxLength: 2,
|
|
@@ -283,8 +283,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
283
283
|
return n(t.month() || s.MIN_MONTH, 2);
|
|
284
284
|
},
|
|
285
285
|
parse: function(t) {
|
|
286
|
-
var
|
|
287
|
-
return { month: isNaN(
|
|
286
|
+
var a = Number(t);
|
|
287
|
+
return { month: isNaN(a) ? e : a };
|
|
288
288
|
},
|
|
289
289
|
minLength: 2,
|
|
290
290
|
maxLength: 2,
|
|
@@ -295,8 +295,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
295
295
|
return n(t.year() || s.MIN_YEAR, 4);
|
|
296
296
|
},
|
|
297
297
|
parse: function(t) {
|
|
298
|
-
var
|
|
299
|
-
return { year: isNaN(
|
|
298
|
+
var a = Number(t);
|
|
299
|
+
return { year: isNaN(a) ? e : a };
|
|
300
300
|
},
|
|
301
301
|
minLength: 4,
|
|
302
302
|
maxLength: 4,
|
|
@@ -315,8 +315,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
315
315
|
},
|
|
316
316
|
"%a": {
|
|
317
317
|
format: function(t) {
|
|
318
|
-
var
|
|
319
|
-
return
|
|
318
|
+
var a = t.dayOfWeek();
|
|
319
|
+
return B[a !== e ? a : 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`) : o(JSON.pars
|
|
|
327
327
|
},
|
|
328
328
|
"%A": {
|
|
329
329
|
format: function(t) {
|
|
330
|
-
var
|
|
331
|
-
return
|
|
330
|
+
var a = t.dayOfWeek();
|
|
331
|
+
return D[a !== e ? a : 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`) : o(JSON.pars
|
|
|
339
339
|
},
|
|
340
340
|
"%b": {
|
|
341
341
|
format: function(t) {
|
|
342
|
-
var
|
|
343
|
-
return
|
|
342
|
+
var a = s.options("monthFromZero") ? t.month() : t.month() - 1;
|
|
343
|
+
return M[a !== e ? a : s.MIN_MONTH];
|
|
344
344
|
},
|
|
345
345
|
parse: function(t) {
|
|
346
|
-
var
|
|
347
|
-
return { month:
|
|
346
|
+
var a = s.monthNames().indexOf(t) + (s.options("monthFromZero") ? 0 : 1);
|
|
347
|
+
return { month: a !== -1 ? a : e };
|
|
348
348
|
},
|
|
349
349
|
minLength: 1,
|
|
350
350
|
maxLength: 999,
|
|
@@ -352,12 +352,12 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
352
352
|
},
|
|
353
353
|
"%B": {
|
|
354
354
|
format: function(t) {
|
|
355
|
-
var
|
|
356
|
-
return
|
|
355
|
+
var a = s.options("monthFromZero") ? t.month() : t.month() - 1;
|
|
356
|
+
return b[a !== e ? a : s.MIN_MONTH];
|
|
357
357
|
},
|
|
358
358
|
parse: function(t) {
|
|
359
|
-
var
|
|
360
|
-
return { month:
|
|
359
|
+
var a = s.monthNames(!0).indexOf(t) + (s.options("monthFromZero") ? 0 : 1);
|
|
360
|
+
return { month: a !== -1 ? a : e };
|
|
361
361
|
},
|
|
362
362
|
minLength: 1,
|
|
363
363
|
maxLength: 999,
|
|
@@ -368,8 +368,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
368
368
|
return n(t.hours() || s.MIN_HOURS, 2);
|
|
369
369
|
},
|
|
370
370
|
parse: function(t) {
|
|
371
|
-
var
|
|
372
|
-
return { hours: isNaN(
|
|
371
|
+
var a = Number(t);
|
|
372
|
+
return { hours: isNaN(a) ? e : a };
|
|
373
373
|
},
|
|
374
374
|
minLength: 2,
|
|
375
375
|
maxLength: 2,
|
|
@@ -380,8 +380,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
380
380
|
return n(t.minutes() || s.MIN_MINUTES, 2);
|
|
381
381
|
},
|
|
382
382
|
parse: function(t) {
|
|
383
|
-
var
|
|
384
|
-
return { minutes: isNaN(
|
|
383
|
+
var a = Number(t);
|
|
384
|
+
return { minutes: isNaN(a) ? e : a };
|
|
385
385
|
},
|
|
386
386
|
minLength: 2,
|
|
387
387
|
maxLength: 2,
|
|
@@ -392,8 +392,8 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
392
392
|
return n(t.seconds() || s.MIN_SECONDS, 2);
|
|
393
393
|
},
|
|
394
394
|
parse: function(t) {
|
|
395
|
-
var
|
|
396
|
-
return { seconds: isNaN(
|
|
395
|
+
var a = Number(t);
|
|
396
|
+
return { seconds: isNaN(a) ? e : a };
|
|
397
397
|
},
|
|
398
398
|
minLength: 2,
|
|
399
399
|
maxLength: 2,
|
|
@@ -415,11 +415,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
415
415
|
return n(t.year() || s.MIN_YEAR, 4) + "-" + n(t.month() || s.MIN_MONTH, 2) + "-" + n(t.day() || s.MIN_DAY, 2);
|
|
416
416
|
},
|
|
417
417
|
parse: function(t) {
|
|
418
|
-
var
|
|
418
|
+
var a = Number(t.slice(0, 4)), d = Number(t.slice(5, 7)), g = Number(t.slice(8, 10));
|
|
419
419
|
return {
|
|
420
|
-
year:
|
|
421
|
-
month:
|
|
422
|
-
day:
|
|
420
|
+
year: a,
|
|
421
|
+
month: d,
|
|
422
|
+
day: g
|
|
423
423
|
};
|
|
424
424
|
},
|
|
425
425
|
minLength: 10,
|
|
@@ -431,22 +431,22 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
431
431
|
return n(t.month() || s.MIN_MONTH, 2) + "/" + n(t.day() || s.MIN_DAY, 2) + "/" + n(t.year() || s.MIN_YEAR, 4);
|
|
432
432
|
},
|
|
433
433
|
parse: function(t) {
|
|
434
|
-
var
|
|
434
|
+
var a = Number(t.slice(0, 2)), d = Number(t.slice(3, 5)), g = Number(t.slice(6, 10));
|
|
435
435
|
return {
|
|
436
|
-
year:
|
|
437
|
-
month:
|
|
438
|
-
day:
|
|
436
|
+
year: g,
|
|
437
|
+
month: a,
|
|
438
|
+
day: d
|
|
439
439
|
};
|
|
440
440
|
},
|
|
441
441
|
minLength: 10,
|
|
442
442
|
maxLength: 10,
|
|
443
443
|
type: "string"
|
|
444
444
|
}
|
|
445
|
-
},
|
|
445
|
+
}, W = {
|
|
446
446
|
useMilliseconds: !1,
|
|
447
447
|
monthFromZero: !1
|
|
448
|
-
},
|
|
449
|
-
|
|
448
|
+
}, O;
|
|
449
|
+
O = function(t, a, d) {
|
|
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`) : o(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 === (s.options("monthFromZero") ? 1 : 2) && (
|
|
462
|
-
},
|
|
458
|
+
}, t !== e && this.set(t, a, d), this;
|
|
459
|
+
}, O.fn = O.prototype, O.fn.dayCount = function() {
|
|
460
|
+
var t = this.month(), a = s.MAX_DAY_IN_MONTHS[t - (s.options("monthFromZero") ? 0 : 1)];
|
|
461
|
+
return this.leapYear() && t === (s.options("monthFromZero") ? 1 : 2) && (a += 1), a;
|
|
462
|
+
}, O.fn.year = function(t) {
|
|
463
463
|
if (arguments.length !== 0)
|
|
464
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
|
+
}, O.fn.month = function(t) {
|
|
469
469
|
if (arguments.length !== 0)
|
|
470
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
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
|
+
}, O.fn.day = function(t) {
|
|
475
475
|
if (arguments.length !== 0)
|
|
476
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
|
+
}, O.fn.hours = function(t) {
|
|
481
481
|
if (arguments.length !== 0)
|
|
482
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
|
+
}, O.fn.minutes = function(t) {
|
|
487
487
|
if (arguments.length !== 0)
|
|
488
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
|
+
}, O.fn.seconds = function(t) {
|
|
493
493
|
if (arguments.length !== 0)
|
|
494
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
|
+
}, O.fn.milliseconds = function(t) {
|
|
499
499
|
if (arguments.length !== 0)
|
|
500
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
|
+
}, O.fn.week = function() {
|
|
505
|
+
var t = new Date(this.year(), 0, 1), a = s(this.utc()).hours(0).minutes(0).seconds(0).milliseconds(0).utc() * 1e3;
|
|
506
|
+
return Math.ceil(((a - t.getTime()) / 864e5 + t.getDay() + 1) / 7);
|
|
507
|
+
}, O.fn.set = function(t, a, d) {
|
|
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`) : o(JSON.pars
|
|
|
513
513
|
minutes: !1,
|
|
514
514
|
seconds: !1,
|
|
515
515
|
milliseconds: !1
|
|
516
|
-
}, t ===
|
|
516
|
+
}, t === e)
|
|
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
521
|
return this._d = new Date(t * (s.options("useMilliseconds") ? 1 : 1e3)), this;
|
|
522
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
|
|
524
|
-
if (t ===
|
|
525
|
-
return
|
|
523
|
+
var g, k = [], E, L, v = [], Y = 0, G = 0, C, x, w = {}, H;
|
|
524
|
+
if (t === e)
|
|
525
|
+
return E = o(this, d), E === e && (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`) : o(JSON.pars
|
|
|
530
530
|
minutes: -1,
|
|
531
531
|
seconds: -1,
|
|
532
532
|
milliseconds: -1
|
|
533
|
-
}),
|
|
534
|
-
for (
|
|
535
|
-
if (
|
|
536
|
-
if (
|
|
537
|
-
switch (
|
|
533
|
+
}), E;
|
|
534
|
+
for (a === e && (a = s.detectFormat(t)); Y < a.length; ) {
|
|
535
|
+
if (a.charAt(Y) === "%") {
|
|
536
|
+
if (L = a.charAt(Y) + a.charAt(Y + 1), S[L] !== e) {
|
|
537
|
+
switch (C = 0, x = "", S[L].type) {
|
|
538
538
|
case "number":
|
|
539
|
-
for (;
|
|
540
|
-
|
|
539
|
+
for (; C < S[L].maxLength && G + C < t.length && !isNaN(Number(t.charAt(G + C))); )
|
|
540
|
+
x += t.charAt(G + C), C += 1;
|
|
541
541
|
break;
|
|
542
542
|
case "word":
|
|
543
|
-
for (;
|
|
544
|
-
|
|
543
|
+
for (; C < S[L].maxLength && G + C < t.length && /^[\u00BF-\u1FFF\u2C00-\uD7FF\w]+$/.test(t.charAt(G + C)); )
|
|
544
|
+
x += t.charAt(G + C), C += 1;
|
|
545
545
|
break;
|
|
546
546
|
case "string":
|
|
547
|
-
for (;
|
|
548
|
-
|
|
547
|
+
for (; C < S[L].maxLength && G + C < t.length; )
|
|
548
|
+
x += t.charAt(G + C), C += 1;
|
|
549
549
|
break;
|
|
550
550
|
}
|
|
551
|
-
if (
|
|
552
|
-
return
|
|
551
|
+
if (C < S[L].minLength)
|
|
552
|
+
return E = o(this, d), E === e && (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`) : o(JSON.pars
|
|
|
557
557
|
minutes: -1,
|
|
558
558
|
seconds: -1,
|
|
559
559
|
milliseconds: -1
|
|
560
|
-
}),
|
|
561
|
-
|
|
560
|
+
}), E;
|
|
561
|
+
k.push(L), v.push(x), C -= 1, G += C, Y += 1;
|
|
562
562
|
}
|
|
563
|
-
} else if (t.charAt(
|
|
564
|
-
return
|
|
563
|
+
} else if (t.charAt(G) !== a.charAt(Y))
|
|
564
|
+
return E = o(this, d), E === e && (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`) : o(JSON.pars
|
|
|
569
569
|
minutes: -1,
|
|
570
570
|
seconds: -1,
|
|
571
571
|
milliseconds: -1
|
|
572
|
-
}),
|
|
573
|
-
|
|
572
|
+
}), E;
|
|
573
|
+
Y += 1, G += 1;
|
|
574
574
|
}
|
|
575
|
-
for (
|
|
576
|
-
|
|
577
|
-
year: H.year !==
|
|
578
|
-
month: H.month !==
|
|
579
|
-
day: H.day !==
|
|
580
|
-
hours: H.hours !==
|
|
581
|
-
minutes: H.minutes !==
|
|
582
|
-
seconds: H.seconds !==
|
|
575
|
+
for (g in k)
|
|
576
|
+
k.hasOwnProperty(g) && S.hasOwnProperty(k[g]) && (H = S[k[g]].parse(v[g]), w = {
|
|
577
|
+
year: H.year !== e ? H.year : w.year,
|
|
578
|
+
month: H.month !== e ? H.month : w.month,
|
|
579
|
+
day: H.day !== e ? H.day : w.day,
|
|
580
|
+
hours: H.hours !== e ? H.hours : w.hours,
|
|
581
|
+
minutes: H.minutes !== e ? H.minutes : w.minutes,
|
|
582
|
+
seconds: H.seconds !== e ? H.seconds : w.seconds
|
|
583
583
|
});
|
|
584
|
-
this.day(s.MIN_DAY), this.year(
|
|
584
|
+
this.day(s.MIN_DAY), this.year(w.year), this.month(w.month), this.day(w.day), this.hours(w.hours), this.minutes(w.minutes), this.seconds(w.seconds), this.milliseconds(w.milliseconds);
|
|
585
585
|
}
|
|
586
586
|
return this;
|
|
587
|
-
},
|
|
587
|
+
}, O.fn.leapYear = function() {
|
|
588
588
|
var t = this.year();
|
|
589
589
|
return t % 4 === 0 ? t % 100 === 0 ? t % 400 === 0 : !0 : !1;
|
|
590
|
-
},
|
|
590
|
+
}, O.fn.timestamp = function(t) {
|
|
591
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
|
-
},
|
|
592
|
+
}, O.fn.utc = function(t) {
|
|
593
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
|
-
},
|
|
594
|
+
}, O.fn.dayOfWeek = function(t) {
|
|
595
595
|
if (t === "long")
|
|
596
|
-
return
|
|
596
|
+
return D[this._d.getDay()];
|
|
597
597
|
if (t === "short")
|
|
598
|
-
return
|
|
599
|
-
if (t ===
|
|
598
|
+
return B[this._d.getDay()];
|
|
599
|
+
if (t === e)
|
|
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`) : o(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
|
+
}, O.fn.timezone = function(t) {
|
|
616
616
|
switch (t) {
|
|
617
617
|
case "hours":
|
|
618
618
|
return Math.floor(this._d.getTimezoneOffset() / 60);
|
|
@@ -621,7 +621,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
621
621
|
default:
|
|
622
622
|
return this._d.getTimezoneOffset() * 60;
|
|
623
623
|
}
|
|
624
|
-
},
|
|
624
|
+
}, O.fn.get = function(t) {
|
|
625
625
|
switch (t) {
|
|
626
626
|
case "Date":
|
|
627
627
|
return new Date(
|
|
@@ -670,172 +670,220 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : o(JSON.pars
|
|
|
670
670
|
timestamp: this.timestamp()
|
|
671
671
|
};
|
|
672
672
|
}
|
|
673
|
-
},
|
|
674
|
-
for (var
|
|
675
|
-
t.charAt(
|
|
676
|
-
return
|
|
677
|
-
},
|
|
673
|
+
}, O.fn.format = function(t) {
|
|
674
|
+
for (var a = 0, d = "", g; a < t.length; )
|
|
675
|
+
t.charAt(a) === "%" ? (g = t.charAt(a) + t.charAt(a + 1), S[g] !== e ? (d += S[g].format(this), a += 1) : d += "%") : d += t.charAt(a), a += 1;
|
|
676
|
+
return d;
|
|
677
|
+
}, O.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
|
+
}, O.fn.errors = function() {
|
|
680
680
|
return this._i;
|
|
681
|
-
},
|
|
682
|
-
var
|
|
683
|
-
switch (
|
|
681
|
+
}, O.fn.between = function(t, a) {
|
|
682
|
+
var d = this.timestamp(), g = t.timestamp();
|
|
683
|
+
switch (a) {
|
|
684
684
|
case "year":
|
|
685
|
-
return Math.floor((
|
|
685
|
+
return Math.floor((g - d) / 31556952);
|
|
686
686
|
case "month":
|
|
687
|
-
return Math.floor((
|
|
687
|
+
return Math.floor((g - d) / 2629746);
|
|
688
688
|
case "day":
|
|
689
|
-
return Math.floor((
|
|
689
|
+
return Math.floor((g - d) / 86400);
|
|
690
690
|
case "hours":
|
|
691
|
-
return Math.floor((
|
|
691
|
+
return Math.floor((g - d) / 3600);
|
|
692
692
|
case "minutes":
|
|
693
|
-
return Math.floor((
|
|
693
|
+
return Math.floor((g - d) / 60);
|
|
694
694
|
case "seconds":
|
|
695
|
-
return
|
|
695
|
+
return g - d;
|
|
696
696
|
default:
|
|
697
|
-
return
|
|
697
|
+
return e;
|
|
698
698
|
}
|
|
699
|
-
},
|
|
700
|
-
return t.year !==
|
|
701
|
-
}, s = function(t,
|
|
702
|
-
return new
|
|
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,
|
|
704
|
-
if (t ===
|
|
705
|
-
return
|
|
706
|
-
if (
|
|
707
|
-
if (
|
|
708
|
-
return
|
|
709
|
-
|
|
699
|
+
}, O.fn.calc = function(t) {
|
|
700
|
+
return t.year !== e && this._d.setFullYear(this._d.getFullYear() + t.year), t.month !== e && this._d.setMonth(this._d.getMonth() + t.month), t.day !== e && this._d.setDate(this._d.getDate() + t.day), t.hours !== e && this._d.setHours(this._d.getHours() + t.hours), t.minutes !== e && this._d.setMinutes(this._d.getMinutes() + t.minutes), t.seconds !== e && this._d.setSeconds(this._d.getSeconds() + t.seconds), t.milliseconds !== e && this._d.setMilliseconds(this._d.getMilliseconds() + t.milliseconds), this;
|
|
701
|
+
}, s = function(t, a, d) {
|
|
702
|
+
return new O(t, a, d);
|
|
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, a) {
|
|
704
|
+
if (t === e)
|
|
705
|
+
return W;
|
|
706
|
+
if (W.hasOwnProperty(t)) {
|
|
707
|
+
if (a === e)
|
|
708
|
+
return W[t];
|
|
709
|
+
W[t] = a, t === "monthFromZero" && (s.MIN_MONTH = a ? 0 : 1, s.MAX_MONTH = a ? 11 : 12);
|
|
710
710
|
}
|
|
711
|
-
return
|
|
711
|
+
return e;
|
|
712
712
|
}, s.noConflict = function() {
|
|
713
|
-
return i.tempus =
|
|
713
|
+
return i.tempus = h, s;
|
|
714
714
|
}, s.generate = function(t) {
|
|
715
|
-
var
|
|
716
|
-
if (typeof t.dateFrom != "number" && (t.dateFrom instanceof
|
|
715
|
+
var a, d, g, k, E, L, v, Y;
|
|
716
|
+
if (typeof t.dateFrom != "number" && (t.dateFrom instanceof O ? a = t.dateFrom.utc() : a = s(t.dateFrom, t.formatFrom).utc()), typeof t.dateTo != "number" && (t.dateTo instanceof O ? d = t.dateTo.utc() : d = s(t.dateTo, t.formatTo !== e ? t.formatTo : t.formatFrom).utc()), typeof t.period == "number" ? E = {
|
|
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" ? E = {
|
|
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" && (E = {
|
|
731
|
+
year: t.period.year !== e ? t.period.year : 0,
|
|
732
|
+
month: t.period.month !== e ? t.period.month : 0,
|
|
733
|
+
day: t.period.day !== e ? t.period.day : 0,
|
|
734
|
+
hours: t.period.hours !== e ? t.period.hours : 0,
|
|
735
|
+
minutes: t.period.minutes !== e ? t.period.minutes : 0,
|
|
736
|
+
seconds: t.period.seconds !== e ? t.period.seconds : 0
|
|
737
|
+
}), t.groupBy === e ? L = t.asObject === !0 ? {} : [] : (L = [], L.push([]), v = s(a).get()[t.groupBy]), Y = function(x, w, H) {
|
|
738
|
+
return t.asObject === !0 ? t.format !== e ? x[s(w).format(t.format)] = {} : x[s(w).format("%F %H:%M:%S")] = {} : t.format !== e ? x.push(H ? null : s(w).format(t.format)) : x.push(H ? null : s(w)), x;
|
|
739
|
+
}, t.groupBy !== e && t.fillNulls) {
|
|
740
|
+
var G = {
|
|
741
|
+
year: E.year ? -E.year : e,
|
|
742
|
+
month: E.month ? -E.month : e,
|
|
743
|
+
day: E.day ? -E.day : e,
|
|
744
|
+
hours: E.hours ? -E.hours : e,
|
|
745
|
+
minutes: E.minutes ? -E.minutes : e,
|
|
746
|
+
seconds: E.seconds ? -E.seconds : e,
|
|
747
|
+
milliseconds: E.milliseconds ? -E.milliseconds : e
|
|
748
748
|
};
|
|
749
|
-
for (
|
|
750
|
-
|
|
749
|
+
for (g = s(a).calc(G).utc(); s(g).get()[t.groupBy] === v; )
|
|
750
|
+
Y(L[L.length - 1], g, !0), g = s(g).calc(G).utc();
|
|
751
751
|
if (t.groupBy === "week") {
|
|
752
|
-
var
|
|
753
|
-
for (
|
|
754
|
-
|
|
752
|
+
var C = s(a).dayOfWeek();
|
|
753
|
+
for (g = s(a).dayOfWeek(0).utc(); L[0].length < C && g < a; )
|
|
754
|
+
Y(L[L.length - 1], g, !0), g = s(g).calc(E).utc();
|
|
755
755
|
}
|
|
756
756
|
}
|
|
757
|
-
for (;
|
|
758
|
-
t.groupBy ===
|
|
759
|
-
if (t.groupBy !==
|
|
760
|
-
for (
|
|
761
|
-
|
|
762
|
-
return
|
|
757
|
+
for (; a <= d; )
|
|
758
|
+
t.groupBy === e ? Y(L, a) : s(a).get()[t.groupBy] === v ? Y(L[L.length - 1], a) : (L.push([]), Y(L[L.length - 1], a), v = s(a).get()[t.groupBy]), a = s(a).calc(E).utc();
|
|
759
|
+
if (t.groupBy !== e && t.fillNulls)
|
|
760
|
+
for (k = s(d).calc(E).utc(); s(k).get()[t.groupBy] === v; )
|
|
761
|
+
Y(L[L.length - 1], k, !0), k = s(k).calc(E).utc();
|
|
762
|
+
return L;
|
|
763
763
|
}, s.monthNames = function(t) {
|
|
764
764
|
switch (t) {
|
|
765
765
|
case "long":
|
|
766
|
-
return
|
|
766
|
+
return b;
|
|
767
767
|
default:
|
|
768
|
-
return
|
|
768
|
+
return M;
|
|
769
769
|
}
|
|
770
770
|
}, s.dayNames = function(t) {
|
|
771
771
|
switch (t) {
|
|
772
772
|
case "long":
|
|
773
|
-
return
|
|
773
|
+
return D;
|
|
774
774
|
default:
|
|
775
|
-
return
|
|
775
|
+
return B;
|
|
776
776
|
}
|
|
777
777
|
}, s.lang = function(t) {
|
|
778
|
-
if (t !==
|
|
779
|
-
|
|
778
|
+
if (t !== e)
|
|
779
|
+
A = t, u[A] === e && (A = "en"), b = N(), M = y(), D = p(), B = R();
|
|
780
780
|
else
|
|
781
|
-
return
|
|
782
|
-
return
|
|
781
|
+
return A;
|
|
782
|
+
return e;
|
|
783
783
|
}, s.availableLangs = function() {
|
|
784
|
-
return Object.keys(
|
|
785
|
-
}, s.registerFormat = function(t,
|
|
786
|
-
|
|
787
|
-
format:
|
|
788
|
-
parse:
|
|
789
|
-
minLength:
|
|
790
|
-
maxLength:
|
|
791
|
-
type:
|
|
784
|
+
return Object.keys(u);
|
|
785
|
+
}, s.registerFormat = function(t, a, d, g, k, E) {
|
|
786
|
+
S[t] = {
|
|
787
|
+
format: a,
|
|
788
|
+
parse: d,
|
|
789
|
+
minLength: g,
|
|
790
|
+
maxLength: k,
|
|
791
|
+
type: E
|
|
792
792
|
};
|
|
793
793
|
}, s.unregisterFormat = function(t) {
|
|
794
|
-
delete
|
|
794
|
+
delete S[t];
|
|
795
795
|
}, s.detectFormat = function(t) {
|
|
796
|
-
var
|
|
797
|
-
return
|
|
798
|
-
},
|
|
799
|
-
TempusDate:
|
|
800
|
-
}, s.classes = function(t,
|
|
801
|
-
if (
|
|
802
|
-
return
|
|
803
|
-
|
|
796
|
+
var a, d, g;
|
|
797
|
+
return a = c(t, 0), a !== "" && (g = 10), d = t.charAt(g), (d === "T" || d === " ") && (a += d, g += 1), a += l(t, g), a;
|
|
798
|
+
}, f = {
|
|
799
|
+
TempusDate: O
|
|
800
|
+
}, s.classes = function(t, a) {
|
|
801
|
+
if (a === e)
|
|
802
|
+
return f[t];
|
|
803
|
+
f[t] = a;
|
|
804
804
|
}, s.loadTranslations = function(t) {
|
|
805
|
-
typeof t == "object" ?
|
|
806
|
-
|
|
807
|
-
}, function(
|
|
805
|
+
typeof t == "object" ? u = t : typeof t == "string" && F(t, function(a) {
|
|
806
|
+
u = a;
|
|
807
|
+
}, function(a) {
|
|
808
808
|
});
|
|
809
|
-
},
|
|
810
|
-
}).call(
|
|
811
|
-
})(
|
|
812
|
-
var
|
|
813
|
-
const rt = /* @__PURE__ */
|
|
809
|
+
}, A = (m.language || m.systemLanguage || m.userLanguage || "en").substr(0, 2).toLowerCase(), u[A] === e && (A = "en"), b = N(), M = y(), D = p(), B = R(), _.exports && (r = _.exports = s), r.tempus = s;
|
|
810
|
+
}).call(Tt);
|
|
811
|
+
})(lt, lt.exports);
|
|
812
|
+
var Lt = lt.exports;
|
|
813
|
+
const rt = /* @__PURE__ */ Rt(Lt);
|
|
814
814
|
class K {
|
|
815
|
-
constructor(
|
|
816
|
-
this.callBatch =
|
|
815
|
+
constructor(r) {
|
|
816
|
+
this.callBatch = r, 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(), this.filterChunkSize = 50;
|
|
817
817
|
}
|
|
818
818
|
/**
|
|
819
819
|
* Извлечение данных из ответа API с учетом различных форматов
|
|
820
820
|
* @param {Object} data - Ответ от API
|
|
821
821
|
* @returns {any} Данные из ответа
|
|
822
822
|
*/
|
|
823
|
-
getData(
|
|
824
|
-
return (
|
|
823
|
+
getData(r) {
|
|
824
|
+
return (r == null ? void 0 : r.items) ?? (r == null ? void 0 : r.tasks) ?? (r == null ? void 0 : r.types) ?? (r == null ? void 0 : r.type) ?? (r == null ? void 0 : r.fields) ?? (r == null ? void 0 : r.workgroups) ?? r;
|
|
825
|
+
}
|
|
826
|
+
/**
|
|
827
|
+
* Проверяет, содержит ли запрос большие массивы в фильтрах, которые могут вызвать 500 ошибку
|
|
828
|
+
* Разбивает такие запросы на несколько запросов с меньшими фильтрами
|
|
829
|
+
* @param {string} key - Ключ запроса
|
|
830
|
+
* @param {Object} request - Объект запроса {method, params}
|
|
831
|
+
* @returns {Array} Массив запросов (может быть один или несколько)
|
|
832
|
+
*/
|
|
833
|
+
splitLargeFilters(r, e) {
|
|
834
|
+
const { method: i, params: n } = e;
|
|
835
|
+
if (!n)
|
|
836
|
+
return [{ key: r, request: e }];
|
|
837
|
+
const o = n.filter || n.FILTER;
|
|
838
|
+
if (!o || typeof o != "object" || Array.isArray(o))
|
|
839
|
+
return [{ key: r, request: e }];
|
|
840
|
+
for (const [l, c] of Object.entries(o))
|
|
841
|
+
if (Array.isArray(c) && c.length > this.filterChunkSize) {
|
|
842
|
+
const h = [];
|
|
843
|
+
for (let s = 0; s < c.length; s += this.filterChunkSize) {
|
|
844
|
+
const f = c.slice(s, s + this.filterChunkSize), m = s === 0 ? r : `${r}__chunk_${Math.floor(s / this.filterChunkSize)}`, A = { ...n };
|
|
845
|
+
n.filter ? (A.filter = { ...o }, A.filter[l] = f) : n.FILTER && (A.FILTER = { ...o }, A.FILTER[l] = f), h.push({
|
|
846
|
+
key: m,
|
|
847
|
+
request: { method: i, params: A },
|
|
848
|
+
originalKey: r,
|
|
849
|
+
filterKey: l,
|
|
850
|
+
chunkIndex: Math.floor(s / this.filterChunkSize)
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
return h;
|
|
854
|
+
}
|
|
855
|
+
return [{ key: r, request: e }];
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Объединяет результаты разбитых запросов обратно в один результат
|
|
859
|
+
* @param {Object} results - Результаты выполнения разбитых запросов
|
|
860
|
+
* @param {string} originalKey - Оригинальный ключ запроса
|
|
861
|
+
* @returns {Array} Объединенный массив результатов
|
|
862
|
+
*/
|
|
863
|
+
mergeSplitResults(r, e) {
|
|
864
|
+
const i = [], n = Object.keys(r).filter((o) => o.startsWith(e)).sort((o, l) => {
|
|
865
|
+
const c = o.match(/__chunk_(\d+)$/), h = l.match(/__chunk_(\d+)$/);
|
|
866
|
+
return c ? h ? parseInt(c[1]) - parseInt(h[1]) : 1 : -1;
|
|
867
|
+
});
|
|
868
|
+
for (const o of n) {
|
|
869
|
+
const l = r[o];
|
|
870
|
+
Array.isArray(l) ? i.push(...l) : l && i.push(l);
|
|
871
|
+
}
|
|
872
|
+
return i;
|
|
825
873
|
}
|
|
826
874
|
/**
|
|
827
875
|
* Вычисление текущего прогресса выполнения batch запросов
|
|
828
876
|
* @returns {{percent: number, allCount: number, allTotal: number}}
|
|
829
877
|
*/
|
|
830
878
|
get progressPercent() {
|
|
831
|
-
let
|
|
879
|
+
let r = 0;
|
|
832
880
|
if (!this.progressData)
|
|
833
|
-
return { percent: Math.round(
|
|
834
|
-
let
|
|
881
|
+
return { percent: Math.round(r), allCount: 0, allTotal: 0 };
|
|
882
|
+
let e = 0, i = 0;
|
|
835
883
|
return Object.values(this.progressData).forEach((n) => {
|
|
836
|
-
const { total:
|
|
837
|
-
|
|
838
|
-
}),
|
|
884
|
+
const { total: o, count: l } = n;
|
|
885
|
+
e += o ?? 0, i += l ?? 0;
|
|
886
|
+
}), e ? r = i / e * 100 * this.chunkRate + this.totalProgress : i === 0 && e === 0 ? r = 100 * this.chunkRate + this.totalProgress : r = 100, { percent: Math.round(r), allCount: i, allTotal: e };
|
|
839
887
|
}
|
|
840
888
|
/**
|
|
841
889
|
* Обновление данных прогресса выполнения
|
|
@@ -844,19 +892,19 @@ class K {
|
|
|
844
892
|
* @param {Object} params.value - Значение ответа от API
|
|
845
893
|
* @param {string} params.type - Тип обработки ('count' или undefined)
|
|
846
894
|
*/
|
|
847
|
-
setProgressData({ key:
|
|
848
|
-
const n = this.getData(
|
|
849
|
-
let
|
|
850
|
-
i === "count" && (
|
|
895
|
+
setProgressData({ key: r, value: e, type: i }) {
|
|
896
|
+
const n = this.getData(e.data()), o = Array.isArray(n) ? n.length : 0;
|
|
897
|
+
let l = e.total() || o;
|
|
898
|
+
i === "count" && (l = o);
|
|
851
899
|
let c = 1;
|
|
852
|
-
n && (c =
|
|
853
|
-
const { percent:
|
|
900
|
+
n && (c = o), this.progressCall && (this.progressData || (this.progressData = {}), this.progressData[r] && this.progressData[r].count && (c += this.progressData[r].count), this.progressData[r] ? this.progressData[r].count = c : this.progressData[r] = { total: l, count: c }, this.progressTimer || (this.progressTimer = setInterval(() => {
|
|
901
|
+
const { percent: h, allCount: s, allTotal: f } = this.progressPercent;
|
|
854
902
|
(this.oldPercent === "no" || this.oldPercent < this.progressPercent.percent) && (this.progressCall({
|
|
855
903
|
data: this.progressData,
|
|
856
|
-
percent:
|
|
904
|
+
percent: h,
|
|
857
905
|
allCount: s,
|
|
858
|
-
allTotal:
|
|
859
|
-
}), this.oldPercent = this.progressPercent.percent),
|
|
906
|
+
allTotal: f
|
|
907
|
+
}), this.oldPercent = this.progressPercent.percent), h >= 100 && this.clearProgressData();
|
|
860
908
|
}, this.progressDelay)));
|
|
861
909
|
}
|
|
862
910
|
/**
|
|
@@ -864,7 +912,7 @@ class K {
|
|
|
864
912
|
* @returns {Promise<void>}
|
|
865
913
|
*/
|
|
866
914
|
delay() {
|
|
867
|
-
return new Promise((
|
|
915
|
+
return new Promise((r) => setTimeout(r, 500));
|
|
868
916
|
}
|
|
869
917
|
/**
|
|
870
918
|
* Обертка над callBatch с таймаутом для предотвращения зависаний
|
|
@@ -874,28 +922,28 @@ class K {
|
|
|
874
922
|
* @param {Function} callback - Callback функция для обработки результата
|
|
875
923
|
* @returns {Promise<void>}
|
|
876
924
|
*/
|
|
877
|
-
callBatchWithTimeout(
|
|
925
|
+
callBatchWithTimeout(r, e) {
|
|
878
926
|
return new Promise((i, n) => {
|
|
879
|
-
let
|
|
880
|
-
const
|
|
881
|
-
let c = !1,
|
|
882
|
-
const
|
|
883
|
-
if (!
|
|
884
|
-
|
|
927
|
+
let o = !1;
|
|
928
|
+
const l = 6e4;
|
|
929
|
+
let c = !1, h = !1, s = !1, f = null, m = null;
|
|
930
|
+
const A = async (y, p) => {
|
|
931
|
+
if (!o) {
|
|
932
|
+
o = !0, f && clearTimeout(f), m && clearTimeout(m);
|
|
885
933
|
try {
|
|
886
|
-
await Promise.resolve(
|
|
887
|
-
} catch (
|
|
888
|
-
console.error(`Error in callBatch callback (attempt ${
|
|
934
|
+
await Promise.resolve(e(y)), i();
|
|
935
|
+
} catch (R) {
|
|
936
|
+
console.error(`Error in callBatch callback (attempt ${p}):`, R), n(R);
|
|
889
937
|
}
|
|
890
938
|
}
|
|
891
|
-
},
|
|
892
|
-
if (!
|
|
893
|
-
|
|
894
|
-
`Batch request timeout after ${
|
|
939
|
+
}, u = async () => {
|
|
940
|
+
if (!o) {
|
|
941
|
+
o = !0, f && clearTimeout(f), m && clearTimeout(m), console.warn(
|
|
942
|
+
`Batch request timeout after ${l}ms on both attempts. This may indicate a CORS or network error.`
|
|
895
943
|
);
|
|
896
|
-
const
|
|
897
|
-
Object.keys(
|
|
898
|
-
|
|
944
|
+
const y = {};
|
|
945
|
+
Object.keys(r).forEach((p) => {
|
|
946
|
+
y[p] = {
|
|
899
947
|
error: () => ({
|
|
900
948
|
ex: {
|
|
901
949
|
error: "TIMEOUT",
|
|
@@ -907,27 +955,27 @@ class K {
|
|
|
907
955
|
};
|
|
908
956
|
});
|
|
909
957
|
try {
|
|
910
|
-
await Promise.resolve(
|
|
911
|
-
} catch (
|
|
912
|
-
console.error("Error in timeout callback:",
|
|
958
|
+
await Promise.resolve(e(y)), i();
|
|
959
|
+
} catch (p) {
|
|
960
|
+
console.error("Error in timeout callback:", p), i();
|
|
913
961
|
}
|
|
914
962
|
}
|
|
915
|
-
},
|
|
963
|
+
}, N = (y) => {
|
|
916
964
|
try {
|
|
917
|
-
this.callBatch(
|
|
918
|
-
|
|
965
|
+
this.callBatch(r, async (p) => {
|
|
966
|
+
y === 1 && !c && !o ? (c = !0, await A(p, 1)) : y === 2 && !s && !o && (s = !0, await A(p, 2));
|
|
919
967
|
});
|
|
920
|
-
} catch (
|
|
921
|
-
|
|
968
|
+
} catch (p) {
|
|
969
|
+
o || console.error(`Error calling callBatch (attempt ${y}):`, p);
|
|
922
970
|
}
|
|
923
971
|
};
|
|
924
|
-
|
|
925
|
-
!c && !
|
|
926
|
-
`First batch request attempt timeout after ${
|
|
927
|
-
),
|
|
928
|
-
!c && !s && !
|
|
929
|
-
},
|
|
930
|
-
},
|
|
972
|
+
N(1), f = setTimeout(async () => {
|
|
973
|
+
!c && !o && !h && (console.warn(
|
|
974
|
+
`First batch request attempt timeout after ${l}ms. Starting second attempt...`
|
|
975
|
+
), h = !0, N(2), m = setTimeout(async () => {
|
|
976
|
+
!c && !s && !o && await u();
|
|
977
|
+
}, l));
|
|
978
|
+
}, l);
|
|
931
979
|
});
|
|
932
980
|
}
|
|
933
981
|
/**
|
|
@@ -947,90 +995,153 @@ class K {
|
|
|
947
995
|
* @param {Function} progressCall - Функция получающая данные выполнения батча
|
|
948
996
|
* @returns {Promise}
|
|
949
997
|
*/
|
|
950
|
-
async batch(
|
|
951
|
-
this.progressTimer && this.clearProgressData(),
|
|
952
|
-
const n = {};
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
if (!this.canContinue)
|
|
957
|
-
break;
|
|
958
|
-
const s = this.arrayChunk(A);
|
|
959
|
-
if (!s) {
|
|
960
|
-
u++;
|
|
998
|
+
async batch(r, e, i) {
|
|
999
|
+
this.progressTimer && this.clearProgressData(), e && (this.progressCall = e), i && (this.limitCall = i), this.canContinue = !0, this.result = {}, this.errors = {};
|
|
1000
|
+
const n = {}, o = {}, l = {};
|
|
1001
|
+
for (const [f, m] of Object.entries(r)) {
|
|
1002
|
+
const A = this.arrayChunk(m);
|
|
1003
|
+
if (!A)
|
|
961
1004
|
continue;
|
|
1005
|
+
const u = this.splitLargeFilters(f, A);
|
|
1006
|
+
if (u.length === 1)
|
|
1007
|
+
o[f] = A;
|
|
1008
|
+
else {
|
|
1009
|
+
l[f] = [];
|
|
1010
|
+
for (const N of u)
|
|
1011
|
+
o[N.key] = N.request, l[f].push(N.key);
|
|
962
1012
|
}
|
|
963
|
-
|
|
964
|
-
|
|
1013
|
+
}
|
|
1014
|
+
this.chunkRate = (1 / Math.ceil(Object.keys(o).length / this.limit)).toFixed(5);
|
|
1015
|
+
let c = {}, h = 0;
|
|
1016
|
+
const s = Object.keys(o).length;
|
|
1017
|
+
for (const [f, m] of Object.entries(o)) {
|
|
1018
|
+
if (!this.canContinue)
|
|
1019
|
+
break;
|
|
1020
|
+
c[f] = m, (Object.keys(c).length >= 50 || h + 1 === s) && (await this.batchChunk(c), Object.entries(this.result).forEach(([A, u]) => {
|
|
1021
|
+
n[A] = u;
|
|
965
1022
|
}), this.totalProgress = Math.round(
|
|
966
|
-
|
|
967
|
-
),
|
|
1023
|
+
h / s * 100
|
|
1024
|
+
), c = {}), h++;
|
|
968
1025
|
}
|
|
969
|
-
|
|
1026
|
+
for (const [f, m] of Object.entries(l))
|
|
1027
|
+
if (m && m.length > 0) {
|
|
1028
|
+
const A = this.mergeSplitResults(n, f);
|
|
1029
|
+
for (const u of m)
|
|
1030
|
+
delete n[u];
|
|
1031
|
+
n[f] = A;
|
|
1032
|
+
}
|
|
1033
|
+
return Object.entries(this.errors).length && (n.errorsList = this.errors), e && e({ percent: 100 }), Promise.resolve(n);
|
|
970
1034
|
}
|
|
971
1035
|
/**
|
|
972
|
-
*
|
|
973
|
-
*
|
|
974
|
-
*
|
|
1036
|
+
* Выполняет батч-запрос и возвращает только количество элементов для каждой команды.
|
|
1037
|
+
* Метод использует `total()` из ответа Bitrix и не догружает постранично,
|
|
1038
|
+
* что уменьшает число REST-запросов при подсчёте больших выборок.
|
|
975
1039
|
*
|
|
976
1040
|
* @param {Object} requestList - Объект с методами для выполнения
|
|
977
1041
|
* @param {Function} progressCall - Callback для отслеживания прогресса
|
|
978
1042
|
* @param {Function} limitCall - Callback при превышении лимитов
|
|
979
1043
|
* @returns {Promise<Object>} Объект с количеством элементов для каждого ключа
|
|
980
1044
|
*/
|
|
981
|
-
async batchTotalCount(
|
|
982
|
-
this.progressTimer && this.clearProgressData(),
|
|
983
|
-
const n = {};
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
if (!this.canContinue)
|
|
988
|
-
break;
|
|
989
|
-
const s = this.arrayChunk(A);
|
|
990
|
-
if (!s) {
|
|
991
|
-
u++;
|
|
1045
|
+
async batchTotalCount(r, e, i) {
|
|
1046
|
+
this.progressTimer && this.clearProgressData(), e && (this.progressCall = e), i && (this.limitCall = i), this.canContinue = !0, this.result = {}, this.errors = {};
|
|
1047
|
+
const n = {}, o = {}, l = {};
|
|
1048
|
+
for (const [s, f] of Object.entries(r)) {
|
|
1049
|
+
const m = this.arrayChunk(f);
|
|
1050
|
+
if (!m)
|
|
992
1051
|
continue;
|
|
1052
|
+
const A = this.splitLargeFilters(s, m);
|
|
1053
|
+
if (A.length === 1)
|
|
1054
|
+
o[s] = m;
|
|
1055
|
+
else {
|
|
1056
|
+
l[s] = [];
|
|
1057
|
+
for (const u of A)
|
|
1058
|
+
o[u.key] = u.request, l[s].push(u.key);
|
|
993
1059
|
}
|
|
994
|
-
a[c] = s, (Object.keys(a).length >= 50 || u + 1 === Object.keys(e).length) && (await this.batchChunk(a, "count"), Object.entries(this.result).forEach(([d, N]) => {
|
|
995
|
-
n[d] = N;
|
|
996
|
-
}), this.totalProgress = Math.round(
|
|
997
|
-
u / Object.keys(e).length * 100
|
|
998
|
-
), a = {}), u++;
|
|
999
1060
|
}
|
|
1000
|
-
|
|
1061
|
+
const c = [], h = Object.entries(o);
|
|
1062
|
+
for (let s = 0; s < h.length; s += this.limit) {
|
|
1063
|
+
const f = h.slice(s, s + this.limit), m = {};
|
|
1064
|
+
for (const [A, u] of f) {
|
|
1065
|
+
if (!this.canContinue)
|
|
1066
|
+
break;
|
|
1067
|
+
m[A] = u;
|
|
1068
|
+
}
|
|
1069
|
+
Object.keys(m).length > 0 && c.push(m);
|
|
1070
|
+
}
|
|
1071
|
+
this.chunkRate = (1 / c.length).toFixed(5);
|
|
1072
|
+
for (const [s, f] of Object.entries(c)) {
|
|
1073
|
+
if (!this.canContinue)
|
|
1074
|
+
break;
|
|
1075
|
+
this.totalProgress = Math.round(Number(s) / c.length * 100), await this.callBatchWithTimeout(f, async (m) => {
|
|
1076
|
+
var A, u, N, y, p, R, b;
|
|
1077
|
+
for (const [M, D] of Object.entries(m)) {
|
|
1078
|
+
if (!this.canContinue)
|
|
1079
|
+
return;
|
|
1080
|
+
if (D.error()) {
|
|
1081
|
+
const O = (u = (A = D.error()) == null ? void 0 : A.ex) == null ? void 0 : u.error, t = (y = (N = D.error()) == null ? void 0 : N.ex) == null ? void 0 : y.error_description;
|
|
1082
|
+
this.errors[M] = O && O.trim() || t && t.trim() || ((p = D.error()) == null ? void 0 : p.toString()) || "Неизвестная ошибка", n[M] = 0;
|
|
1083
|
+
const a = ((b = (R = D.error()) == null ? void 0 : R.ex) == null ? void 0 : b.error) ?? "";
|
|
1084
|
+
let d = "";
|
|
1085
|
+
const g = f[M];
|
|
1086
|
+
switch (Array.isArray(g) ? [d] = g : g != null && g.method && (d = g.method), a) {
|
|
1087
|
+
case "OPERATION_TIME_LIMIT":
|
|
1088
|
+
d && this.skipList.add(d), this.limitCall && this.limitCall(M);
|
|
1089
|
+
break;
|
|
1090
|
+
case "ACCESS_DENIED":
|
|
1091
|
+
d && this.skipList.add(d);
|
|
1092
|
+
break;
|
|
1093
|
+
case "TIMEOUT":
|
|
1094
|
+
d && this.skipList.add(d), this.limitCall && this.limitCall(M);
|
|
1095
|
+
break;
|
|
1096
|
+
}
|
|
1097
|
+
continue;
|
|
1098
|
+
}
|
|
1099
|
+
const B = this.getData(D.data()), F = Array.isArray(B) ? B.length : 0, W = typeof D.total == "function" && D.total() !== void 0 ? D.total() : F;
|
|
1100
|
+
n[M] = W, this.setProgressData({ key: M, value: D, type: "count" });
|
|
1101
|
+
}
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
for (const [s, f] of Object.entries(l))
|
|
1105
|
+
if (f && f.length > 0) {
|
|
1106
|
+
let m = 0;
|
|
1107
|
+
for (const A of f)
|
|
1108
|
+
n[A] !== void 0 && (m += n[A] || 0), delete n[A];
|
|
1109
|
+
n[s] = m;
|
|
1110
|
+
}
|
|
1111
|
+
return Object.entries(this.errors).length && (n.errorsList = this.errors, this.errorLogger()), e && e({ percent: 100 }), Promise.resolve(n);
|
|
1001
1112
|
}
|
|
1002
1113
|
/** Валидация запросов
|
|
1003
1114
|
* Чтобы не перегружать Битрикс сервера запросами с start - добавляем нужные поля в параметры
|
|
1004
1115
|
* Так же переделываем некоторые запросы в нужный вид (Для task-методов)
|
|
1005
1116
|
* @param {Array/Object} request - Массив/объект методов
|
|
1006
1117
|
*/
|
|
1007
|
-
arrayChunk(
|
|
1008
|
-
let
|
|
1009
|
-
if (Array.isArray(
|
|
1118
|
+
arrayChunk(r) {
|
|
1119
|
+
let e = "", i = {};
|
|
1120
|
+
if (Array.isArray(r) ? [e] = r : (e = r.method, i = r.params), this.skipList.has(e))
|
|
1010
1121
|
return !1;
|
|
1011
|
-
if ((
|
|
1122
|
+
if ((e.includes("list") || e === "user.get") && e !== "task.item.list") {
|
|
1012
1123
|
if (!i)
|
|
1013
1124
|
i = {
|
|
1014
1125
|
order: { ID: "ASC", id: "ASC" }
|
|
1015
1126
|
};
|
|
1016
1127
|
else {
|
|
1017
|
-
|
|
1018
|
-
const n =
|
|
1019
|
-
typeof n == "object" && n !== null && !Array.isArray(n) && Object.entries(n).forEach(([
|
|
1020
|
-
(i.start === void 0 || i.start !== -1) && ["id", "ID"].includes(
|
|
1128
|
+
e === "tasks.task.list" ? (i.order || (i.order = {}), i.order.ID = "asc") : e === "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");
|
|
1129
|
+
const n = e === "user.get" ? i.FILTER : i.filter;
|
|
1130
|
+
typeof n == "object" && n !== null && !Array.isArray(n) && Object.entries(n).forEach(([o, l]) => {
|
|
1131
|
+
(i.start === void 0 || i.start !== -1) && ["id", "ID"].includes(o) && (typeof l == "string" || Array.isArray(l) && l.length <= 50) && (i.start = -1);
|
|
1021
1132
|
});
|
|
1022
1133
|
}
|
|
1023
|
-
|
|
1134
|
+
e === "crm.type.list" && i.order && delete i.order.ID;
|
|
1024
1135
|
}
|
|
1025
|
-
if (
|
|
1136
|
+
if (e === "task.item.list")
|
|
1026
1137
|
if (!i)
|
|
1027
1138
|
i = [{ ID: "ASC" }, [""], [""], ["ID"]];
|
|
1028
1139
|
else {
|
|
1029
1140
|
Array.isArray(i[0]) && (i[0] = {});
|
|
1030
|
-
const [n,
|
|
1141
|
+
const [n, o, l, c] = i;
|
|
1031
1142
|
n.ID = "ASC", c[0] !== "" && c.includes("ID") || c.push("ID");
|
|
1032
1143
|
}
|
|
1033
|
-
return { method:
|
|
1144
|
+
return { method: e, params: i };
|
|
1034
1145
|
}
|
|
1035
1146
|
/** Выполняет первичный запрос с массивом методов
|
|
1036
1147
|
* При наличии более 50 элементов в нем, подготоваливаем данные и передаем в this.batchPayload
|
|
@@ -1038,46 +1149,46 @@ class K {
|
|
|
1038
1149
|
* @param {Array} query - Тот же массив с методами
|
|
1039
1150
|
* @returns {Object} Объект с результатами запросов
|
|
1040
1151
|
*/
|
|
1041
|
-
async batchChunk(
|
|
1152
|
+
async batchChunk(r, e) {
|
|
1042
1153
|
return new Promise((i) => {
|
|
1043
1154
|
const n = [];
|
|
1044
|
-
let
|
|
1045
|
-
this.callBatchWithTimeout(
|
|
1046
|
-
var c,
|
|
1047
|
-
for (const [
|
|
1155
|
+
let o;
|
|
1156
|
+
this.callBatchWithTimeout(r, async (l) => {
|
|
1157
|
+
var c, h, s, f, m, A, u;
|
|
1158
|
+
for (const [N, y] of Object.entries(l)) {
|
|
1048
1159
|
if (!this.canContinue)
|
|
1049
1160
|
return;
|
|
1050
|
-
if (
|
|
1051
|
-
const
|
|
1052
|
-
switch (this.errors[
|
|
1161
|
+
if (y.error()) {
|
|
1162
|
+
const B = (h = (c = y.error()) == null ? void 0 : c.ex) == null ? void 0 : h.error, F = (f = (s = y.error()) == null ? void 0 : s.ex) == null ? void 0 : f.error_description;
|
|
1163
|
+
switch (this.errors[N] = B && B.trim() || F && F.trim() || ((m = y.error()) == null ? void 0 : m.toString()) || "Неизвестная ошибка", o = !0, ((u = (A = y.error()) == null ? void 0 : A.ex) == null ? void 0 : u.error) ?? "") {
|
|
1053
1164
|
case "OPERATION_TIME_LIMIT":
|
|
1054
|
-
this.skipList.add(
|
|
1165
|
+
this.skipList.add(r[N].method), this.limitCall && this.limitCall(N);
|
|
1055
1166
|
break;
|
|
1056
1167
|
case "ACCESS_DENIED":
|
|
1057
|
-
this.skipList.add(
|
|
1168
|
+
this.skipList.add(r[N].method);
|
|
1058
1169
|
break;
|
|
1059
1170
|
case "TIMEOUT":
|
|
1060
|
-
let
|
|
1061
|
-
Array.isArray(
|
|
1171
|
+
let W = r[N], O = "";
|
|
1172
|
+
Array.isArray(W) ? [O] = W : W != null && W.method && (O = W.method), O && this.skipList.add(O), this.limitCall && this.limitCall(N);
|
|
1062
1173
|
break;
|
|
1063
1174
|
}
|
|
1064
1175
|
}
|
|
1065
|
-
const
|
|
1066
|
-
|
|
1067
|
-
const
|
|
1068
|
-
if (!this.canContinue ||
|
|
1069
|
-
let
|
|
1070
|
-
if (Array.isArray(
|
|
1071
|
-
const [
|
|
1072
|
-
|
|
1176
|
+
const p = this.getData(y.data()), R = Array.isArray(p) ? p.length : 0, b = typeof y.total == "function" && y.total() !== void 0, M = b ? y.total() : R;
|
|
1177
|
+
e === "count" ? this.result[N] ? this.result[N] += R : this.result[N] = M : this.result[N] = p, this.setProgressData({ key: N, value: y, type: e });
|
|
1178
|
+
const D = e === "count" ? !b && R === this.limit : M > this.limit && M > R;
|
|
1179
|
+
if (!this.canContinue || D) {
|
|
1180
|
+
let B = r[N];
|
|
1181
|
+
if (Array.isArray(B)) {
|
|
1182
|
+
const [F, S = {}] = B;
|
|
1183
|
+
B = [F, S];
|
|
1073
1184
|
} else {
|
|
1074
|
-
const { method:
|
|
1075
|
-
|
|
1185
|
+
const { method: F, params: S = {} } = B;
|
|
1186
|
+
B = [F, S];
|
|
1076
1187
|
}
|
|
1077
|
-
n.push([
|
|
1188
|
+
n.push([N, B, M]);
|
|
1078
1189
|
}
|
|
1079
1190
|
}
|
|
1080
|
-
|
|
1191
|
+
o > 0 && this.errorLogger(), n.length ? await this.batchPayload(n, e).then(
|
|
1081
1192
|
() => i(this.result)
|
|
1082
1193
|
) : i(this.result);
|
|
1083
1194
|
});
|
|
@@ -1087,82 +1198,82 @@ class K {
|
|
|
1087
1198
|
* @param {Array} payloadList - Массив с подмассивами списочных методов
|
|
1088
1199
|
* @param {String} type - Тип обработки результатов ('count' или undefined)
|
|
1089
1200
|
*/
|
|
1090
|
-
async batchPayload(
|
|
1091
|
-
const i = /* @__PURE__ */ new Map(), n = (
|
|
1092
|
-
let
|
|
1093
|
-
this.result[
|
|
1094
|
-
let
|
|
1095
|
-
if (JSON.stringify(
|
|
1201
|
+
async batchPayload(r, e) {
|
|
1202
|
+
const i = /* @__PURE__ */ new Map(), n = (h, s, f, m) => {
|
|
1203
|
+
let A = "ID";
|
|
1204
|
+
this.result[h][this.result[h].length - 1].ID || (A = "id");
|
|
1205
|
+
let u = `${A}`;
|
|
1206
|
+
if (JSON.stringify(m[1]).toLocaleLowerCase().includes('"id":"desc"') ? u = "<" + u : u = ">" + u, s === 1 || f.length === 0)
|
|
1096
1207
|
return {
|
|
1097
|
-
field:
|
|
1098
|
-
id: this.result[
|
|
1208
|
+
field: u,
|
|
1209
|
+
id: this.result[h][this.result[h].length - 1][A]
|
|
1099
1210
|
};
|
|
1100
|
-
let
|
|
1101
|
-
const [
|
|
1102
|
-
return (
|
|
1103
|
-
field:
|
|
1104
|
-
id: `$result[${[
|
|
1211
|
+
let y = "";
|
|
1212
|
+
const [p, R] = m;
|
|
1213
|
+
return (p === "tasks.task.list" || p === "task.item.list") && (y = "[tasks]"), ["crm.item.list", "crm.stagehistory.list"].includes(p) && (y = "[items]"), p === "crm.type.list" && (y = "[types]"), p === "socialnetwork.api.workgroup.list" && (y = "[workgroups]"), {
|
|
1214
|
+
field: u,
|
|
1215
|
+
id: `$result[${[h, s - 1].join("__")}]${y}[49][${A}]`
|
|
1105
1216
|
};
|
|
1106
|
-
},
|
|
1107
|
-
const [
|
|
1108
|
-
let
|
|
1109
|
-
if (
|
|
1110
|
-
|
|
1111
|
-
const [
|
|
1112
|
-
return
|
|
1217
|
+
}, o = (h, s) => {
|
|
1218
|
+
const [f, m] = h;
|
|
1219
|
+
let A = JSON.parse(JSON.stringify(m)), u;
|
|
1220
|
+
if (f === "task.item.list") {
|
|
1221
|
+
A = [...A];
|
|
1222
|
+
const [N, y, p, R] = A;
|
|
1223
|
+
return y[s.field] = s.id, [f, A];
|
|
1113
1224
|
}
|
|
1114
|
-
return ["user.get"].includes(
|
|
1225
|
+
return ["user.get"].includes(f) || A.FILTER ? (A.FILTER || (A.FILTER = {}), u = A.FILTER) : (A.filter || (A.filter = {}), u = A.filter), [
|
|
1115
1226
|
"socialnetwork.api.workgroup.list",
|
|
1116
1227
|
"tasks.task.list"
|
|
1117
|
-
].includes(
|
|
1118
|
-
},
|
|
1119
|
-
Object.entries(
|
|
1120
|
-
var
|
|
1121
|
-
const [
|
|
1122
|
-
if (Array.isArray(
|
|
1123
|
-
const
|
|
1124
|
-
this.errors[
|
|
1125
|
-
const
|
|
1126
|
-
switch (
|
|
1228
|
+
].includes(f) ? u[">ID"] = s.id : u[s.field] = s.id, [f, { ...A, start: -1 }];
|
|
1229
|
+
}, l = (h) => {
|
|
1230
|
+
Object.entries(h).forEach(([s, f]) => {
|
|
1231
|
+
var u, N, y, p, R, b, M;
|
|
1232
|
+
const [m] = s.split("__"), A = this.getData(f.data());
|
|
1233
|
+
if (Array.isArray(A) && (e === "count" ? this.result[m] += A.length : this.result[m].push(...A)), f.error()) {
|
|
1234
|
+
const D = (N = (u = f.error()) == null ? void 0 : u.ex) == null ? void 0 : N.error, B = (p = (y = f.error()) == null ? void 0 : y.ex) == null ? void 0 : p.error_description;
|
|
1235
|
+
this.errors[m] = D && D.trim() || B && B.trim() || ((R = f.error()) == null ? void 0 : R.toString()) || "Неизвестная ошибка";
|
|
1236
|
+
const F = ((M = (b = f.error()) == null ? void 0 : b.ex) == null ? void 0 : M.error) ?? "", S = i.get(m);
|
|
1237
|
+
switch (F) {
|
|
1127
1238
|
case "OPERATION_TIME_LIMIT":
|
|
1128
|
-
|
|
1239
|
+
S && (this.skipList.add(S), this.limitCall && this.limitCall(m));
|
|
1129
1240
|
break;
|
|
1130
1241
|
case "QUERY_LIMIT_EXCEEDED":
|
|
1131
1242
|
this.canContinue = !1;
|
|
1132
1243
|
break;
|
|
1133
1244
|
case "ACCESS_DENIED":
|
|
1134
|
-
|
|
1245
|
+
S && this.skipList.add(S);
|
|
1135
1246
|
break;
|
|
1136
1247
|
case "TIMEOUT":
|
|
1137
|
-
|
|
1248
|
+
S && (this.skipList.add(S), this.limitCall && this.limitCall(m));
|
|
1138
1249
|
break;
|
|
1139
1250
|
}
|
|
1140
1251
|
}
|
|
1141
|
-
this.setProgressData({ key:
|
|
1252
|
+
this.setProgressData({ key: m, value: f, type: e });
|
|
1142
1253
|
});
|
|
1143
1254
|
};
|
|
1144
1255
|
let c = [];
|
|
1145
|
-
for await (const [
|
|
1256
|
+
for await (const [h, s, f] of r) {
|
|
1146
1257
|
if (!this.canContinue)
|
|
1147
1258
|
return;
|
|
1148
|
-
const [
|
|
1149
|
-
if (i.set(
|
|
1259
|
+
const [m] = s;
|
|
1260
|
+
if (i.set(h, m), this.skipList.has(m))
|
|
1150
1261
|
continue;
|
|
1151
|
-
let
|
|
1152
|
-
for (;
|
|
1153
|
-
const
|
|
1154
|
-
c.push([
|
|
1262
|
+
let A = 1;
|
|
1263
|
+
for (; f > A * 50 && !this.skipList.has(m); ) {
|
|
1264
|
+
const u = [h, A].join("__"), N = n(h, A, c, s);
|
|
1265
|
+
c.push([u, o(s, N)]), c.length % 50 === 0 && (await this.callBatchWithTimeout(
|
|
1155
1266
|
Object.fromEntries(c),
|
|
1156
|
-
(
|
|
1157
|
-
|
|
1267
|
+
(y) => {
|
|
1268
|
+
l(y);
|
|
1158
1269
|
}
|
|
1159
|
-
), c = [], await this.delay()),
|
|
1270
|
+
), c = [], await this.delay()), A++;
|
|
1160
1271
|
}
|
|
1161
1272
|
}
|
|
1162
1273
|
c.length && (await this.callBatchWithTimeout(
|
|
1163
1274
|
Object.fromEntries(c),
|
|
1164
|
-
(
|
|
1165
|
-
|
|
1275
|
+
(h) => {
|
|
1276
|
+
l(h);
|
|
1166
1277
|
}
|
|
1167
1278
|
), await this.delay());
|
|
1168
1279
|
}
|
|
@@ -1170,15 +1281,15 @@ class K {
|
|
|
1170
1281
|
* Вывод ошибок в консоль в группированном виде
|
|
1171
1282
|
*/
|
|
1172
1283
|
errorLogger() {
|
|
1173
|
-
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([
|
|
1174
|
-
|
|
1284
|
+
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([r, e]) => {
|
|
1285
|
+
e && console.log(`[${r}]`, e.toString());
|
|
1175
1286
|
}), console.groupEnd();
|
|
1176
1287
|
}
|
|
1177
1288
|
}
|
|
1178
|
-
var
|
|
1289
|
+
var z;
|
|
1179
1290
|
class mt {
|
|
1180
1291
|
constructor() {
|
|
1181
|
-
U(this,
|
|
1292
|
+
U(this, z, {});
|
|
1182
1293
|
}
|
|
1183
1294
|
/**
|
|
1184
1295
|
* Получить случайный хеш-код длиной 8 символов
|
|
@@ -1192,11 +1303,11 @@ class mt {
|
|
|
1192
1303
|
* @param {number} length - Длина генерируемого хеша
|
|
1193
1304
|
* @returns {string}
|
|
1194
1305
|
*/
|
|
1195
|
-
createHash(
|
|
1196
|
-
let
|
|
1197
|
-
|
|
1198
|
-
for (let n = 0; n <
|
|
1199
|
-
i +=
|
|
1306
|
+
createHash(r) {
|
|
1307
|
+
let e = "abcdefghijklmnopqrstuvwxyz0123456789", i = "";
|
|
1308
|
+
r = r || 6;
|
|
1309
|
+
for (let n = 0; n < r; n++)
|
|
1310
|
+
i += e.charAt(Math.floor(Math.random() * e.length));
|
|
1200
1311
|
return i;
|
|
1201
1312
|
}
|
|
1202
1313
|
/**
|
|
@@ -1206,49 +1317,49 @@ class mt {
|
|
|
1206
1317
|
* @param {number} params.duration - Задержка в миллисекундах (по умолчанию 10)
|
|
1207
1318
|
* @param {Function} params.action - Функция для выполнения
|
|
1208
1319
|
*/
|
|
1209
|
-
actionFilter({ keyTimer:
|
|
1210
|
-
|
|
1320
|
+
actionFilter({ keyTimer: r, duration: e = 10, action: i }) {
|
|
1321
|
+
T(this, z)[r] && (clearTimeout(T(this, z)[r]), T(this, z)[r] = null), i && (T(this, z)[r] = setTimeout(() => {
|
|
1211
1322
|
i();
|
|
1212
|
-
},
|
|
1323
|
+
}, e));
|
|
1213
1324
|
}
|
|
1214
1325
|
/**
|
|
1215
1326
|
* Включение режима NO-SLEEP для предотвращения засыпания устройства
|
|
1216
1327
|
* Создает невидимое видео, которое циклически воспроизводится
|
|
1217
1328
|
*/
|
|
1218
1329
|
async noSleep() {
|
|
1219
|
-
let
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
console.warn("noSleep: autoplay prevented",
|
|
1330
|
+
let r = document.createElement("video");
|
|
1331
|
+
r.classList.add("no-sleep"), r.muted = !0, r.autoplay = !0, r.setAttribute("playsinline", ""), r.addEventListener("loadeddata", () => {
|
|
1332
|
+
r.style.position = "fixed", r.style.left = "-9999px", document.querySelector("body").append(r), r.play().catch((e) => {
|
|
1333
|
+
console.warn("noSleep: autoplay prevented", e);
|
|
1223
1334
|
});
|
|
1224
|
-
}),
|
|
1335
|
+
}), r.addEventListener("ended", () => {
|
|
1225
1336
|
this.actionFilter({
|
|
1226
1337
|
keyTimer: "no-sleep",
|
|
1227
1338
|
duration: 5e3,
|
|
1228
1339
|
action: () => {
|
|
1229
|
-
|
|
1230
|
-
console.warn("noSleep: replay prevented",
|
|
1340
|
+
r.play().catch((e) => {
|
|
1341
|
+
console.warn("noSleep: replay prevented", e);
|
|
1231
1342
|
});
|
|
1232
1343
|
}
|
|
1233
1344
|
});
|
|
1234
|
-
}),
|
|
1345
|
+
}), r.src = "data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAP5tZGF0AAAAAQYAAADlZYiEE28FmH9jNWDBjI+Z/1tIBZsjfhbmcNNUpBFej0U3p+zhaJ3eemJRL2LUMa5tkidy6bp+eatLE3jBIY864TvaAmqEFCgLMTCwVbem1n3myAw9yDXQdR5HfU/8iYf+eneVnRf7Qx9M70XDUuPx1MJX671XJwAE0VAMpnhbcUDx0pTldvUX9KQPhkZNH3eyZHmObkAeyEJ2tl+BEBJIGc90BiqKL60+5EA6fXB6iG5UU/M5KsW8BNAAUw5CbRJIqohNk10fwKbUXwya03rqGkE8+wuYGtEbrVYXb+iOl1mHHVPLYQbIAAcGyAAHAAAFNG1vb3YAAABsbXZoZAAAAAAAAAAAAAAAAAAAA+gAAAAvAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAIldHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAFAAAAA8AAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAAAAAAAAAAAQAAAAABnW1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAAQAAAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAUhtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEIc3RibAAAAKRzdHNkAAAAAAAAAAEAAACUYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAPAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAC5hdmNDAU1AC//hABZnTUAL2wUH7ARAAAADAEAAAAQDxQq4AQAFaOrAZXIAAAAQcGFzcAAAAAEAAAABAAAAGHN0dHMAAAAAAAAAAQAAAAEAAAAAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAABRzdHN6AAAAAAAAAO4AAAABAAAAFHN0Y28AAAAAAAAAAQAAADAAAAIadHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAgAAAAAAAAAvAAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAALwAAAAAAAQAAAAABkm1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAArEQAAAgAVcQAAAAAAC1oZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU291bmRIYW5kbGVyAAAAAT1taW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAQFzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAAC7gAAAAViBYCAgAISCAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAAACAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAUc3RzegAAAAAAAAAEAAAAAgAAABRzdGNvAAAAAAAAAAEAAAEeAAAAGnNncGQBAAAAcm9sbAAAAAIAAAAB//8AAAAcc2JncAAAAAByb2xsAAAAAQAAAAIAAAABAAAAgXVkdGEAAAB5bWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWR0YQAAAAAAAAAAAAAAAAAAAAAfa2V5cwAAAAAAAAABAAAAD21kdGFlbmNvZGVyAAAALWlsc3QAAAAlAAAAAQAAAB1kYXRhAAAAAQAAAABMYXZmNTguMTIuMTAw";
|
|
1235
1346
|
}
|
|
1236
1347
|
/**
|
|
1237
1348
|
* Скачать данные в JSON-файл
|
|
1238
1349
|
* @param {any} data - Данные для сохранения
|
|
1239
1350
|
* @param {string} filename - Имя файла без расширения
|
|
1240
1351
|
*/
|
|
1241
|
-
downloadFileJson(
|
|
1242
|
-
let i = new Blob([JSON.stringify(
|
|
1243
|
-
|
|
1244
|
-
document.body.removeChild(
|
|
1352
|
+
downloadFileJson(r, e) {
|
|
1353
|
+
let i = new Blob([JSON.stringify(r)], { type: "application/json" }), n = URL.createObjectURL(i), o = document.createElement("a");
|
|
1354
|
+
o.style.display = "none", o.href = n, o.download = `${e}.json`, document.body.appendChild(o), o.click(), setTimeout(() => {
|
|
1355
|
+
document.body.removeChild(o), URL.revokeObjectURL(n);
|
|
1245
1356
|
}, 200);
|
|
1246
1357
|
}
|
|
1247
1358
|
}
|
|
1248
|
-
|
|
1359
|
+
z = new WeakMap();
|
|
1249
1360
|
const ht = new mt();
|
|
1250
|
-
var j, Q,
|
|
1251
|
-
class
|
|
1361
|
+
var j, Q, Z, q, P, V, $, st, dt, tt, ut, it, gt, nt, pt, at, yt;
|
|
1362
|
+
class bt {
|
|
1252
1363
|
constructor() {
|
|
1253
1364
|
U(this, st);
|
|
1254
1365
|
/** Вывод ошибок логера
|
|
@@ -1257,47 +1368,47 @@ class St {
|
|
|
1257
1368
|
U(this, tt);
|
|
1258
1369
|
U(this, it);
|
|
1259
1370
|
U(this, nt);
|
|
1260
|
-
U(this,
|
|
1371
|
+
U(this, at);
|
|
1261
1372
|
U(this, j, "logger");
|
|
1262
1373
|
U(this, Q, !1);
|
|
1263
|
-
U(this,
|
|
1374
|
+
U(this, Z, /* @__PURE__ */ new Map());
|
|
1264
1375
|
U(this, q, {});
|
|
1265
1376
|
U(this, P, null);
|
|
1266
1377
|
U(this, V, !1);
|
|
1267
1378
|
U(this, $, !1);
|
|
1268
1379
|
/** Очистка хранилища элементов старше 'N' месяцев */
|
|
1269
|
-
|
|
1270
|
-
|
|
1380
|
+
I(this, "periodClear", 3);
|
|
1381
|
+
J(this, st, dt).call(this);
|
|
1271
1382
|
}
|
|
1272
1383
|
/** Инициализация логера */
|
|
1273
1384
|
async init() {
|
|
1274
1385
|
try {
|
|
1275
|
-
let
|
|
1386
|
+
let r = new K(BX24.callBatch), { entityList: e } = await r.batch({
|
|
1276
1387
|
entityList: { method: "entity.get" }
|
|
1277
1388
|
});
|
|
1278
|
-
if (
|
|
1279
|
-
if (
|
|
1280
|
-
(n) => n.ENTITY ==
|
|
1389
|
+
if (e && Array.isArray(e))
|
|
1390
|
+
if (e.find(
|
|
1391
|
+
(n) => n.ENTITY == T(this, j)
|
|
1281
1392
|
))
|
|
1282
1393
|
X(this, Q, !0);
|
|
1283
1394
|
else {
|
|
1284
|
-
let { entityAdd: n } = await
|
|
1395
|
+
let { entityAdd: n } = await r.batch({
|
|
1285
1396
|
entityAdd: {
|
|
1286
1397
|
method: "entity.add",
|
|
1287
1398
|
params: {
|
|
1288
|
-
ENTITY:
|
|
1289
|
-
NAME:
|
|
1399
|
+
ENTITY: T(this, j),
|
|
1400
|
+
NAME: T(this, j),
|
|
1290
1401
|
ACCESS: { AU: "X" }
|
|
1291
1402
|
}
|
|
1292
1403
|
}
|
|
1293
1404
|
});
|
|
1294
1405
|
n && X(this, Q, !0);
|
|
1295
1406
|
}
|
|
1296
|
-
return
|
|
1407
|
+
return J(this, nt, pt).call(this).catch((i) => {
|
|
1297
1408
|
console.error("Ошибка при проверке периода очистки:", i);
|
|
1298
|
-
}),
|
|
1299
|
-
} catch (
|
|
1300
|
-
return console.error("Ошибка при инициализации логера:",
|
|
1409
|
+
}), T(this, Q);
|
|
1410
|
+
} catch (r) {
|
|
1411
|
+
return console.error("Ошибка при инициализации логера:", r), !1;
|
|
1301
1412
|
}
|
|
1302
1413
|
}
|
|
1303
1414
|
/**
|
|
@@ -1309,21 +1420,21 @@ class St {
|
|
|
1309
1420
|
* }; }}
|
|
1310
1421
|
* @returns {string|null}
|
|
1311
1422
|
*/
|
|
1312
|
-
start({ type:
|
|
1313
|
-
if (!
|
|
1314
|
-
return
|
|
1315
|
-
if (!
|
|
1316
|
-
return console.error("Невалидные данные для логирования:", { type:
|
|
1423
|
+
start({ type: r, data: e }) {
|
|
1424
|
+
if (!T(this, Q))
|
|
1425
|
+
return J(this, tt, ut).call(this, "entity"), null;
|
|
1426
|
+
if (!r || !e)
|
|
1427
|
+
return console.error("Невалидные данные для логирования:", { type: r, data: e }), null;
|
|
1317
1428
|
const i = ht.hash, n = {
|
|
1318
|
-
type:
|
|
1319
|
-
data:
|
|
1320
|
-
userInfo:
|
|
1429
|
+
type: r,
|
|
1430
|
+
data: e,
|
|
1431
|
+
userInfo: T(this, q),
|
|
1321
1432
|
errorList: {},
|
|
1322
1433
|
status: "",
|
|
1323
1434
|
answer: null,
|
|
1324
1435
|
date: (/* @__PURE__ */ new Date()).getTime()
|
|
1325
1436
|
};
|
|
1326
|
-
return
|
|
1437
|
+
return T(this, Z).set(i, n), X(this, $, !0), i;
|
|
1327
1438
|
}
|
|
1328
1439
|
/**
|
|
1329
1440
|
* @param {{
|
|
@@ -1332,56 +1443,56 @@ class St {
|
|
|
1332
1443
|
* status: 'success'|'fail'|'fail-runtime',
|
|
1333
1444
|
* answer: { [key]: unknown } }}
|
|
1334
1445
|
*/
|
|
1335
|
-
async stop({ key:
|
|
1336
|
-
var
|
|
1337
|
-
if (!
|
|
1446
|
+
async stop({ key: r, errorList: e, status: i, answer: n }) {
|
|
1447
|
+
var l;
|
|
1448
|
+
if (!T(this, $))
|
|
1338
1449
|
return;
|
|
1339
|
-
if (!
|
|
1340
|
-
|
|
1450
|
+
if (!T(this, Q)) {
|
|
1451
|
+
J(this, tt, ut).call(this, "entity");
|
|
1341
1452
|
return;
|
|
1342
1453
|
}
|
|
1343
|
-
let
|
|
1344
|
-
if (!
|
|
1345
|
-
console.error(`Не найдены данные логирования для ключа: ${
|
|
1454
|
+
let o = T(this, Z).get(r);
|
|
1455
|
+
if (!o) {
|
|
1456
|
+
console.error(`Не найдены данные логирования для ключа: ${r}`);
|
|
1346
1457
|
return;
|
|
1347
1458
|
}
|
|
1348
|
-
|
|
1459
|
+
e && (o.errorList = e), i && (o.status = i), n && (o.answer = n), await J(this, it, gt).call(this), (l = o == null ? void 0 : o.data) != null && l.updateList && X(this, V, !0), X(this, $, !1);
|
|
1349
1460
|
}
|
|
1350
1461
|
/**
|
|
1351
1462
|
* @param { ({percent}:{percent:number})=>{} } progressCall - коллбэк
|
|
1352
1463
|
*/
|
|
1353
|
-
async getEntityList(
|
|
1354
|
-
var
|
|
1464
|
+
async getEntityList(r) {
|
|
1465
|
+
var e;
|
|
1355
1466
|
try {
|
|
1356
|
-
if ((
|
|
1357
|
-
return
|
|
1467
|
+
if ((e = T(this, P)) != null && e.length && !T(this, V))
|
|
1468
|
+
return T(this, P);
|
|
1358
1469
|
let i = new K(BX24.callBatch), { entityList: n } = await i.batch(
|
|
1359
1470
|
{
|
|
1360
1471
|
entityList: {
|
|
1361
1472
|
method: "entity.item.get",
|
|
1362
1473
|
params: {
|
|
1363
|
-
ENTITY:
|
|
1474
|
+
ENTITY: T(this, j),
|
|
1364
1475
|
SORT: { ID: "DESC" }
|
|
1365
1476
|
}
|
|
1366
1477
|
}
|
|
1367
1478
|
},
|
|
1368
|
-
|
|
1479
|
+
r
|
|
1369
1480
|
);
|
|
1370
|
-
return !n || !Array.isArray(n) ? (console.warn("Получен невалидный список записей"), []) : (n = n.map((
|
|
1481
|
+
return !n || !Array.isArray(n) ? (console.warn("Получен невалидный список записей"), []) : (n = n.map((o) => {
|
|
1371
1482
|
try {
|
|
1372
|
-
const { ID:
|
|
1483
|
+
const { ID: l, DATE_CREATE: c, DETAIL_TEXT: h } = o;
|
|
1373
1484
|
return {
|
|
1374
|
-
...JSON.parse(
|
|
1375
|
-
id:
|
|
1485
|
+
...JSON.parse(h),
|
|
1486
|
+
id: l,
|
|
1376
1487
|
dateCreate: c
|
|
1377
1488
|
};
|
|
1378
|
-
} catch (
|
|
1489
|
+
} catch (l) {
|
|
1379
1490
|
return console.error(
|
|
1380
|
-
`Ошибка парсинга записи ${
|
|
1381
|
-
|
|
1491
|
+
`Ошибка парсинга записи ${o.ID}:`,
|
|
1492
|
+
l
|
|
1382
1493
|
), null;
|
|
1383
1494
|
}
|
|
1384
|
-
}).filter((
|
|
1495
|
+
}).filter((o) => o !== null), X(this, V, !1), X(this, P, n), n);
|
|
1385
1496
|
} catch (i) {
|
|
1386
1497
|
return console.error("Ошибка при получении списка записей:", i), [];
|
|
1387
1498
|
}
|
|
@@ -1389,123 +1500,123 @@ class St {
|
|
|
1389
1500
|
/** Выгрузка всех данных из хранилища в JSON-файл */
|
|
1390
1501
|
async downAllEntityJson() {
|
|
1391
1502
|
try {
|
|
1392
|
-
if (
|
|
1503
|
+
if (T(this, P) || await this.getEntityList(), !T(this, P) || T(this, P).length === 0)
|
|
1393
1504
|
return console.warn("Нет данных для выгрузки"), !1;
|
|
1394
|
-
let
|
|
1505
|
+
let r = rt().format("%Y-%m-%d");
|
|
1395
1506
|
return ht.downloadFileJson(
|
|
1396
|
-
|
|
1397
|
-
`sdklogger-entity-data__${
|
|
1507
|
+
T(this, P),
|
|
1508
|
+
`sdklogger-entity-data__${r}`
|
|
1398
1509
|
), !0;
|
|
1399
|
-
} catch (
|
|
1400
|
-
return console.error("Ошибка при выгрузке данных в JSON:",
|
|
1510
|
+
} catch (r) {
|
|
1511
|
+
return console.error("Ошибка при выгрузке данных в JSON:", r), !1;
|
|
1401
1512
|
}
|
|
1402
1513
|
}
|
|
1403
1514
|
}
|
|
1404
|
-
j = new WeakMap(), Q = new WeakMap(),
|
|
1515
|
+
j = new WeakMap(), Q = new WeakMap(), Z = new WeakMap(), q = new WeakMap(), P = new WeakMap(), V = new WeakMap(), $ = new WeakMap(), st = new WeakSet(), dt = async function() {
|
|
1405
1516
|
try {
|
|
1406
|
-
const
|
|
1517
|
+
const r = new K(BX24.callBatch), e = BX24.isAdmin(), { curUser: i } = await r.batch({
|
|
1407
1518
|
curUser: { method: "user.current" }
|
|
1408
1519
|
});
|
|
1409
|
-
X(this, q, { isAdmin:
|
|
1410
|
-
} catch (
|
|
1520
|
+
X(this, q, { isAdmin: e, curUser: i });
|
|
1521
|
+
} catch (r) {
|
|
1411
1522
|
console.error(
|
|
1412
1523
|
"Ошибка при получении информации о пользователе:",
|
|
1413
|
-
|
|
1524
|
+
r
|
|
1414
1525
|
), X(this, q, { isAdmin: !1, curUser: null });
|
|
1415
1526
|
}
|
|
1416
|
-
}, tt = new WeakSet(),
|
|
1417
|
-
|
|
1527
|
+
}, tt = new WeakSet(), ut = function(r) {
|
|
1528
|
+
r == "entity" && ht.actionFilter({
|
|
1418
1529
|
keyTimer: "error.logger.entity",
|
|
1419
1530
|
duration: 500,
|
|
1420
1531
|
action: () => {
|
|
1421
1532
|
console.error("Хранилище для логгера не инициализировано");
|
|
1422
1533
|
}
|
|
1423
1534
|
});
|
|
1424
|
-
}, it = new WeakSet(),
|
|
1535
|
+
}, it = new WeakSet(), gt = async function() {
|
|
1425
1536
|
try {
|
|
1426
|
-
let
|
|
1427
|
-
for (let [i, n] of
|
|
1537
|
+
let r = {}, e = new K(BX24.callBatch);
|
|
1538
|
+
for (let [i, n] of T(this, Z).entries())
|
|
1428
1539
|
if (n.status) {
|
|
1429
|
-
const
|
|
1430
|
-
|
|
1540
|
+
const o = JSON.stringify(n);
|
|
1541
|
+
r[i] = {
|
|
1431
1542
|
method: "entity.item.add",
|
|
1432
1543
|
params: {
|
|
1433
|
-
ENTITY:
|
|
1434
|
-
NAME:
|
|
1435
|
-
DETAIL_TEXT:
|
|
1544
|
+
ENTITY: T(this, j),
|
|
1545
|
+
NAME: T(this, j),
|
|
1546
|
+
DETAIL_TEXT: o
|
|
1436
1547
|
}
|
|
1437
1548
|
};
|
|
1438
1549
|
}
|
|
1439
|
-
if (Object.keys(
|
|
1440
|
-
let i = await
|
|
1441
|
-
for (let [
|
|
1442
|
-
|
|
1550
|
+
if (Object.keys(r).length) {
|
|
1551
|
+
let i = await e.batch(r), { errors: n } = e;
|
|
1552
|
+
for (let [o, l] of Object.entries({ ...i, ...n }))
|
|
1553
|
+
T(this, Z).delete(o);
|
|
1443
1554
|
return !0;
|
|
1444
1555
|
}
|
|
1445
1556
|
return !1;
|
|
1446
|
-
} catch (
|
|
1447
|
-
return console.error("Ошибка при добавлении записей в хранилище:",
|
|
1557
|
+
} catch (r) {
|
|
1558
|
+
return console.error("Ошибка при добавлении записей в хранилище:", r), !1;
|
|
1448
1559
|
}
|
|
1449
|
-
}, nt = new WeakSet(),
|
|
1560
|
+
}, nt = new WeakSet(), pt = async function() {
|
|
1450
1561
|
try {
|
|
1451
|
-
let
|
|
1562
|
+
let r = new K(BX24.callBatch), { serverTime: e } = await r.batch({
|
|
1452
1563
|
serverTime: { method: "server.time" }
|
|
1453
1564
|
});
|
|
1454
|
-
if (!
|
|
1565
|
+
if (!e) {
|
|
1455
1566
|
console.error("Не удалось получить время сервера");
|
|
1456
1567
|
return;
|
|
1457
1568
|
}
|
|
1458
|
-
if (
|
|
1569
|
+
if (T(this, P) || await this.getEntityList(), !T(this, P) || T(this, P).length === 0)
|
|
1459
1570
|
return;
|
|
1460
|
-
let i =
|
|
1571
|
+
let i = T(this, P).filter((n) => {
|
|
1461
1572
|
try {
|
|
1462
|
-
let { dateCreate:
|
|
1463
|
-
return
|
|
1464
|
-
rt(new Date(
|
|
1573
|
+
let { dateCreate: o } = n;
|
|
1574
|
+
return o ? rt(new Date(o)).between(
|
|
1575
|
+
rt(new Date(e)),
|
|
1465
1576
|
"month"
|
|
1466
1577
|
) >= this.periodClear : !1;
|
|
1467
|
-
} catch (
|
|
1468
|
-
return console.error("Ошибка при проверке даты записи:",
|
|
1578
|
+
} catch (o) {
|
|
1579
|
+
return console.error("Ошибка при проверке даты записи:", o), !1;
|
|
1469
1580
|
}
|
|
1470
1581
|
});
|
|
1471
1582
|
i.length > 0 && (console.log(
|
|
1472
1583
|
`Найдено ${i.length} записей для очистки (старше ${this.periodClear} месяцев)`
|
|
1473
|
-
), await
|
|
1474
|
-
} catch (
|
|
1475
|
-
console.error("Ошибка при проверке периода очистки:",
|
|
1584
|
+
), await J(this, at, yt).call(this, i));
|
|
1585
|
+
} catch (r) {
|
|
1586
|
+
console.error("Ошибка при проверке периода очистки:", r);
|
|
1476
1587
|
}
|
|
1477
|
-
},
|
|
1588
|
+
}, at = new WeakSet(), yt = async function(r) {
|
|
1478
1589
|
try {
|
|
1479
|
-
if (!
|
|
1590
|
+
if (!r || r.length === 0)
|
|
1480
1591
|
return !1;
|
|
1481
|
-
let
|
|
1482
|
-
let { id:
|
|
1592
|
+
let e = new K(BX24.callBatch), i = r.filter((o) => o && o.id).map((o) => {
|
|
1593
|
+
let { id: l } = o;
|
|
1483
1594
|
return {
|
|
1484
1595
|
method: "entity.item.delete",
|
|
1485
1596
|
params: {
|
|
1486
|
-
ENTITY:
|
|
1487
|
-
ID:
|
|
1597
|
+
ENTITY: T(this, j),
|
|
1598
|
+
ID: l
|
|
1488
1599
|
}
|
|
1489
1600
|
};
|
|
1490
1601
|
});
|
|
1491
1602
|
if (i.length === 0)
|
|
1492
1603
|
return !1;
|
|
1493
|
-
const n = await
|
|
1604
|
+
const n = await e.batch(i);
|
|
1494
1605
|
return console.log(`Успешно удалено ${i.length} записей`), X(this, V, !0), n;
|
|
1495
|
-
} catch (
|
|
1496
|
-
return console.error("Ошибка при очистке устаревших записей:",
|
|
1606
|
+
} catch (e) {
|
|
1607
|
+
return console.error("Ошибка при очистке устаревших записей:", e), !1;
|
|
1497
1608
|
}
|
|
1498
1609
|
};
|
|
1499
|
-
var
|
|
1500
|
-
class
|
|
1610
|
+
var ot, Nt, At, Ot, et, ft;
|
|
1611
|
+
class It {
|
|
1501
1612
|
/**
|
|
1502
1613
|
* @param {Object} appConst - Константы приложения
|
|
1503
1614
|
* @param {string} appConst.appName - Название приложения
|
|
1504
1615
|
* @param {string} appConst.pathApp - Путь к приложению
|
|
1505
1616
|
*/
|
|
1506
|
-
constructor(
|
|
1617
|
+
constructor(r) {
|
|
1507
1618
|
/** Запрос данных о приложении */
|
|
1508
|
-
U(this,
|
|
1619
|
+
U(this, ot);
|
|
1509
1620
|
/** Запрос данных о текущем пользователе */
|
|
1510
1621
|
U(this, At);
|
|
1511
1622
|
/**
|
|
@@ -1518,21 +1629,15 @@ class Mt {
|
|
|
1518
1629
|
* @returns {Object} Расширенный список ошибок
|
|
1519
1630
|
*/
|
|
1520
1631
|
U(this, et);
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
M(this, "appConst", null);
|
|
1531
|
-
M(this, "userInfo", null);
|
|
1532
|
-
M(this, "placeData", null);
|
|
1533
|
-
M(this, "placeInfo", null);
|
|
1534
|
-
M(this, "logger", !1);
|
|
1535
|
-
this.appConst = e;
|
|
1632
|
+
I(this, "domain", "");
|
|
1633
|
+
I(this, "isAdmin", !1);
|
|
1634
|
+
I(this, "appInfo", null);
|
|
1635
|
+
I(this, "appConst", null);
|
|
1636
|
+
I(this, "userInfo", null);
|
|
1637
|
+
I(this, "placeData", null);
|
|
1638
|
+
I(this, "placeInfo", null);
|
|
1639
|
+
I(this, "logger", !1);
|
|
1640
|
+
this.appConst = r;
|
|
1536
1641
|
}
|
|
1537
1642
|
/**
|
|
1538
1643
|
* Инициализация Bitrix24 SDK
|
|
@@ -1540,10 +1645,10 @@ class Mt {
|
|
|
1540
1645
|
* @throws {Error} Если BX24 не загружен в течение 30 секунд
|
|
1541
1646
|
*/
|
|
1542
1647
|
init() {
|
|
1543
|
-
return new Promise((
|
|
1648
|
+
return new Promise((r, e) => {
|
|
1544
1649
|
let n = setInterval(() => {
|
|
1545
1650
|
window.BX24 && BX24.init(async () => {
|
|
1546
|
-
console.info("init BX24"), clearInterval(n), clearTimeout(
|
|
1651
|
+
console.info("init BX24"), clearInterval(n), clearTimeout(o), this.domain = BX24.getDomain(), this.isAdmin = BX24.isAdmin(), this.placeInfo = BX24.placement.info(), this.logger ? (this.logger = new bt(), await this.logger.init()) : this.logger = {
|
|
1547
1652
|
start: () => {
|
|
1548
1653
|
},
|
|
1549
1654
|
stop: () => {
|
|
@@ -1551,29 +1656,29 @@ class Mt {
|
|
|
1551
1656
|
getEntityList: () => {
|
|
1552
1657
|
}
|
|
1553
1658
|
};
|
|
1554
|
-
const [
|
|
1555
|
-
|
|
1556
|
-
|
|
1659
|
+
const [l, c] = await Promise.all([
|
|
1660
|
+
J(this, ot, Nt).call(this),
|
|
1661
|
+
J(this, At, Ot).call(this)
|
|
1557
1662
|
]);
|
|
1558
|
-
this.appInfo =
|
|
1559
|
-
let
|
|
1663
|
+
this.appInfo = l, this.userInfo = c;
|
|
1664
|
+
let h = new mt();
|
|
1560
1665
|
try {
|
|
1561
|
-
|
|
1666
|
+
h.noSleep();
|
|
1562
1667
|
} catch (s) {
|
|
1563
1668
|
console.warn(
|
|
1564
1669
|
"Failed to initialize noSleep:",
|
|
1565
1670
|
s
|
|
1566
1671
|
);
|
|
1567
1672
|
}
|
|
1568
|
-
|
|
1673
|
+
r(!0);
|
|
1569
1674
|
});
|
|
1570
1675
|
}, 100);
|
|
1571
|
-
const
|
|
1676
|
+
const o = setTimeout(() => {
|
|
1572
1677
|
clearInterval(n);
|
|
1573
|
-
const
|
|
1678
|
+
const l = new Error(
|
|
1574
1679
|
"BX24 initialization timeout: BX24 object not found within 30 seconds"
|
|
1575
1680
|
);
|
|
1576
|
-
console.error(
|
|
1681
|
+
console.error(l), e(l);
|
|
1577
1682
|
}, 3e4);
|
|
1578
1683
|
});
|
|
1579
1684
|
}
|
|
@@ -1583,23 +1688,23 @@ class Mt {
|
|
|
1583
1688
|
* @param {any} value - Значение для установки (если не указано, метод вернет текущее значение)
|
|
1584
1689
|
* @returns {any}
|
|
1585
1690
|
*/
|
|
1586
|
-
userOption(
|
|
1691
|
+
userOption(r, e) {
|
|
1587
1692
|
if (typeof BX24 > "u" || !BX24.userOption) {
|
|
1588
1693
|
console.warn(
|
|
1589
1694
|
"BX24.userOption is not available. Make sure BX24 is initialized."
|
|
1590
1695
|
);
|
|
1591
1696
|
return;
|
|
1592
1697
|
}
|
|
1593
|
-
return
|
|
1698
|
+
return e !== void 0 ? BX24.userOption.set(r, e) : BX24.userOption.get(r);
|
|
1594
1699
|
}
|
|
1595
|
-
appOption(
|
|
1700
|
+
appOption(r, e) {
|
|
1596
1701
|
if (typeof BX24 > "u" || !BX24.appOption) {
|
|
1597
1702
|
console.warn(
|
|
1598
1703
|
"BX24.appOption is not available. Make sure BX24 is initialized."
|
|
1599
1704
|
);
|
|
1600
1705
|
return;
|
|
1601
1706
|
}
|
|
1602
|
-
return
|
|
1707
|
+
return e !== void 0 ? BX24.appOption.set(r, e) : BX24.appOption.get(r);
|
|
1603
1708
|
}
|
|
1604
1709
|
/**
|
|
1605
1710
|
* @param {{
|
|
@@ -1619,48 +1724,48 @@ class Mt {
|
|
|
1619
1724
|
* }[]
|
|
1620
1725
|
* }[]
|
|
1621
1726
|
*/
|
|
1622
|
-
async call({ method:
|
|
1727
|
+
async call({ method: r, params: e, updateList: i }) {
|
|
1623
1728
|
let n;
|
|
1624
1729
|
if (i && (n = this.logger.start({
|
|
1625
1730
|
type: "call",
|
|
1626
|
-
data: { method:
|
|
1627
|
-
})),
|
|
1628
|
-
const
|
|
1629
|
-
throw console.error(
|
|
1731
|
+
data: { method: r, params: e, updateList: i }
|
|
1732
|
+
})), e || (e = {}), typeof BX24 > "u" || !BX24.callMethod) {
|
|
1733
|
+
const o = new Error("BX24 is not initialized");
|
|
1734
|
+
throw console.error(o), o;
|
|
1630
1735
|
}
|
|
1631
|
-
return new Promise((
|
|
1632
|
-
BX24.callMethod(
|
|
1633
|
-
let
|
|
1736
|
+
return new Promise((o, l) => {
|
|
1737
|
+
BX24.callMethod(r, e, async (c) => {
|
|
1738
|
+
let h = {};
|
|
1634
1739
|
if (c != null && c.answer)
|
|
1635
|
-
for (let [s,
|
|
1636
|
-
s !== "result" &&
|
|
1740
|
+
for (let [s, f] of Object.entries(c.answer))
|
|
1741
|
+
s !== "result" && f && (h[s] = f);
|
|
1637
1742
|
if (c.error()) {
|
|
1638
1743
|
let s = c.error();
|
|
1639
1744
|
if (console.error(s), n)
|
|
1640
1745
|
try {
|
|
1641
1746
|
await this.logger.stop({
|
|
1642
|
-
answer:
|
|
1747
|
+
answer: h,
|
|
1643
1748
|
key: n,
|
|
1644
1749
|
status: "fail",
|
|
1645
1750
|
errorList: { 0: s.toString() }
|
|
1646
1751
|
});
|
|
1647
|
-
} catch (
|
|
1648
|
-
console.error("Logger error:",
|
|
1752
|
+
} catch (f) {
|
|
1753
|
+
console.error("Logger error:", f);
|
|
1649
1754
|
}
|
|
1650
|
-
|
|
1755
|
+
o(!1);
|
|
1651
1756
|
} else {
|
|
1652
1757
|
let s = c.data();
|
|
1653
1758
|
if (s != null && s.items && (s = s.items), n)
|
|
1654
1759
|
try {
|
|
1655
1760
|
await this.logger.stop({
|
|
1656
|
-
answer:
|
|
1761
|
+
answer: h,
|
|
1657
1762
|
key: n,
|
|
1658
1763
|
status: "success"
|
|
1659
1764
|
});
|
|
1660
|
-
} catch (
|
|
1661
|
-
console.error("Logger error:",
|
|
1765
|
+
} catch (f) {
|
|
1766
|
+
console.error("Logger error:", f);
|
|
1662
1767
|
}
|
|
1663
|
-
|
|
1768
|
+
o(s);
|
|
1664
1769
|
}
|
|
1665
1770
|
});
|
|
1666
1771
|
});
|
|
@@ -1684,56 +1789,56 @@ class Mt {
|
|
|
1684
1789
|
* }[]
|
|
1685
1790
|
* }}
|
|
1686
1791
|
*/
|
|
1687
|
-
async batch(
|
|
1792
|
+
async batch(r, e, { errorCall: i, limitCommandSerial: n, updateList: o, limitCall: l } = {}) {
|
|
1688
1793
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1689
1794
|
const s = new Error("BX24 is not initialized");
|
|
1690
1795
|
return console.error(s), !1;
|
|
1691
1796
|
}
|
|
1692
|
-
let c = new K(BX24.callBatch),
|
|
1693
|
-
|
|
1797
|
+
let c = new K(BX24.callBatch), h;
|
|
1798
|
+
o && (h = this.logger.start({
|
|
1694
1799
|
type: "batch",
|
|
1695
|
-
data: { commandList:
|
|
1800
|
+
data: { commandList: r, updateList: o }
|
|
1696
1801
|
})), n && console.warn(
|
|
1697
1802
|
"limitCommandSerial is deprecated and not used in current Batch implementation"
|
|
1698
1803
|
);
|
|
1699
1804
|
try {
|
|
1700
1805
|
let s = await c.batch(
|
|
1701
|
-
e,
|
|
1702
1806
|
r,
|
|
1703
|
-
|
|
1807
|
+
e,
|
|
1808
|
+
l
|
|
1704
1809
|
);
|
|
1705
|
-
const
|
|
1706
|
-
if (Object.keys(
|
|
1707
|
-
if (i && i(
|
|
1810
|
+
const f = J(this, et, ft).call(this, c, s, r, o);
|
|
1811
|
+
if (Object.keys(f).length) {
|
|
1812
|
+
if (i && i(f), h)
|
|
1708
1813
|
try {
|
|
1709
1814
|
await this.logger.stop({
|
|
1710
|
-
key:
|
|
1815
|
+
key: h,
|
|
1711
1816
|
status: "fail",
|
|
1712
|
-
errorList:
|
|
1817
|
+
errorList: f
|
|
1713
1818
|
});
|
|
1714
|
-
} catch (
|
|
1715
|
-
console.error("Logger error:",
|
|
1819
|
+
} catch (m) {
|
|
1820
|
+
console.error("Logger error:", m);
|
|
1716
1821
|
}
|
|
1717
|
-
} else if (
|
|
1822
|
+
} else if (h)
|
|
1718
1823
|
try {
|
|
1719
1824
|
await this.logger.stop({
|
|
1720
|
-
key:
|
|
1825
|
+
key: h,
|
|
1721
1826
|
status: "success"
|
|
1722
1827
|
});
|
|
1723
|
-
} catch (
|
|
1724
|
-
console.error("Logger error:",
|
|
1828
|
+
} catch (m) {
|
|
1829
|
+
console.error("Logger error:", m);
|
|
1725
1830
|
}
|
|
1726
1831
|
return s;
|
|
1727
1832
|
} catch (s) {
|
|
1728
|
-
if (
|
|
1833
|
+
if (h)
|
|
1729
1834
|
try {
|
|
1730
1835
|
await this.logger.stop({
|
|
1731
|
-
key:
|
|
1836
|
+
key: h,
|
|
1732
1837
|
status: "fail-runtime",
|
|
1733
1838
|
errorList: { 0: s == null ? void 0 : s.toString() }
|
|
1734
1839
|
});
|
|
1735
|
-
} catch (
|
|
1736
|
-
console.error("Logger error:",
|
|
1840
|
+
} catch (f) {
|
|
1841
|
+
console.error("Logger error:", f);
|
|
1737
1842
|
}
|
|
1738
1843
|
return console.error(s), !1;
|
|
1739
1844
|
}
|
|
@@ -1761,23 +1866,23 @@ class Mt {
|
|
|
1761
1866
|
* }}
|
|
1762
1867
|
* @returns {Promise<Object|false>}
|
|
1763
1868
|
*/
|
|
1764
|
-
async batchTotalCount(
|
|
1869
|
+
async batchTotalCount(r, e, { errorCall: i, updateList: n, limitCall: o } = {}) {
|
|
1765
1870
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1766
|
-
const
|
|
1767
|
-
return console.error(
|
|
1871
|
+
const h = new Error("BX24 is not initialized");
|
|
1872
|
+
return console.error(h), !1;
|
|
1768
1873
|
}
|
|
1769
|
-
let
|
|
1874
|
+
let l = new K(BX24.callBatch), c;
|
|
1770
1875
|
n && (c = this.logger.start({
|
|
1771
1876
|
type: "batch-total-count",
|
|
1772
|
-
data: { commandList:
|
|
1877
|
+
data: { commandList: r }
|
|
1773
1878
|
}));
|
|
1774
1879
|
try {
|
|
1775
|
-
let
|
|
1776
|
-
e,
|
|
1880
|
+
let h = await l.batchTotalCount(
|
|
1777
1881
|
r,
|
|
1778
|
-
|
|
1882
|
+
e,
|
|
1883
|
+
o
|
|
1779
1884
|
);
|
|
1780
|
-
const s =
|
|
1885
|
+
const s = J(this, et, ft).call(this, l, h, r, n);
|
|
1781
1886
|
if (Object.keys(s).length) {
|
|
1782
1887
|
if (i && i(s), c)
|
|
1783
1888
|
try {
|
|
@@ -1786,8 +1891,8 @@ class Mt {
|
|
|
1786
1891
|
status: "fail",
|
|
1787
1892
|
errorList: s
|
|
1788
1893
|
});
|
|
1789
|
-
} catch (
|
|
1790
|
-
console.error("Logger error:",
|
|
1894
|
+
} catch (f) {
|
|
1895
|
+
console.error("Logger error:", f);
|
|
1791
1896
|
}
|
|
1792
1897
|
} else if (c)
|
|
1793
1898
|
try {
|
|
@@ -1795,101 +1900,97 @@ class Mt {
|
|
|
1795
1900
|
key: c,
|
|
1796
1901
|
status: "success"
|
|
1797
1902
|
});
|
|
1798
|
-
} catch (
|
|
1799
|
-
console.error("Logger error:",
|
|
1903
|
+
} catch (f) {
|
|
1904
|
+
console.error("Logger error:", f);
|
|
1800
1905
|
}
|
|
1801
|
-
return
|
|
1802
|
-
} catch (
|
|
1906
|
+
return h;
|
|
1907
|
+
} catch (h) {
|
|
1803
1908
|
if (c)
|
|
1804
1909
|
try {
|
|
1805
1910
|
await this.logger.stop({
|
|
1806
1911
|
key: c,
|
|
1807
1912
|
status: "fail-runtime",
|
|
1808
|
-
errorList: { 0:
|
|
1913
|
+
errorList: { 0: h == null ? void 0 : h.toString() }
|
|
1809
1914
|
});
|
|
1810
1915
|
} catch (s) {
|
|
1811
1916
|
console.error("Logger error:", s);
|
|
1812
1917
|
}
|
|
1813
|
-
return console.error(
|
|
1918
|
+
return console.error(h), !1;
|
|
1814
1919
|
}
|
|
1815
1920
|
}
|
|
1816
1921
|
/** Запрос данных о местах встройки приложения */
|
|
1817
1922
|
async getPlacement() {
|
|
1818
|
-
return await this.call({ method: "placement.get" }).then((
|
|
1923
|
+
return await this.call({ method: "placement.get" }).then((r) => (this.placeData || (this.placeData = r), r));
|
|
1819
1924
|
}
|
|
1820
1925
|
/** Встройка приложения в place */
|
|
1821
|
-
async placementBind(
|
|
1822
|
-
var
|
|
1926
|
+
async placementBind(r, e = !0) {
|
|
1927
|
+
var f;
|
|
1823
1928
|
if (!this.isAdmin)
|
|
1824
1929
|
return;
|
|
1825
|
-
|
|
1930
|
+
e && await this.placementCheck();
|
|
1826
1931
|
let i = [];
|
|
1827
|
-
if (Array.isArray(
|
|
1932
|
+
if (Array.isArray(r) ? i = r.map((m) => typeof m == "string" ? { placement: m } : m) : typeof r == "string" ? i = [{ placement: r }] : i = [r], i = i.filter(
|
|
1933
|
+
(m) => m.placement !== "PAGE_BACKGROUND_WORKER" && m.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
1934
|
+
), this.placeData = await this.getPlacement(), !this.placeData)
|
|
1828
1935
|
return;
|
|
1829
|
-
const { appName: n, pathApp:
|
|
1830
|
-
let
|
|
1831
|
-
this.domain === "szdl.bitrix24.ru" && ((
|
|
1832
|
-
const c =
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
(h) => h.placement !== "PAGE_BACKGROUND_WORKER" && h.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
1836
|
-
), d = {}, N = [];
|
|
1837
|
-
if (A.length > 0) {
|
|
1838
|
-
const h = await W(this, lt, Et).call(this, A);
|
|
1839
|
-
Object.assign(d, h.batchRequests), N.push(...h.placesToUnbind);
|
|
1840
|
-
}
|
|
1841
|
-
for (let h = 0; h < s.length; h++) {
|
|
1842
|
-
const O = s[h].placement, g = a;
|
|
1936
|
+
const { appName: n, pathApp: o } = this.appConst;
|
|
1937
|
+
let l = n;
|
|
1938
|
+
this.domain === "szdl.bitrix24.ru" && ((f = this.appInfo) != null && f.ID) && (l = `${n}: #${this.appInfo.ID}`);
|
|
1939
|
+
const c = l.replace(" CRM", ""), h = {}, s = [];
|
|
1940
|
+
for (let m = 0; m < i.length; m++) {
|
|
1941
|
+
const u = i[m].placement, N = o;
|
|
1843
1942
|
if (this.placeData.find(
|
|
1844
|
-
(
|
|
1943
|
+
(b) => b.placement === u && b.handler === N
|
|
1845
1944
|
))
|
|
1846
1945
|
continue;
|
|
1847
|
-
const
|
|
1848
|
-
(
|
|
1946
|
+
const p = this.placeData.find(
|
|
1947
|
+
(b) => b.placement === u && b.handler !== N
|
|
1849
1948
|
);
|
|
1850
|
-
|
|
1851
|
-
placement:
|
|
1852
|
-
handler:
|
|
1949
|
+
p && s.push({
|
|
1950
|
+
placement: u,
|
|
1951
|
+
handler: p.handler
|
|
1853
1952
|
});
|
|
1854
|
-
const
|
|
1855
|
-
PLACEMENT:
|
|
1856
|
-
HANDLER:
|
|
1953
|
+
const R = {
|
|
1954
|
+
PLACEMENT: u,
|
|
1955
|
+
HANDLER: N,
|
|
1857
1956
|
LANG_ALL: {
|
|
1858
1957
|
ru: {
|
|
1859
|
-
TITLE:
|
|
1958
|
+
TITLE: u === "USER_PROFILE_TOOLBAR" ? c : l
|
|
1860
1959
|
}
|
|
1861
1960
|
},
|
|
1862
1961
|
OPTIONS: {
|
|
1863
|
-
errorHandlerUrl:
|
|
1962
|
+
errorHandlerUrl: N
|
|
1864
1963
|
}
|
|
1865
1964
|
};
|
|
1866
|
-
|
|
1965
|
+
h[`bind_${m}`] = {
|
|
1867
1966
|
method: "placement.bind",
|
|
1868
|
-
params:
|
|
1967
|
+
params: R
|
|
1869
1968
|
};
|
|
1870
1969
|
}
|
|
1871
|
-
|
|
1970
|
+
s.length > 0 && await this.placementUnBind(s), Object.keys(h).length > 0 && await this.batch(h), Object.keys(h).length > 0 && (this.placeData = await this.getPlacement(), Object.values(h).forEach((m) => {
|
|
1872
1971
|
console.log(
|
|
1873
1972
|
"Приложение успешно встроено в",
|
|
1874
|
-
|
|
1973
|
+
m.params.PLACEMENT
|
|
1875
1974
|
);
|
|
1876
1975
|
}));
|
|
1877
1976
|
}
|
|
1878
1977
|
/* Отвязка встройки из place */
|
|
1879
|
-
async placementUnBind(
|
|
1880
|
-
let
|
|
1881
|
-
Array.isArray(
|
|
1978
|
+
async placementUnBind(r) {
|
|
1979
|
+
let e = [];
|
|
1980
|
+
Array.isArray(r) ? e = r.map((n) => typeof n == "string" ? { placement: n } : n) : typeof r == "string" ? e = [{ placement: r }] : e = [r], e = e.filter(
|
|
1981
|
+
(n) => n.placement !== "PAGE_BACKGROUND_WORKER" && n.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
1982
|
+
);
|
|
1882
1983
|
const i = {};
|
|
1883
|
-
for (let n = 0; n <
|
|
1884
|
-
const
|
|
1885
|
-
PLACEMENT:
|
|
1984
|
+
for (let n = 0; n < e.length; n++) {
|
|
1985
|
+
const o = e[n], l = o.placement, c = o.handler, h = {
|
|
1986
|
+
PLACEMENT: l
|
|
1886
1987
|
};
|
|
1887
|
-
c && (
|
|
1988
|
+
c && (h.HANDLER = c), i[`unbind_${n}`] = {
|
|
1888
1989
|
method: "placement.unbind",
|
|
1889
|
-
params:
|
|
1990
|
+
params: h
|
|
1890
1991
|
};
|
|
1891
1992
|
}
|
|
1892
|
-
Object.keys(i).length > 0 && (await this.batch(i),
|
|
1993
|
+
Object.keys(i).length > 0 && (await this.batch(i), e.forEach((n) => {
|
|
1893
1994
|
console.log("Встройка отвязана", n.placement);
|
|
1894
1995
|
}));
|
|
1895
1996
|
}
|
|
@@ -1897,14 +1998,14 @@ class Mt {
|
|
|
1897
1998
|
async placementCheck() {
|
|
1898
1999
|
if (this.placeData = await this.getPlacement(), !this.placeData)
|
|
1899
2000
|
return;
|
|
1900
|
-
const { pathApp:
|
|
2001
|
+
const { pathApp: r } = this.appConst, e = [], i = [];
|
|
1901
2002
|
for (const n of this.placeData) {
|
|
1902
|
-
if (!n.handler || n.handler.includes(
|
|
2003
|
+
if (n.placement === "PAGE_BACKGROUND_WORKER" || !n.handler || n.handler.includes(r))
|
|
1903
2004
|
continue;
|
|
1904
|
-
const { placement:
|
|
1905
|
-
|
|
2005
|
+
const { placement: o, handler: l, userId: c } = n;
|
|
2006
|
+
e.push({ placement: o, handler: l }), i.push({ placement: o, userId: c });
|
|
1906
2007
|
}
|
|
1907
|
-
|
|
2008
|
+
e.length > 0 && await this.placementUnBind(e), i.length > 0 && await this.placementBind(i, !1);
|
|
1908
2009
|
}
|
|
1909
2010
|
/** Чат-бот */
|
|
1910
2011
|
/* получение списка ботов */
|
|
@@ -1912,22 +2013,22 @@ class Mt {
|
|
|
1912
2013
|
return this.call({
|
|
1913
2014
|
method: "imbot.bot.list",
|
|
1914
2015
|
params: {}
|
|
1915
|
-
}).then((
|
|
1916
|
-
let
|
|
1917
|
-
return console.log("chat-bot list:",
|
|
2016
|
+
}).then((r) => {
|
|
2017
|
+
let e = Object.values(r);
|
|
2018
|
+
return console.log("chat-bot list:", e), e;
|
|
1918
2019
|
});
|
|
1919
2020
|
}
|
|
1920
2021
|
/* регистрация бота */
|
|
1921
|
-
regBot({ code:
|
|
1922
|
-
const { appName: n, pathApp:
|
|
2022
|
+
regBot({ code: r, type: e, name: i }) {
|
|
2023
|
+
const { appName: n, pathApp: o, chatBotLogo: l } = this.appConst, c = this.appInfo.ID;
|
|
1923
2024
|
return this.call({
|
|
1924
2025
|
method: "imbot.register",
|
|
1925
2026
|
params: {
|
|
1926
|
-
CODE:
|
|
2027
|
+
CODE: r ?? this.appInfo.CODE,
|
|
1927
2028
|
// Строковой идентификатор бота, уникальный в рамках вашего приложения (обяз.)
|
|
1928
|
-
TYPE:
|
|
2029
|
+
TYPE: e ?? "O",
|
|
1929
2030
|
// Тип бота, B - чат-бот, ответы поступают сразу, H - человек, ответы поступают с задержкой от 2-х до 10 секунд, O - чат-бот для Открытых линий, S - чат-бот с повышенными привилегиями (supervisor)
|
|
1930
|
-
EVENT_HANDLER:
|
|
2031
|
+
EVENT_HANDLER: o,
|
|
1931
2032
|
// Ссылка на обработчик событий, поступивших от сервера - см. Обработчики событий ниже (обяз).
|
|
1932
2033
|
OPENLINE: "Y",
|
|
1933
2034
|
// Включение режима поддержки Открытых линий, можно не указывать, если TYPE = 'O'
|
|
@@ -1951,581 +2052,519 @@ class Mt {
|
|
|
1951
2052
|
// Ссылка на сайт
|
|
1952
2053
|
PERSONAL_GENDER: "M",
|
|
1953
2054
|
// Пол чат-бота, допустимые значения M - мужской, F - женский, пусто, если не требуется указывать
|
|
1954
|
-
PERSONAL_PHOTO:
|
|
2055
|
+
PERSONAL_PHOTO: l ?? ""
|
|
1955
2056
|
// Аватар чат-бота - base64
|
|
1956
2057
|
}
|
|
1957
2058
|
}
|
|
1958
|
-
}).then((
|
|
2059
|
+
}).then((h) => (console.log("Чат-бот добавлен", h), h));
|
|
1959
2060
|
}
|
|
1960
2061
|
/* Убрать регистрацию бота */
|
|
1961
|
-
unRegBot(
|
|
2062
|
+
unRegBot(r) {
|
|
1962
2063
|
return this.call({
|
|
1963
2064
|
method: "imbot.unregister",
|
|
1964
2065
|
params: {
|
|
1965
|
-
BOT_ID:
|
|
2066
|
+
BOT_ID: r
|
|
1966
2067
|
}
|
|
1967
|
-
}).then((
|
|
2068
|
+
}).then((e) => (console.log("чат-бот удален", e), e));
|
|
1968
2069
|
}
|
|
1969
2070
|
/* Получение данных логера */
|
|
1970
|
-
getLoggerList(
|
|
1971
|
-
return this.logger.getEntityList(
|
|
2071
|
+
getLoggerList(r) {
|
|
2072
|
+
return this.logger.getEntityList(r);
|
|
1972
2073
|
}
|
|
1973
2074
|
}
|
|
1974
|
-
|
|
2075
|
+
ot = new WeakSet(), Nt = function() {
|
|
1975
2076
|
return this.call({ method: "app.info" });
|
|
1976
|
-
}, At = new WeakSet(),
|
|
2077
|
+
}, At = new WeakSet(), Ot = function() {
|
|
1977
2078
|
return this.call({ method: "user.current" });
|
|
1978
|
-
}, et = new WeakSet(),
|
|
1979
|
-
let
|
|
1980
|
-
if (Object.values(
|
|
2079
|
+
}, et = new WeakSet(), ft = function(r, e, i, n) {
|
|
2080
|
+
let o = { ...r.errors };
|
|
2081
|
+
if (Object.values(r.errors).some(
|
|
1981
2082
|
(c) => {
|
|
1982
2083
|
if (typeof c != "string")
|
|
1983
2084
|
return !1;
|
|
1984
|
-
const
|
|
1985
|
-
return
|
|
2085
|
+
const h = c.toUpperCase();
|
|
2086
|
+
return h === "TIMEOUT" || h === "OPERATION_TIME_LIMIT" || h.includes("TIMEOUT") || h.includes("OPERATION_TIME_LIMIT");
|
|
1986
2087
|
}
|
|
1987
2088
|
) && n) {
|
|
1988
|
-
const c =
|
|
1989
|
-
if (
|
|
1990
|
-
for (const
|
|
1991
|
-
if (!
|
|
1992
|
-
const
|
|
1993
|
-
|
|
2089
|
+
const c = e ? Object.keys(e).filter((m) => m !== "errorsList") : [], h = new Set(Object.keys(r.errors || {})), s = /* @__PURE__ */ new Set();
|
|
2090
|
+
if (e) {
|
|
2091
|
+
for (const m of c)
|
|
2092
|
+
if (!h.has(m)) {
|
|
2093
|
+
const A = e[m];
|
|
2094
|
+
A != null && s.add(m);
|
|
1994
2095
|
}
|
|
1995
2096
|
}
|
|
1996
|
-
const
|
|
1997
|
-
(
|
|
1998
|
-
if (typeof
|
|
2097
|
+
const f = Object.values(r.errors).find(
|
|
2098
|
+
(m) => {
|
|
2099
|
+
if (typeof m != "string")
|
|
1999
2100
|
return !1;
|
|
2000
|
-
const
|
|
2001
|
-
return
|
|
2101
|
+
const A = m.toUpperCase();
|
|
2102
|
+
return A === "TIMEOUT" || A === "OPERATION_TIME_LIMIT" || A.includes("TIMEOUT") || A.includes("OPERATION_TIME_LIMIT");
|
|
2002
2103
|
}
|
|
2003
2104
|
);
|
|
2004
|
-
for (const
|
|
2005
|
-
!s.has(
|
|
2006
|
-
}
|
|
2007
|
-
return a;
|
|
2008
|
-
}, lt = new WeakSet(), Et = async function(e) {
|
|
2009
|
-
var s, d, N;
|
|
2010
|
-
const { appName: r, pathApp: i } = this.appConst, n = {}, a = [];
|
|
2011
|
-
let u = r;
|
|
2012
|
-
this.domain === "szdl.bitrix24.ru" && ((s = this.appInfo) != null && s.ID) && (u = `${r}: #${this.appInfo.ID}`);
|
|
2013
|
-
const c = { need: !1, exist: !1, handler: `${i}/` }, A = {
|
|
2014
|
-
need: !1,
|
|
2015
|
-
exist: !1,
|
|
2016
|
-
handler: (d = this.userInfo) != null && d.ID ? `${i}?USER_ID=${this.userInfo.ID}/` : null,
|
|
2017
|
-
userId: (N = this.userInfo) == null ? void 0 : N.ID
|
|
2018
|
-
};
|
|
2019
|
-
for (const l of e)
|
|
2020
|
-
l.placement === "PAGE_BACKGROUND_WORKER_ALL" && (c.need = !0), l.placement === "PAGE_BACKGROUND_WORKER" && (A.need = !0);
|
|
2021
|
-
if (c.need) {
|
|
2022
|
-
const l = this.placeData.find(
|
|
2023
|
-
(h) => h.placement === "PAGE_BACKGROUND_WORKER" && h.handler === c.handler
|
|
2024
|
-
);
|
|
2025
|
-
c.exist = !!l;
|
|
2105
|
+
for (const m of Object.keys(i))
|
|
2106
|
+
!s.has(m) && !r.errors[m] && (o[m] = f || "TIMEOUT или OPERATION_TIME_LIMIT: запрос не был обработан");
|
|
2026
2107
|
}
|
|
2027
|
-
|
|
2028
|
-
const l = this.placeData.find(
|
|
2029
|
-
(h) => h.placement === "PAGE_BACKGROUND_WORKER" && h.handler === A.handler
|
|
2030
|
-
);
|
|
2031
|
-
A.exist = !!l;
|
|
2032
|
-
}
|
|
2033
|
-
if (c.need && !A.need)
|
|
2034
|
-
c.exist || (n.bind_general = {
|
|
2035
|
-
method: "placement.bind",
|
|
2036
|
-
params: {
|
|
2037
|
-
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2038
|
-
HANDLER: c.handler,
|
|
2039
|
-
LANG_ALL: {
|
|
2040
|
-
ru: {
|
|
2041
|
-
TITLE: u
|
|
2042
|
-
}
|
|
2043
|
-
},
|
|
2044
|
-
OPTIONS: {
|
|
2045
|
-
errorHandlerUrl: c.handler
|
|
2046
|
-
}
|
|
2047
|
-
}
|
|
2048
|
-
});
|
|
2049
|
-
else if (A.need && !c.need)
|
|
2050
|
-
A.exist || (n.bind_your = {
|
|
2051
|
-
method: "placement.bind",
|
|
2052
|
-
params: {
|
|
2053
|
-
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2054
|
-
HANDLER: A.handler,
|
|
2055
|
-
LANG_ALL: {
|
|
2056
|
-
ru: {
|
|
2057
|
-
TITLE: u
|
|
2058
|
-
}
|
|
2059
|
-
},
|
|
2060
|
-
OPTIONS: {
|
|
2061
|
-
errorHandlerUrl: A.handler
|
|
2062
|
-
},
|
|
2063
|
-
USER_ID: A.userId
|
|
2064
|
-
}
|
|
2065
|
-
});
|
|
2066
|
-
else if (c.need && A.need)
|
|
2067
|
-
return A.exist && c.exist ? { batchRequests: n, placesToUnbind: a } : (!A.exist && c.exist && a.push({
|
|
2068
|
-
placement: "PAGE_BACKGROUND_WORKER",
|
|
2069
|
-
handler: c.handler
|
|
2070
|
-
}), A.exist || (n.bind_your = {
|
|
2071
|
-
method: "placement.bind",
|
|
2072
|
-
params: {
|
|
2073
|
-
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2074
|
-
HANDLER: A.handler,
|
|
2075
|
-
LANG_ALL: {
|
|
2076
|
-
ru: {
|
|
2077
|
-
TITLE: u
|
|
2078
|
-
}
|
|
2079
|
-
},
|
|
2080
|
-
OPTIONS: {
|
|
2081
|
-
errorHandlerUrl: A.handler
|
|
2082
|
-
},
|
|
2083
|
-
USER_ID: A.userId
|
|
2084
|
-
}
|
|
2085
|
-
}), n.bind_general = {
|
|
2086
|
-
method: "placement.bind",
|
|
2087
|
-
params: {
|
|
2088
|
-
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2089
|
-
HANDLER: c.handler,
|
|
2090
|
-
LANG_ALL: {
|
|
2091
|
-
ru: {
|
|
2092
|
-
TITLE: u
|
|
2093
|
-
}
|
|
2094
|
-
},
|
|
2095
|
-
OPTIONS: {
|
|
2096
|
-
errorHandlerUrl: c.handler
|
|
2097
|
-
}
|
|
2098
|
-
}
|
|
2099
|
-
}, { batchRequests: n, placesToUnbind: a });
|
|
2100
|
-
return { batchRequests: n, placesToUnbind: a };
|
|
2108
|
+
return o;
|
|
2101
2109
|
};
|
|
2102
|
-
class
|
|
2103
|
-
constructor(
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2110
|
+
class Mt {
|
|
2111
|
+
constructor(r) {
|
|
2112
|
+
I(this, "entityName", "tabs");
|
|
2113
|
+
I(this, "maxTabs", 20);
|
|
2114
|
+
I(this, "tabList", []);
|
|
2115
|
+
I(this, "id", 0);
|
|
2116
|
+
I(this, "hasStarted", !1);
|
|
2117
|
+
I(this, "heartbeat");
|
|
2118
|
+
I(this, "runHeartbeat");
|
|
2119
|
+
I(this, "random", this.getRandomNum());
|
|
2120
|
+
I(this, "activeMaxPause", 5 * 60 * 1e3 + this.random);
|
|
2121
|
+
I(this, "quickCleanupThreshold", 2 * 60 * 1e3);
|
|
2122
|
+
// агрессивная очистка при переполнении
|
|
2123
|
+
I(this, "pollInterval", (60 + this.random) * 1e3);
|
|
2124
|
+
// 30-90 cек для выбора лидера
|
|
2125
|
+
I(this, "sessionId", `${Date.now()}-${Math.random().toString(16).slice(2)}`);
|
|
2126
|
+
I(this, "continueCondition");
|
|
2127
|
+
I(this, "defaultContinueBackground", () => !0);
|
|
2128
|
+
var l, c, h;
|
|
2129
|
+
if (!r) {
|
|
2130
|
+
console.error("BackgroundWorker: Нет опций конструктора");
|
|
2118
2131
|
return;
|
|
2119
2132
|
}
|
|
2120
|
-
const { appFunc:
|
|
2121
|
-
this.bx = i, this.appPath = i.appConst.pathApp ?? "", this.appName = i.appConst.appName ?? "", this.
|
|
2133
|
+
const { appFunc: e, bx: i, users: n, continueBackground: o } = r;
|
|
2134
|
+
this.bx = i, this.appInit = e, this.users = n, this.appPath = ((l = i == null ? void 0 : i.appConst) == null ? void 0 : l.pathApp) ?? "", this.appName = ((c = i == null ? void 0 : i.appConst) == null ? void 0 : c.appName) ?? "", this.appCodeName = ((h = i == null ? void 0 : i.appConst) == null ? void 0 : h.appCodeName) ?? "", this.start = /* @__PURE__ */ new Date(), this.continueCondition = typeof o == "function" ? o : this.defaultContinueBackground;
|
|
2122
2135
|
}
|
|
2123
2136
|
async init() {
|
|
2124
2137
|
if (!this.appInit) {
|
|
2125
|
-
console.error(
|
|
2126
|
-
"Функция-запуск не передана в appInit, отмена инициализации бекворкера"
|
|
2127
|
-
), console.log("BackgroundWorker: Отмена init - не передана appInit");
|
|
2138
|
+
console.error("BackgroundWorker: appInit не передан");
|
|
2128
2139
|
return;
|
|
2129
2140
|
}
|
|
2130
2141
|
if (!this.bx) {
|
|
2131
|
-
console.error("
|
|
2142
|
+
console.error("BackgroundWorker: bx не передан");
|
|
2132
2143
|
return;
|
|
2133
2144
|
}
|
|
2134
|
-
if (
|
|
2145
|
+
if (this.isAppPage()) {
|
|
2135
2146
|
console.log(
|
|
2136
|
-
"BackgroundWorker:
|
|
2147
|
+
"BackgroundWorker: Страница приложения, фоновый воркер не запускается"
|
|
2137
2148
|
);
|
|
2138
2149
|
return;
|
|
2139
2150
|
}
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
"BackgroundWorker:
|
|
2151
|
+
await this.checkPlacementType() && await this.continueBackground() && (await this.checkEntity(), await this.refreshTabs(!0), await this.ensureTabRegistered(), this.heartbeat = setInterval(() => {
|
|
2152
|
+
this.backgroundTick().catch((e) => {
|
|
2153
|
+
console.error("BackgroundWorker: backgroundTick failed", e);
|
|
2154
|
+
});
|
|
2155
|
+
}, this.pollInterval), await this.backgroundTick());
|
|
2156
|
+
}
|
|
2157
|
+
async backgroundTick() {
|
|
2158
|
+
if (!await this.continueBackground()) {
|
|
2159
|
+
this.stopTimers(), console.log(
|
|
2160
|
+
"BackgroundWorker: Остановка backgroundTick - условие не выполнено"
|
|
2143
2161
|
);
|
|
2144
2162
|
return;
|
|
2145
2163
|
}
|
|
2146
|
-
await this.
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2164
|
+
await this.refreshTabs(!0), await this.ensureTabRegistered();
|
|
2165
|
+
const e = this.selectLeaderId(), i = e && +this.id == +e;
|
|
2166
|
+
await this.updateTabState(i), i && !this.hasStarted && (this.hasStarted = !0, await this.runAsLeader());
|
|
2167
|
+
}
|
|
2168
|
+
stopTimers() {
|
|
2169
|
+
this.heartbeat && (clearInterval(this.heartbeat), this.heartbeat = void 0), this.runHeartbeat && (clearInterval(this.runHeartbeat), this.runHeartbeat = void 0);
|
|
2170
|
+
}
|
|
2171
|
+
isAppPage() {
|
|
2172
|
+
var r;
|
|
2173
|
+
if (typeof BX24 > "u" || !((r = BX24.placement) != null && r.info))
|
|
2174
|
+
return !1;
|
|
2175
|
+
try {
|
|
2176
|
+
const e = BX24.placement.info(), i = e == null ? void 0 : e.placement, n = (e == null ? void 0 : e.options) || {}, o = (n == null ? void 0 : n.URI) || "", l = i === "PAGE_BACKGROUND_WORKER" || (n == null ? void 0 : n.ID) === "PAGE_BACKGROUND_WORKER", c = typeof o == "string" && (o.includes("marketplace/app") || o.includes("marketplace/apps") || o.includes("placement") || o.includes("sozdavatel" + this.appCodeName));
|
|
2177
|
+
return !l || c;
|
|
2178
|
+
} catch {
|
|
2179
|
+
return !1;
|
|
2180
|
+
}
|
|
2154
2181
|
}
|
|
2155
2182
|
async checkEntity() {
|
|
2156
2183
|
var i;
|
|
2157
|
-
const
|
|
2158
|
-
|
|
2159
|
-
|
|
2184
|
+
const r = await this.safeCall(
|
|
2185
|
+
() => this.bx.call({ method: "entity.get" })
|
|
2186
|
+
);
|
|
2187
|
+
((i = r == null ? void 0 : r.find) == null ? void 0 : i.call(
|
|
2188
|
+
r,
|
|
2160
2189
|
(n) => n.ENTITY === this.entityName
|
|
2161
|
-
)) || await this.
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2190
|
+
)) || await this.safeCall(
|
|
2191
|
+
() => this.bx.call({
|
|
2192
|
+
method: "entity.add",
|
|
2193
|
+
params: {
|
|
2194
|
+
ENTITY: this.entityName,
|
|
2195
|
+
NAME: this.entityName,
|
|
2196
|
+
ACCESS: { AU: "X" }
|
|
2197
|
+
}
|
|
2198
|
+
})
|
|
2199
|
+
);
|
|
2169
2200
|
}
|
|
2170
2201
|
async getTabs() {
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
}
|
|
2202
|
+
const r = await this.safeCall(
|
|
2203
|
+
() => {
|
|
2204
|
+
var e;
|
|
2205
|
+
return this.bx.call({
|
|
2206
|
+
method: "entity.item.get",
|
|
2207
|
+
params: {
|
|
2208
|
+
ENTITY: this.entityName,
|
|
2209
|
+
FILTER: { NAME: (e = this.bx.userInfo) == null ? void 0 : e.ID },
|
|
2210
|
+
SORT: { DATE_CREATE: "DESC" }
|
|
2211
|
+
}
|
|
2212
|
+
});
|
|
2182
2213
|
}
|
|
2183
|
-
|
|
2184
|
-
return
|
|
2185
|
-
if (!
|
|
2214
|
+
);
|
|
2215
|
+
return !Array.isArray(r) || !r.length ? [] : r.map((e) => {
|
|
2216
|
+
if (!e)
|
|
2186
2217
|
return { id: void 0, data: void 0 };
|
|
2187
2218
|
try {
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2219
|
+
const i = JSON.parse(e.DETAIL_TEXT);
|
|
2220
|
+
return { id: +e.ID || 0, data: i };
|
|
2221
|
+
} catch (i) {
|
|
2222
|
+
return console.log("BackgroundWorker: parse tab error", i), { id: +e.ID || 0, data: void 0 };
|
|
2191
2223
|
}
|
|
2192
|
-
})
|
|
2224
|
+
});
|
|
2193
2225
|
}
|
|
2194
|
-
async
|
|
2195
|
-
|
|
2196
|
-
|
|
2226
|
+
async ensureTabRegistered() {
|
|
2227
|
+
if (this.id)
|
|
2228
|
+
return +this.id || 0;
|
|
2229
|
+
if (this.tabList.length >= this.maxTabs && await this.refreshTabs(!0, this.quickCleanupThreshold), this.tabList.length >= this.maxTabs)
|
|
2230
|
+
return console.log(
|
|
2231
|
+
"BackgroundWorker: Достигнут лимит вкладок даже после быстрой очистки, не регистрируемся"
|
|
2232
|
+
), 0;
|
|
2233
|
+
const r = {
|
|
2197
2234
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2198
|
-
|
|
2199
|
-
start: !1
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2235
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2236
|
+
start: !1,
|
|
2237
|
+
sessionId: this.sessionId
|
|
2238
|
+
}, e = await this.safeCall(
|
|
2239
|
+
() => {
|
|
2240
|
+
var i;
|
|
2241
|
+
return this.bx.call({
|
|
2242
|
+
method: "entity.item.add",
|
|
2243
|
+
params: {
|
|
2244
|
+
ENTITY: this.entityName,
|
|
2245
|
+
NAME: (i = this.bx.userInfo) == null ? void 0 : i.ID,
|
|
2246
|
+
DETAIL_TEXT: JSON.stringify(r)
|
|
2247
|
+
}
|
|
2248
|
+
});
|
|
2207
2249
|
}
|
|
2208
|
-
|
|
2250
|
+
) || 0;
|
|
2251
|
+
return this.id = +e || 0, this.id;
|
|
2209
2252
|
}
|
|
2210
|
-
async
|
|
2211
|
-
|
|
2212
|
-
|
|
2253
|
+
async updateTabState(r) {
|
|
2254
|
+
if (!this.id)
|
|
2255
|
+
return;
|
|
2256
|
+
const e = {
|
|
2213
2257
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2214
|
-
|
|
2215
|
-
start:
|
|
2258
|
+
createdAt: this.start.toISOString(),
|
|
2259
|
+
start: r,
|
|
2260
|
+
sessionId: this.sessionId
|
|
2216
2261
|
};
|
|
2217
|
-
await this.
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2262
|
+
await this.safeCall(
|
|
2263
|
+
() => {
|
|
2264
|
+
var i;
|
|
2265
|
+
return this.bx.call({
|
|
2266
|
+
method: "entity.item.update",
|
|
2267
|
+
params: {
|
|
2268
|
+
ENTITY: this.entityName,
|
|
2269
|
+
ID: this.id,
|
|
2270
|
+
NAME: (i = this.bx.userInfo) == null ? void 0 : i.ID,
|
|
2271
|
+
DETAIL_TEXT: JSON.stringify(e)
|
|
2272
|
+
}
|
|
2273
|
+
});
|
|
2224
2274
|
}
|
|
2225
|
-
|
|
2275
|
+
);
|
|
2226
2276
|
}
|
|
2227
|
-
async deleteTabs(
|
|
2228
|
-
if (!
|
|
2277
|
+
async deleteTabs(r = []) {
|
|
2278
|
+
if (!r.length)
|
|
2229
2279
|
return;
|
|
2230
|
-
const
|
|
2280
|
+
const e = r.map((i) => ({
|
|
2231
2281
|
method: "entity.item.delete",
|
|
2232
2282
|
params: { ENTITY: this.entityName, ID: i.id }
|
|
2233
2283
|
}));
|
|
2234
|
-
|
|
2284
|
+
await this.safeCall(() => this.bx.batch(e));
|
|
2235
2285
|
}
|
|
2236
2286
|
getRandomNum() {
|
|
2237
|
-
const
|
|
2238
|
-
return Math.round(Math.random()) ?
|
|
2287
|
+
const r = Math.round(Number(Math.random().toFixed(2)) * 30);
|
|
2288
|
+
return Math.round(Math.random()) ? r : -r;
|
|
2239
2289
|
}
|
|
2240
2290
|
async checkPlacementType() {
|
|
2241
|
-
var
|
|
2291
|
+
var r;
|
|
2242
2292
|
try {
|
|
2243
|
-
const
|
|
2244
|
-
|
|
2293
|
+
const e = await this.safeCall(
|
|
2294
|
+
() => this.bx.getPlacement()
|
|
2295
|
+
);
|
|
2296
|
+
if (!e || !Array.isArray(e))
|
|
2245
2297
|
return console.log(
|
|
2246
|
-
"BackgroundWorker: Не
|
|
2298
|
+
"BackgroundWorker: Не получили список размещений, продолжаем"
|
|
2247
2299
|
), !0;
|
|
2248
|
-
const i = +(((
|
|
2300
|
+
const i = +(((r = this.bx.userInfo) == null ? void 0 : r.ID) ?? 0), n = this.isIndividualPlacement(
|
|
2301
|
+
typeof window < "u" ? window.location.href : ""
|
|
2302
|
+
), o = !n;
|
|
2249
2303
|
if (!i)
|
|
2250
|
-
return
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
if (
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
u = !0;
|
|
2260
|
-
break;
|
|
2261
|
-
}
|
|
2304
|
+
return !0;
|
|
2305
|
+
let l = !1;
|
|
2306
|
+
for (const c of e) {
|
|
2307
|
+
if (c.placement !== "PAGE_BACKGROUND_WORKER" || !(c.userId || c.handler && c.handler.includes("USER_ID=")))
|
|
2308
|
+
continue;
|
|
2309
|
+
const s = c.userId || (c.handler ? this.extractUserIdFromHandler(c.handler) : null);
|
|
2310
|
+
if (s && +s === i) {
|
|
2311
|
+
l = !0;
|
|
2312
|
+
break;
|
|
2262
2313
|
}
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2314
|
+
}
|
|
2315
|
+
return n ? (console.log(
|
|
2316
|
+
"BackgroundWorker: Индивидуальная встройка - разрешено"
|
|
2317
|
+
), !0) : o && l ? (console.log(
|
|
2318
|
+
"BackgroundWorker: Есть личная встройка, общую не запускаем"
|
|
2267
2319
|
), !1) : (console.log(
|
|
2268
|
-
"BackgroundWorker: Проверка типа встройки пройдена, продолжаем
|
|
2320
|
+
"BackgroundWorker: Проверка типа встройки пройдена, продолжаем"
|
|
2269
2321
|
), !0);
|
|
2270
|
-
} catch (
|
|
2322
|
+
} catch (e) {
|
|
2271
2323
|
return console.error(
|
|
2272
2324
|
"BackgroundWorker: Ошибка при проверке типа встройки",
|
|
2273
|
-
|
|
2325
|
+
e
|
|
2274
2326
|
), !0;
|
|
2275
2327
|
}
|
|
2276
2328
|
}
|
|
2277
|
-
|
|
2278
|
-
|
|
2329
|
+
isIndividualPlacement(r) {
|
|
2330
|
+
return !r || typeof r != "string" ? !1 : r.includes("USER_ID=");
|
|
2331
|
+
}
|
|
2332
|
+
extractUserIdFromHandler(r) {
|
|
2333
|
+
if (!r || typeof r != "string")
|
|
2279
2334
|
return null;
|
|
2280
|
-
const
|
|
2281
|
-
return
|
|
2335
|
+
const e = r.match(/USER_ID=(\d+)/);
|
|
2336
|
+
return e ? +e[1] : null;
|
|
2282
2337
|
}
|
|
2283
2338
|
async continueBackground() {
|
|
2284
2339
|
try {
|
|
2285
|
-
const
|
|
2340
|
+
const e = !!await Promise.resolve(
|
|
2286
2341
|
this.continueCondition(this)
|
|
2287
2342
|
);
|
|
2288
|
-
return console.log(
|
|
2289
|
-
} catch (
|
|
2343
|
+
return console.log(e ? "BackgroundWorker: Условие продолжения выполнено" : "BackgroundWorker: continueBackground вернул false"), e;
|
|
2344
|
+
} catch (r) {
|
|
2290
2345
|
return console.error(
|
|
2291
|
-
"BackgroundWorker: Ошибка
|
|
2292
|
-
|
|
2293
|
-
), console.log(
|
|
2294
|
-
"BackgroundWorker: Отмена continueBackground - исключение в условии запуска"
|
|
2346
|
+
"BackgroundWorker: Ошибка в continueCondition",
|
|
2347
|
+
r
|
|
2295
2348
|
), !1;
|
|
2296
2349
|
}
|
|
2297
2350
|
}
|
|
2298
|
-
async
|
|
2299
|
-
const
|
|
2300
|
-
for (const
|
|
2301
|
-
if (!(
|
|
2302
|
-
|
|
2351
|
+
async refreshTabs(r = !1, e = this.activeMaxPause) {
|
|
2352
|
+
const i = [], n = [], o = Date.now(), l = await this.getTabs();
|
|
2353
|
+
for (const c of l) {
|
|
2354
|
+
if (!(c != null && c.data)) {
|
|
2355
|
+
i.push(c);
|
|
2356
|
+
continue;
|
|
2357
|
+
}
|
|
2358
|
+
if (o - new Date(c.data.lastActive || 0).getTime() > e) {
|
|
2359
|
+
i.push(c);
|
|
2303
2360
|
continue;
|
|
2304
2361
|
}
|
|
2305
|
-
|
|
2362
|
+
n.push(c);
|
|
2306
2363
|
}
|
|
2307
|
-
return await this.deleteTabs(
|
|
2364
|
+
return r && i.length && await this.deleteTabs(i), this.tabList = n, n;
|
|
2308
2365
|
}
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
return;
|
|
2319
|
-
}
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
if (+u.id !== this.id && ((n = u.data) != null && n.start && (e = !0), ((a = u.data) == null ? void 0 : a.duration) > r)) {
|
|
2330
|
-
r = !1;
|
|
2331
|
-
break;
|
|
2332
|
-
}
|
|
2333
|
-
const i = !e && !!r;
|
|
2334
|
-
return this.updateTab(i).catch((u) => {
|
|
2335
|
-
console.error("BackgroundWorker: updateTab failed", u);
|
|
2336
|
-
}), console.log(
|
|
2337
|
-
`BackgroundWorker: Проверка вкладок - можно запускать приложение? ${i}`
|
|
2338
|
-
), i;
|
|
2339
|
-
}
|
|
2340
|
-
async startBackground() {
|
|
2341
|
-
this.interval && (clearInterval(this.interval), this.interval = void 0), this.interval = setInterval(() => {
|
|
2342
|
-
this.updateTab(!0).catch((e) => {
|
|
2343
|
-
console.error(
|
|
2344
|
-
"BackgroundWorker: periodic updateTab failed",
|
|
2345
|
-
e
|
|
2366
|
+
selectLeaderId() {
|
|
2367
|
+
var e;
|
|
2368
|
+
return this.tabList.length && +((e = [...this.tabList].sort((i, n) => {
|
|
2369
|
+
var c, h, s, f;
|
|
2370
|
+
const o = new Date(
|
|
2371
|
+
((c = i.data) == null ? void 0 : c.createdAt) || ((h = i.data) == null ? void 0 : h.lastActive) || 0
|
|
2372
|
+
).getTime(), l = new Date(
|
|
2373
|
+
((s = n.data) == null ? void 0 : s.createdAt) || ((f = n.data) == null ? void 0 : f.lastActive) || 0
|
|
2374
|
+
).getTime();
|
|
2375
|
+
return o === l ? (+i.id || 0) - (+n.id || 0) : o - l;
|
|
2376
|
+
})[0]) == null ? void 0 : e.id) || 0;
|
|
2377
|
+
}
|
|
2378
|
+
async runAsLeader() {
|
|
2379
|
+
this.runHeartbeat = setInterval(
|
|
2380
|
+
() => {
|
|
2381
|
+
this.updateTabState(!0).catch(
|
|
2382
|
+
(r) => console.error(
|
|
2383
|
+
"BackgroundWorker: heartbeat update failed",
|
|
2384
|
+
r
|
|
2385
|
+
)
|
|
2346
2386
|
);
|
|
2347
|
-
}
|
|
2348
|
-
|
|
2387
|
+
},
|
|
2388
|
+
Math.max(20 * 1e3, Math.floor(this.pollInterval / 2))
|
|
2389
|
+
);
|
|
2390
|
+
try {
|
|
2391
|
+
await this.appInit();
|
|
2392
|
+
} catch (r) {
|
|
2393
|
+
console.error("BackgroundWorker: appInit failed", r);
|
|
2394
|
+
}
|
|
2395
|
+
this.stopTimers(), this.id && (await this.deleteTabs([{ id: this.id }]), this.id = 0);
|
|
2349
2396
|
}
|
|
2350
2397
|
async setBackgroundWorkerAll() {
|
|
2351
|
-
var
|
|
2352
|
-
if (!((
|
|
2398
|
+
var N, y;
|
|
2399
|
+
if (!((N = this.bx) != null && N.isAdmin)) {
|
|
2353
2400
|
console.log(
|
|
2354
|
-
"BackgroundWorker:
|
|
2401
|
+
"BackgroundWorker: setBackgroundWorkerAll доступен только админам"
|
|
2355
2402
|
);
|
|
2356
2403
|
return;
|
|
2357
2404
|
}
|
|
2358
|
-
(
|
|
2359
|
-
const
|
|
2405
|
+
(y = this.users) != null && y.length || await this.getEntityData();
|
|
2406
|
+
const r = await this.safeCall(
|
|
2407
|
+
() => this.bx.getPlacement()
|
|
2408
|
+
), e = /* @__PURE__ */ new Map();
|
|
2360
2409
|
let i = null;
|
|
2361
|
-
|
|
2362
|
-
if (
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
);
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
);
|
|
2378
|
-
const
|
|
2379
|
-
0
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
a.find((I) => +I.ID === g) || N.push(g);
|
|
2386
|
-
for (const g of N)
|
|
2387
|
-
this.appPath && (u.push({
|
|
2410
|
+
(r || []).forEach((p) => {
|
|
2411
|
+
if (p.placement !== "PAGE_BACKGROUND_WORKER")
|
|
2412
|
+
return;
|
|
2413
|
+
if (p.userId || p.handler && p.handler.includes("USER_ID=")) {
|
|
2414
|
+
const b = p.userId || (p.handler ? this.extractUserIdFromHandler(p.handler) : null);
|
|
2415
|
+
b && e.set(+b, p);
|
|
2416
|
+
} else
|
|
2417
|
+
i = p;
|
|
2418
|
+
});
|
|
2419
|
+
const n = await this.resolveAdmins(), o = await this.getEligibleUsersForBackgroundWorker(n);
|
|
2420
|
+
o.sort((p, R) => {
|
|
2421
|
+
const b = p.LAST_LOGIN ? new Date(p.LAST_LOGIN) : /* @__PURE__ */ new Date(0);
|
|
2422
|
+
return (R.LAST_LOGIN ? new Date(R.LAST_LOGIN) : /* @__PURE__ */ new Date(0)) - b;
|
|
2423
|
+
});
|
|
2424
|
+
const l = 10, h = o.slice(0, l).filter(
|
|
2425
|
+
(p) => !e.has(+p.ID)
|
|
2426
|
+
), s = [];
|
|
2427
|
+
for (const [p] of e) {
|
|
2428
|
+
const R = +p || 0;
|
|
2429
|
+
o.find((M) => +M.ID === R) || s.push(R);
|
|
2430
|
+
}
|
|
2431
|
+
const f = [];
|
|
2432
|
+
for (const p of s)
|
|
2433
|
+
this.appPath && f.push({
|
|
2388
2434
|
method: "placement.unbind",
|
|
2389
2435
|
params: {
|
|
2390
2436
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2391
|
-
HANDLER: `${this.appPath}?USER_ID=${
|
|
2437
|
+
HANDLER: `${this.appPath}?USER_ID=${p}/`
|
|
2392
2438
|
}
|
|
2393
|
-
})
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
d && this.appPath && (u.push({
|
|
2439
|
+
});
|
|
2440
|
+
const m = i && h.length > 0;
|
|
2441
|
+
m && this.appPath && f.push({
|
|
2397
2442
|
method: "placement.unbind",
|
|
2398
2443
|
params: {
|
|
2399
2444
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2400
|
-
HANDLER: i.handler || `${this.appPath}
|
|
2445
|
+
HANDLER: i.handler || `${this.appPath}`
|
|
2401
2446
|
}
|
|
2402
|
-
})
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
for (const g of s)
|
|
2406
|
-
this.appPath && u.push({
|
|
2447
|
+
});
|
|
2448
|
+
for (const p of h)
|
|
2449
|
+
this.appPath && f.push({
|
|
2407
2450
|
method: "placement.bind",
|
|
2408
2451
|
params: {
|
|
2409
2452
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2410
|
-
HANDLER: `${this.appPath}?USER_ID=${
|
|
2411
|
-
LANG_ALL: {
|
|
2412
|
-
ru: {
|
|
2413
|
-
TITLE: this.appName
|
|
2414
|
-
}
|
|
2415
|
-
},
|
|
2453
|
+
HANDLER: `${this.appPath}?USER_ID=${p.ID}/`,
|
|
2454
|
+
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
2416
2455
|
OPTIONS: {
|
|
2417
|
-
errorHandlerUrl: `${this.appPath}?USER_ID=${
|
|
2456
|
+
errorHandlerUrl: `${this.appPath}?USER_ID=${p.ID}/`
|
|
2418
2457
|
},
|
|
2419
|
-
USER_ID:
|
|
2458
|
+
USER_ID: p.ID
|
|
2420
2459
|
}
|
|
2421
2460
|
});
|
|
2422
|
-
(!i ||
|
|
2461
|
+
(!i || m) && this.appPath && f.push({
|
|
2423
2462
|
method: "placement.bind",
|
|
2424
2463
|
params: {
|
|
2425
2464
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2426
|
-
HANDLER: `${this.appPath}
|
|
2427
|
-
LANG_ALL: {
|
|
2428
|
-
|
|
2429
|
-
TITLE: this.appName
|
|
2430
|
-
}
|
|
2431
|
-
},
|
|
2432
|
-
OPTIONS: {
|
|
2433
|
-
errorHandlerUrl: `${this.appPath}/`
|
|
2434
|
-
}
|
|
2465
|
+
HANDLER: `${this.appPath}`,
|
|
2466
|
+
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
2467
|
+
OPTIONS: { errorHandlerUrl: `${this.appPath}` }
|
|
2435
2468
|
}
|
|
2436
|
-
})
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
(
|
|
2441
|
-
), h = u.filter(
|
|
2442
|
-
(g) => g.method === "placement.bind"
|
|
2469
|
+
});
|
|
2470
|
+
const A = f.filter(
|
|
2471
|
+
(p) => p.method === "placement.unbind"
|
|
2472
|
+
), u = f.filter(
|
|
2473
|
+
(p) => p.method === "placement.bind"
|
|
2443
2474
|
);
|
|
2444
|
-
|
|
2445
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
|
|
2475
|
+
A.length && await this.safeCall(
|
|
2476
|
+
() => this.bx.batch(
|
|
2477
|
+
Object.fromEntries(
|
|
2478
|
+
A.map((p, R) => [`unbind_${R}`, p])
|
|
2479
|
+
)
|
|
2449
2480
|
)
|
|
2450
|
-
),
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
Object.fromEntries(
|
|
2456
|
-
h.map((g, L) => [`bind_${L}`, g])
|
|
2481
|
+
), u.length && await this.safeCall(
|
|
2482
|
+
() => this.bx.batch(
|
|
2483
|
+
Object.fromEntries(
|
|
2484
|
+
u.map((p, R) => [`bind_${R}`, p])
|
|
2485
|
+
)
|
|
2457
2486
|
)
|
|
2458
|
-
), console.log(
|
|
2459
|
-
"setBackgroundWorkerAll: Все операции привязки выполнены успешно"
|
|
2460
|
-
)), u.length === 0 && console.log("setBackgroundWorkerAll: Нет операций для выполнения");
|
|
2461
|
-
}
|
|
2462
|
-
async getEligibleUsersForBackgroundWorker(e = []) {
|
|
2463
|
-
return (this.users ?? []).filter(
|
|
2464
|
-
(i) => i.ACTIVE === "Y" || i.ACTIVE === !0
|
|
2465
|
-
).filter((i) => {
|
|
2466
|
-
const n = +i.ID;
|
|
2467
|
-
return e.includes(n);
|
|
2468
|
-
});
|
|
2487
|
+
), f.length || console.log("setBackgroundWorkerAll: Нет операций");
|
|
2469
2488
|
}
|
|
2470
|
-
async
|
|
2471
|
-
var
|
|
2489
|
+
async resolveAdmins() {
|
|
2490
|
+
var r, e;
|
|
2472
2491
|
try {
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
);
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
), n = c), BX24.appOption.set("adminsList", JSON.stringify(n)), console.log(
|
|
2490
|
-
`BackgroundWorker: Список админов обновлен: ${n.length} админов`
|
|
2491
|
-
), n;
|
|
2492
|
-
} catch (n) {
|
|
2493
|
-
return console.error(
|
|
2494
|
-
"BackgroundWorker: Ошибка при обновлении списка админов:",
|
|
2495
|
-
n
|
|
2496
|
-
), [];
|
|
2492
|
+
const i = +(((r = this.bx.userInfo) == null ? void 0 : r.ID) ?? 0), n = !!((e = this.bx) != null && e.isAdmin), o = await this.getAdminsList() || [];
|
|
2493
|
+
if (!n) {
|
|
2494
|
+
if (i && o.includes(+i)) {
|
|
2495
|
+
const h = o.filter(
|
|
2496
|
+
(s) => +s != +i
|
|
2497
|
+
);
|
|
2498
|
+
return await this.saveAdminsList(h), h;
|
|
2499
|
+
}
|
|
2500
|
+
return o;
|
|
2501
|
+
}
|
|
2502
|
+
const l = /* @__PURE__ */ new Set([...o || []]);
|
|
2503
|
+
i && l.add(+i);
|
|
2504
|
+
const c = [...l].filter(Boolean);
|
|
2505
|
+
return await this.saveAdminsList(c), c;
|
|
2506
|
+
} catch (i) {
|
|
2507
|
+
return console.error("BackgroundWorker: resolveAdmins error", i), [];
|
|
2497
2508
|
}
|
|
2498
2509
|
}
|
|
2499
|
-
async
|
|
2510
|
+
async getEligibleUsersForBackgroundWorker(r = []) {
|
|
2511
|
+
const e = (this.users ?? []).filter(
|
|
2512
|
+
(n) => n.ACTIVE === "Y" || n.ACTIVE === !0
|
|
2513
|
+
), i = r.map((n) => +n || 0).filter(Boolean);
|
|
2514
|
+
return e.filter((n) => i.includes(+n.ID || 0));
|
|
2515
|
+
}
|
|
2516
|
+
async saveAdminsList(r = []) {
|
|
2500
2517
|
try {
|
|
2501
|
-
|
|
2502
|
-
return e ? JSON.parse(e) : [];
|
|
2518
|
+
BX24.appOption.set("adminsList", JSON.stringify(r));
|
|
2503
2519
|
} catch (e) {
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2520
|
+
console.error("BackgroundWorker: saveAdminsList error", e);
|
|
2521
|
+
}
|
|
2522
|
+
}
|
|
2523
|
+
async getAdminsList() {
|
|
2524
|
+
try {
|
|
2525
|
+
const r = BX24.appOption.get("adminsList"), e = r ? JSON.parse(r) : [];
|
|
2526
|
+
return Array.isArray(e) ? e.map((i) => +i || 0).filter(Boolean) : [];
|
|
2527
|
+
} catch (r) {
|
|
2528
|
+
return console.error("BackgroundWorker: getAdminsList error", r), [];
|
|
2508
2529
|
}
|
|
2509
2530
|
}
|
|
2510
2531
|
async getEntityData() {
|
|
2511
|
-
const
|
|
2532
|
+
const r = {
|
|
2512
2533
|
users: { method: "user.get", params: { filter: { ACTIVE: "Y" } } }
|
|
2513
|
-
}, { users:
|
|
2514
|
-
|
|
2534
|
+
}, { users: e } = await this.safeCall(
|
|
2535
|
+
() => this.bx.batch(r).then((i) => i ? (Array.isArray(i.users) || (i.users = []), i) : { users: [] })
|
|
2536
|
+
);
|
|
2537
|
+
this.users = e;
|
|
2515
2538
|
}
|
|
2516
|
-
|
|
2539
|
+
/**
|
|
2540
|
+
* Без запуска фонового цикла: только убедиться, что у админа привязаны встройки
|
|
2541
|
+
* (общая и индивидуальные) и что список пользователей подгружен.
|
|
2542
|
+
*/
|
|
2543
|
+
async ensureAdminPlacements() {
|
|
2544
|
+
var r, e;
|
|
2545
|
+
(r = this.bx) != null && r.isAdmin && ((e = this.users) != null && e.length || await this.getEntityData(), await this.setBackgroundWorkerAll());
|
|
2546
|
+
}
|
|
2547
|
+
pause(r = 500, e) {
|
|
2517
2548
|
return new Promise((i) => {
|
|
2518
2549
|
setTimeout(() => {
|
|
2519
|
-
|
|
2520
|
-
},
|
|
2550
|
+
e && e(), i(!0);
|
|
2551
|
+
}, r);
|
|
2521
2552
|
});
|
|
2522
2553
|
}
|
|
2554
|
+
async safeCall(r) {
|
|
2555
|
+
try {
|
|
2556
|
+
return await r();
|
|
2557
|
+
} catch (e) {
|
|
2558
|
+
console.error("BackgroundWorker: safeCall error", e);
|
|
2559
|
+
return;
|
|
2560
|
+
}
|
|
2561
|
+
}
|
|
2523
2562
|
}
|
|
2524
2563
|
export {
|
|
2525
|
-
|
|
2564
|
+
Mt as BackgroundWorker,
|
|
2526
2565
|
K as Batch,
|
|
2527
|
-
|
|
2566
|
+
It as BxBoot,
|
|
2528
2567
|
mt as BxHelper,
|
|
2529
|
-
|
|
2568
|
+
bt as BxLogger,
|
|
2530
2569
|
rt as tempus
|
|
2531
2570
|
};
|