szdl-utils-kit 0.3.14 → 0.3.16
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 +15 -12
- package/dist/index.js +1656 -1202
- package/dist/index.umd.cjs +2 -2
- package/dist/types/batch.d.ts +59 -16
- package/dist/types/bx-boot.d.ts +3 -4
- package/package.json +44 -41
package/dist/index.js
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
if (!
|
|
1
|
+
var ie = Object.defineProperty;
|
|
2
|
+
var ne = (p, t, e) => t in p ? ie(p, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : p[t] = e;
|
|
3
|
+
var C = (p, t, e) => (ne(p, typeof t != "symbol" ? t + "" : t, e), e), wt = (p, t, e) => {
|
|
4
|
+
if (!t.has(p))
|
|
5
5
|
throw TypeError("Cannot " + e);
|
|
6
6
|
};
|
|
7
|
-
var
|
|
8
|
-
if (
|
|
7
|
+
var S = (p, t, e) => (wt(p, t, "read from private field"), e ? e.call(p) : t.get(p)), D = (p, t, e) => {
|
|
8
|
+
if (t.has(p))
|
|
9
9
|
throw TypeError("Cannot add the same private member more than once");
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
function
|
|
15
|
-
return
|
|
10
|
+
t instanceof WeakSet ? t.add(p) : t.set(p, e);
|
|
11
|
+
}, J = (p, t, e, s) => (wt(p, t, "write to private field"), s ? s.call(p, e) : t.set(p, e), e);
|
|
12
|
+
var E = (p, t, e) => (wt(p, t, "access private method"), e);
|
|
13
|
+
var oe = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
|
|
14
|
+
function ae(p) {
|
|
15
|
+
return p && p.__esModule && Object.prototype.hasOwnProperty.call(p, "default") ? p.default : p;
|
|
16
16
|
}
|
|
17
|
-
var
|
|
18
|
-
(function(
|
|
17
|
+
var Ht = { exports: {} };
|
|
18
|
+
(function(p, t) {
|
|
19
19
|
(function(e) {
|
|
20
|
-
Array.prototype.indexOf || (Array.prototype.indexOf = function(
|
|
20
|
+
Array.prototype.indexOf || (Array.prototype.indexOf = function(r, o) {
|
|
21
21
|
var d, g;
|
|
22
|
-
for (d =
|
|
23
|
-
if (this[d] ===
|
|
22
|
+
for (d = o || 0, g = this.length; d < g; d += 1)
|
|
23
|
+
if (this[d] === r)
|
|
24
24
|
return d;
|
|
25
25
|
return -1;
|
|
26
26
|
});
|
|
27
|
-
var
|
|
28
|
-
for (var d =
|
|
27
|
+
var s = this, i = function(r, o) {
|
|
28
|
+
for (var d = r.toString(); d.length < o; )
|
|
29
29
|
d = "0" + d;
|
|
30
30
|
return d;
|
|
31
|
-
},
|
|
32
|
-
return
|
|
33
|
-
}, l = function(
|
|
31
|
+
}, a = function(r, o) {
|
|
32
|
+
return o !== e ? (r.year(o.year() || o.year), r.month(o.month() || o.month), r.day(o.day() || o.day), r.hours(o.hours() || o.hours), r.minutes(o.minutes() || o.minutes), r.seconds(o.seconds() || o.seconds), r.milliseconds(o.milliseconds() || o.milliseconds), r) : e;
|
|
33
|
+
}, l = function(r, o) {
|
|
34
34
|
var d, g = "";
|
|
35
|
-
return d =
|
|
36
|
-
},
|
|
35
|
+
return d = r.slice(o, o + 1), d !== "" && !isNaN(Number(d)) && (g += "%H"), d = r.charAt(o + 2), d !== "" && d === ":" && (g += d), d = r.slice(o + 3, o + 4), d !== "" && !isNaN(Number(d)) && (g += "%M"), d = r.charAt(o + 5), d !== "" && d === ":" && (g += d), d = r.slice(o + 6, o + 7), d !== "" && !isNaN(Number(d)) && (g += "%S"), g;
|
|
36
|
+
}, A = function(r, o) {
|
|
37
37
|
var d, g = [
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
],
|
|
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) : (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
], !isNaN(Number(
|
|
51
|
-
}, h =
|
|
38
|
+
r.slice(o, o + 1),
|
|
39
|
+
r.charAt(o + 2),
|
|
40
|
+
r.slice(o + 3, o + 4),
|
|
41
|
+
r.charAt(o + 5),
|
|
42
|
+
r.slice(o + 6, o + 9)
|
|
43
|
+
], w;
|
|
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) : (w = [
|
|
45
|
+
r.slice(o, o + 3),
|
|
46
|
+
r.charAt(o + 4),
|
|
47
|
+
r.slice(o + 5, o + 6),
|
|
48
|
+
r.charAt(o + 7),
|
|
49
|
+
r.slice(o + 8, o + 9)
|
|
50
|
+
], !isNaN(Number(w[0])) && !isNaN(Number(w[2])) && !isNaN(Number(w[4])) ? (w[1] === "-" && w[3] === "-" && (d = "%Y-%m-%d"), d) : "");
|
|
51
|
+
}, h = s.tempus, n, u, m = s.navigator || {}, c = "en", f = {
|
|
52
52
|
en: {
|
|
53
53
|
JANUARY_SHORT: "Jan",
|
|
54
54
|
FEBRUARY_SHORT: "Feb",
|
|
@@ -209,102 +209,102 @@ var lt = { exports: {} };
|
|
|
209
209
|
FRIDAY_LONG: "Freitag",
|
|
210
210
|
SATURDAY_LONG: "Samstag"
|
|
211
211
|
}
|
|
212
|
-
},
|
|
212
|
+
}, O = function() {
|
|
213
213
|
return [
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
214
|
+
f[c].JANUARY_LONG,
|
|
215
|
+
f[c].FEBRUARY_LONG,
|
|
216
|
+
f[c].MARCH_LONG,
|
|
217
|
+
f[c].APRIL_LONG,
|
|
218
|
+
f[c].MAY_LONG,
|
|
219
|
+
f[c].JUNE_LONG,
|
|
220
|
+
f[c].JULY_LONG,
|
|
221
|
+
f[c].AUGUST_LONG,
|
|
222
|
+
f[c].SEPTEMBER_LONG,
|
|
223
|
+
f[c].OCTOBER_LONG,
|
|
224
|
+
f[c].NOVEMBER_LONG,
|
|
225
|
+
f[c].DECEMBER_LONG
|
|
226
226
|
];
|
|
227
|
-
},
|
|
227
|
+
}, T = function() {
|
|
228
228
|
return [
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
229
|
+
f[c].JANUARY_SHORT,
|
|
230
|
+
f[c].FEBRUARY_SHORT,
|
|
231
|
+
f[c].MARCH_SHORT,
|
|
232
|
+
f[c].APRIL_SHORT,
|
|
233
|
+
f[c].MAY_SHORT,
|
|
234
|
+
f[c].JUNE_SHORT,
|
|
235
|
+
f[c].JULY_SHORT,
|
|
236
|
+
f[c].AUGUST_SHORT,
|
|
237
|
+
f[c].SEPTEMBER_SHORT,
|
|
238
|
+
f[c].OCTOBER_SHORT,
|
|
239
|
+
f[c].NOVEMBER_SHORT,
|
|
240
|
+
f[c].DECEMBER_SHORT
|
|
241
241
|
];
|
|
242
|
-
},
|
|
242
|
+
}, _ = function() {
|
|
243
243
|
return [
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
244
|
+
f[c].SUNDAY_LONG,
|
|
245
|
+
f[c].MONDAY_LONG,
|
|
246
|
+
f[c].TUESDAY_LONG,
|
|
247
|
+
f[c].WEDNESDAY_LONG,
|
|
248
|
+
f[c].THURSDAY_LONG,
|
|
249
|
+
f[c].FRIDAY_LONG,
|
|
250
|
+
f[c].SATURDAY_LONG
|
|
251
251
|
];
|
|
252
252
|
}, R = function() {
|
|
253
253
|
return [
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
254
|
+
f[c].SUNDAY_SHORT,
|
|
255
|
+
f[c].MONDAY_SHORT,
|
|
256
|
+
f[c].TUESDAY_SHORT,
|
|
257
|
+
f[c].WEDNESDAY_SHORT,
|
|
258
|
+
f[c].THURSDAY_SHORT,
|
|
259
|
+
f[c].FRIDAY_SHORT,
|
|
260
|
+
f[c].SATURDAY_SHORT
|
|
261
261
|
];
|
|
262
|
-
},
|
|
262
|
+
}, N, y, L, I, H = function(r, o, d) {
|
|
263
263
|
var g;
|
|
264
|
-
|
|
265
|
-
g.readyState === 4 && (g.status === 200 ?
|
|
266
|
-
https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) :
|
|
267
|
-
}, g.open("GET",
|
|
268
|
-
},
|
|
264
|
+
s.XMLHttpRequest ? g = new XMLHttpRequest() : g = new ActiveXObject("Microsoft.XMLHTTP"), g.onreadystatechange = function() {
|
|
265
|
+
g.readyState === 4 && (g.status === 200 ? o && (s.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`) : o(JSON.parse(g.responseText))) : d && d(g));
|
|
267
|
+
}, g.open("GET", r, !1), g.send();
|
|
268
|
+
}, k = {
|
|
269
269
|
"%d": {
|
|
270
|
-
format: function(
|
|
271
|
-
return
|
|
270
|
+
format: function(r) {
|
|
271
|
+
return i(r.day() || n.MIN_DAY, 2);
|
|
272
272
|
},
|
|
273
|
-
parse: function(
|
|
274
|
-
var
|
|
275
|
-
return { day: isNaN(
|
|
273
|
+
parse: function(r) {
|
|
274
|
+
var o = Number(r);
|
|
275
|
+
return { day: isNaN(o) ? e : o };
|
|
276
276
|
},
|
|
277
277
|
minLength: 2,
|
|
278
278
|
maxLength: 2,
|
|
279
279
|
type: "number"
|
|
280
280
|
},
|
|
281
281
|
"%m": {
|
|
282
|
-
format: function(
|
|
283
|
-
return
|
|
282
|
+
format: function(r) {
|
|
283
|
+
return i(r.month() || n.MIN_MONTH, 2);
|
|
284
284
|
},
|
|
285
|
-
parse: function(
|
|
286
|
-
var
|
|
287
|
-
return { month: isNaN(
|
|
285
|
+
parse: function(r) {
|
|
286
|
+
var o = Number(r);
|
|
287
|
+
return { month: isNaN(o) ? e : o };
|
|
288
288
|
},
|
|
289
289
|
minLength: 2,
|
|
290
290
|
maxLength: 2,
|
|
291
291
|
type: "number"
|
|
292
292
|
},
|
|
293
293
|
"%Y": {
|
|
294
|
-
format: function(
|
|
295
|
-
return
|
|
294
|
+
format: function(r) {
|
|
295
|
+
return i(r.year() || n.MIN_YEAR, 4);
|
|
296
296
|
},
|
|
297
|
-
parse: function(
|
|
298
|
-
var
|
|
299
|
-
return { year: isNaN(
|
|
297
|
+
parse: function(r) {
|
|
298
|
+
var o = Number(r);
|
|
299
|
+
return { year: isNaN(o) ? e : o };
|
|
300
300
|
},
|
|
301
301
|
minLength: 4,
|
|
302
302
|
maxLength: 4,
|
|
303
303
|
type: "number"
|
|
304
304
|
},
|
|
305
305
|
"%w": {
|
|
306
|
-
format: function(
|
|
307
|
-
return
|
|
306
|
+
format: function(r) {
|
|
307
|
+
return r.dayOfWeek() || n.MIN_DAY_OF_WEEK;
|
|
308
308
|
},
|
|
309
309
|
parse: function() {
|
|
310
310
|
return {};
|
|
@@ -314,9 +314,9 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
314
314
|
type: "number"
|
|
315
315
|
},
|
|
316
316
|
"%a": {
|
|
317
|
-
format: function(
|
|
318
|
-
var
|
|
319
|
-
return
|
|
317
|
+
format: function(r) {
|
|
318
|
+
var o = r.dayOfWeek();
|
|
319
|
+
return I[o !== e ? o : n.MIN_DAY_OF_WEEK];
|
|
320
320
|
},
|
|
321
321
|
parse: function() {
|
|
322
322
|
return {};
|
|
@@ -326,9 +326,9 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
326
326
|
type: "word"
|
|
327
327
|
},
|
|
328
328
|
"%A": {
|
|
329
|
-
format: function(
|
|
330
|
-
var
|
|
331
|
-
return
|
|
329
|
+
format: function(r) {
|
|
330
|
+
var o = r.dayOfWeek();
|
|
331
|
+
return L[o !== e ? o : n.MIN_DAY_OF_WEEK];
|
|
332
332
|
},
|
|
333
333
|
parse: function() {
|
|
334
334
|
return {};
|
|
@@ -338,86 +338,86 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
338
338
|
type: "word"
|
|
339
339
|
},
|
|
340
340
|
"%b": {
|
|
341
|
-
format: function(
|
|
342
|
-
var
|
|
343
|
-
return
|
|
341
|
+
format: function(r) {
|
|
342
|
+
var o = n.options("monthFromZero") ? r.month() : r.month() - 1;
|
|
343
|
+
return y[o !== e ? o : n.MIN_MONTH];
|
|
344
344
|
},
|
|
345
|
-
parse: function(
|
|
346
|
-
var
|
|
347
|
-
return { month:
|
|
345
|
+
parse: function(r) {
|
|
346
|
+
var o = n.monthNames().indexOf(r) + (n.options("monthFromZero") ? 0 : 1);
|
|
347
|
+
return { month: o !== -1 ? o : e };
|
|
348
348
|
},
|
|
349
349
|
minLength: 1,
|
|
350
350
|
maxLength: 999,
|
|
351
351
|
type: "word"
|
|
352
352
|
},
|
|
353
353
|
"%B": {
|
|
354
|
-
format: function(
|
|
355
|
-
var
|
|
356
|
-
return
|
|
354
|
+
format: function(r) {
|
|
355
|
+
var o = n.options("monthFromZero") ? r.month() : r.month() - 1;
|
|
356
|
+
return N[o !== e ? o : n.MIN_MONTH];
|
|
357
357
|
},
|
|
358
|
-
parse: function(
|
|
359
|
-
var
|
|
360
|
-
return { month:
|
|
358
|
+
parse: function(r) {
|
|
359
|
+
var o = n.monthNames(!0).indexOf(r) + (n.options("monthFromZero") ? 0 : 1);
|
|
360
|
+
return { month: o !== -1 ? o : e };
|
|
361
361
|
},
|
|
362
362
|
minLength: 1,
|
|
363
363
|
maxLength: 999,
|
|
364
364
|
type: "word"
|
|
365
365
|
},
|
|
366
366
|
"%H": {
|
|
367
|
-
format: function(
|
|
368
|
-
return
|
|
367
|
+
format: function(r) {
|
|
368
|
+
return i(r.hours() || n.MIN_HOURS, 2);
|
|
369
369
|
},
|
|
370
|
-
parse: function(
|
|
371
|
-
var
|
|
372
|
-
return { hours: isNaN(
|
|
370
|
+
parse: function(r) {
|
|
371
|
+
var o = Number(r);
|
|
372
|
+
return { hours: isNaN(o) ? e : o };
|
|
373
373
|
},
|
|
374
374
|
minLength: 2,
|
|
375
375
|
maxLength: 2,
|
|
376
376
|
type: "number"
|
|
377
377
|
},
|
|
378
378
|
"%M": {
|
|
379
|
-
format: function(
|
|
380
|
-
return
|
|
379
|
+
format: function(r) {
|
|
380
|
+
return i(r.minutes() || n.MIN_MINUTES, 2);
|
|
381
381
|
},
|
|
382
|
-
parse: function(
|
|
383
|
-
var
|
|
384
|
-
return { minutes: isNaN(
|
|
382
|
+
parse: function(r) {
|
|
383
|
+
var o = Number(r);
|
|
384
|
+
return { minutes: isNaN(o) ? e : o };
|
|
385
385
|
},
|
|
386
386
|
minLength: 2,
|
|
387
387
|
maxLength: 2,
|
|
388
388
|
type: "number"
|
|
389
389
|
},
|
|
390
390
|
"%S": {
|
|
391
|
-
format: function(
|
|
392
|
-
return
|
|
391
|
+
format: function(r) {
|
|
392
|
+
return i(r.seconds() || n.MIN_SECONDS, 2);
|
|
393
393
|
},
|
|
394
|
-
parse: function(
|
|
395
|
-
var
|
|
396
|
-
return { seconds: isNaN(
|
|
394
|
+
parse: function(r) {
|
|
395
|
+
var o = Number(r);
|
|
396
|
+
return { seconds: isNaN(o) ? e : o };
|
|
397
397
|
},
|
|
398
398
|
minLength: 2,
|
|
399
399
|
maxLength: 2,
|
|
400
400
|
type: "number"
|
|
401
401
|
},
|
|
402
402
|
"%s": {
|
|
403
|
-
format: function(
|
|
404
|
-
return
|
|
403
|
+
format: function(r) {
|
|
404
|
+
return r.timestamp();
|
|
405
405
|
},
|
|
406
|
-
parse: function(
|
|
407
|
-
return isNaN(Number(
|
|
406
|
+
parse: function(r) {
|
|
407
|
+
return isNaN(Number(r)) ? {} : n(Number(r)).get();
|
|
408
408
|
},
|
|
409
409
|
minLength: 1,
|
|
410
410
|
maxLength: 20,
|
|
411
411
|
type: "number"
|
|
412
412
|
},
|
|
413
413
|
"%F": {
|
|
414
|
-
format: function(
|
|
415
|
-
return
|
|
414
|
+
format: function(r) {
|
|
415
|
+
return i(r.year() || n.MIN_YEAR, 4) + "-" + i(r.month() || n.MIN_MONTH, 2) + "-" + i(r.day() || n.MIN_DAY, 2);
|
|
416
416
|
},
|
|
417
|
-
parse: function(
|
|
418
|
-
var
|
|
417
|
+
parse: function(r) {
|
|
418
|
+
var o = Number(r.slice(0, 4)), d = Number(r.slice(5, 7)), g = Number(r.slice(8, 10));
|
|
419
419
|
return {
|
|
420
|
-
year:
|
|
420
|
+
year: o,
|
|
421
421
|
month: d,
|
|
422
422
|
day: g
|
|
423
423
|
};
|
|
@@ -427,14 +427,14 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
427
427
|
type: "string"
|
|
428
428
|
},
|
|
429
429
|
"%D": {
|
|
430
|
-
format: function(
|
|
431
|
-
return
|
|
430
|
+
format: function(r) {
|
|
431
|
+
return i(r.month() || n.MIN_MONTH, 2) + "/" + i(r.day() || n.MIN_DAY, 2) + "/" + i(r.year() || n.MIN_YEAR, 4);
|
|
432
432
|
},
|
|
433
|
-
parse: function(
|
|
434
|
-
var
|
|
433
|
+
parse: function(r) {
|
|
434
|
+
var o = Number(r.slice(0, 2)), d = Number(r.slice(3, 5)), g = Number(r.slice(6, 10));
|
|
435
435
|
return {
|
|
436
436
|
year: g,
|
|
437
|
-
month:
|
|
437
|
+
month: o,
|
|
438
438
|
day: d
|
|
439
439
|
};
|
|
440
440
|
},
|
|
@@ -442,11 +442,11 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
442
442
|
maxLength: 10,
|
|
443
443
|
type: "string"
|
|
444
444
|
}
|
|
445
|
-
},
|
|
445
|
+
}, U = {
|
|
446
446
|
useMilliseconds: !1,
|
|
447
447
|
monthFromZero: !1
|
|
448
|
-
},
|
|
449
|
-
|
|
448
|
+
}, M;
|
|
449
|
+
M = function(r, o, 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`) : a(JSON.pars
|
|
|
455
455
|
minutes: !1,
|
|
456
456
|
seconds: !1,
|
|
457
457
|
milliseconds: !1
|
|
458
|
-
},
|
|
459
|
-
},
|
|
460
|
-
var
|
|
461
|
-
return this.leapYear() &&
|
|
462
|
-
},
|
|
458
|
+
}, r !== e && this.set(r, o, d), this;
|
|
459
|
+
}, M.fn = M.prototype, M.fn.dayCount = function() {
|
|
460
|
+
var r = this.month(), o = n.MAX_DAY_IN_MONTHS[r - (n.options("monthFromZero") ? 0 : 1)];
|
|
461
|
+
return this.leapYear() && r === (n.options("monthFromZero") ? 1 : 2) && (o += 1), o;
|
|
462
|
+
}, M.fn.year = function(r) {
|
|
463
463
|
if (arguments.length !== 0)
|
|
464
|
-
(typeof
|
|
464
|
+
(typeof r == "number" || typeof r == "string") && !isNaN(Number(r)) ? Number(r) >= n.MIN_YEAR && Number(r) <= n.MAX_YEAR ? (this._d.setFullYear(Number(r)), this._i.year = !1) : this._i.year = Number(r) : (this._d.setFullYear(n.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
|
+
}, M.fn.month = function(r) {
|
|
469
469
|
if (arguments.length !== 0)
|
|
470
|
-
(typeof
|
|
470
|
+
(typeof r == "number" || typeof r == "string") && !isNaN(Number(r)) ? Number(r) >= n.MIN_MONTH && Number(r) <= n.MAX_MONTH ? (this._d.setMonth(n.options("monthFromZero") ? Number(r) : Number(r) - 1), this._i.month = !1) : this._i.month = Number(r) : (this._d.setMonth(n.options("monthFromZero") ? n.MIN_MONTH : n.MIN_MONTH - 1), this._i.month = !1);
|
|
471
471
|
else
|
|
472
|
-
return this._i.month === !1 ?
|
|
472
|
+
return this._i.month === !1 ? n.options("monthFromZero") ? this._d.getMonth() : this._d.getMonth() + 1 : this._i.month;
|
|
473
473
|
return this;
|
|
474
|
-
},
|
|
474
|
+
}, M.fn.day = function(r) {
|
|
475
475
|
if (arguments.length !== 0)
|
|
476
|
-
(typeof
|
|
476
|
+
(typeof r == "number" || typeof r == "string") && !isNaN(Number(r)) ? Number(r) >= n.MIN_DAY && Number(r) <= this.dayCount() ? (this._d.setDate(Number(r)), this._i.day = !1) : this._i.day = Number(r) : (this._d.setDate(n.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
|
+
}, M.fn.hours = function(r) {
|
|
481
481
|
if (arguments.length !== 0)
|
|
482
|
-
(typeof
|
|
482
|
+
(typeof r == "number" || typeof r == "string") && !isNaN(Number(r)) ? Number(r) >= n.MIN_HOURS && Number(r) <= n.MAX_HOURS ? (this._d.setHours(Number(r)), this._i.hours = !1) : this._i.hours = Number(r) : (this._d.setHours(n.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
|
+
}, M.fn.minutes = function(r) {
|
|
487
487
|
if (arguments.length !== 0)
|
|
488
|
-
(typeof
|
|
488
|
+
(typeof r == "number" || typeof r == "string") && !isNaN(Number(r)) ? Number(r) >= n.MIN_MINUTES && Number(r) <= n.MAX_MINUTES ? (this._d.setMinutes(Number(r)), this._i.minutes = !1) : this._i.minutes = Number(r) : (this._d.setMinutes(n.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
|
+
}, M.fn.seconds = function(r) {
|
|
493
493
|
if (arguments.length !== 0)
|
|
494
|
-
(typeof
|
|
494
|
+
(typeof r == "number" || typeof r == "string") && !isNaN(Number(r)) ? Number(r) >= n.MIN_SECONDS && Number(r) <= n.MAX_SECONDS ? (this._d.setSeconds(Number(r)), this._i.seconds = !1) : this._i.seconds = Number(r) : (this._d.setSeconds(n.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
|
+
}, M.fn.milliseconds = function(r) {
|
|
499
499
|
if (arguments.length !== 0)
|
|
500
|
-
(typeof
|
|
500
|
+
(typeof r == "number" || typeof r == "string") && !isNaN(Number(r)) ? Number(r) >= n.MIN_MILLISECONDS && Number(r) <= n.MAX_MILLISECONDS ? (this._d.setMilliseconds(Number(r)), this._i.milliseconds = !1) : this._i.milliseconds = Number(r) : (this._d.setMilliseconds(n.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
|
|
506
|
-
return Math.ceil(((
|
|
507
|
-
},
|
|
504
|
+
}, M.fn.week = function() {
|
|
505
|
+
var r = new Date(this.year(), 0, 1), o = n(this.utc()).hours(0).minutes(0).seconds(0).milliseconds(0).utc() * 1e3;
|
|
506
|
+
return Math.ceil(((o - r.getTime()) / 864e5 + r.getDay() + 1) / 7);
|
|
507
|
+
}, M.fn.set = function(r, o, 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`) : a(JSON.pars
|
|
|
513
513
|
minutes: !1,
|
|
514
514
|
seconds: !1,
|
|
515
515
|
milliseconds: !1
|
|
516
|
-
},
|
|
516
|
+
}, r === e)
|
|
517
517
|
return this._d = /* @__PURE__ */ new Date(), this;
|
|
518
|
-
if (
|
|
519
|
-
return this._d =
|
|
520
|
-
if (typeof
|
|
521
|
-
return this._d = new Date(
|
|
522
|
-
if (typeof
|
|
523
|
-
var g,
|
|
524
|
-
if (
|
|
525
|
-
return
|
|
518
|
+
if (r instanceof Date)
|
|
519
|
+
return this._d = r, this;
|
|
520
|
+
if (typeof r == "number")
|
|
521
|
+
return this._d = new Date(r * (n.options("useMilliseconds") ? 1 : 1e3)), this;
|
|
522
|
+
if (typeof r == "object" && (r instanceof Array ? (this.day(n.MIN_DAY), this.year(r[0]), this.month(r[1]), this.day(r[2]), this.hours(r[3]), this.minutes(r[4]), this.seconds(r[5]), this.milliseconds(r[6])) : (this.day(n.MIN_DAY), this.year(r.year), this.month(r.month), this.day(r.day), this.hours(r.hours), this.minutes(r.minutes), this.seconds(r.seconds), this.milliseconds(r.milliseconds))), typeof r == "string") {
|
|
523
|
+
var g, w = [], b, B, z = [], W = 0, x = 0, Y, X, G = {}, P;
|
|
524
|
+
if (r === e)
|
|
525
|
+
return b = a(this, d), b === 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`) : a(JSON.pars
|
|
|
530
530
|
minutes: -1,
|
|
531
531
|
seconds: -1,
|
|
532
532
|
milliseconds: -1
|
|
533
|
-
}),
|
|
534
|
-
for (
|
|
535
|
-
if (
|
|
536
|
-
if (
|
|
537
|
-
switch (
|
|
533
|
+
}), b;
|
|
534
|
+
for (o === e && (o = n.detectFormat(r)); W < o.length; ) {
|
|
535
|
+
if (o.charAt(W) === "%") {
|
|
536
|
+
if (B = o.charAt(W) + o.charAt(W + 1), k[B] !== e) {
|
|
537
|
+
switch (Y = 0, X = "", k[B].type) {
|
|
538
538
|
case "number":
|
|
539
|
-
for (;
|
|
540
|
-
|
|
539
|
+
for (; Y < k[B].maxLength && x + Y < r.length && !isNaN(Number(r.charAt(x + Y))); )
|
|
540
|
+
X += r.charAt(x + Y), Y += 1;
|
|
541
541
|
break;
|
|
542
542
|
case "word":
|
|
543
|
-
for (;
|
|
544
|
-
|
|
543
|
+
for (; Y < k[B].maxLength && x + Y < r.length && /^[\u00BF-\u1FFF\u2C00-\uD7FF\w]+$/.test(r.charAt(x + Y)); )
|
|
544
|
+
X += r.charAt(x + Y), Y += 1;
|
|
545
545
|
break;
|
|
546
546
|
case "string":
|
|
547
|
-
for (;
|
|
548
|
-
|
|
547
|
+
for (; Y < k[B].maxLength && x + Y < r.length; )
|
|
548
|
+
X += r.charAt(x + Y), Y += 1;
|
|
549
549
|
break;
|
|
550
550
|
}
|
|
551
|
-
if (
|
|
552
|
-
return
|
|
551
|
+
if (Y < k[B].minLength)
|
|
552
|
+
return b = a(this, d), b === 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`) : a(JSON.pars
|
|
|
557
557
|
minutes: -1,
|
|
558
558
|
seconds: -1,
|
|
559
559
|
milliseconds: -1
|
|
560
|
-
}),
|
|
561
|
-
|
|
560
|
+
}), b;
|
|
561
|
+
w.push(B), z.push(X), Y -= 1, x += Y, W += 1;
|
|
562
562
|
}
|
|
563
|
-
} else if (
|
|
564
|
-
return
|
|
563
|
+
} else if (r.charAt(x) !== o.charAt(W))
|
|
564
|
+
return b = a(this, d), b === e && (this._i = {
|
|
565
565
|
year: -1,
|
|
566
566
|
month: -1,
|
|
567
567
|
day: -1,
|
|
@@ -569,51 +569,51 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
569
569
|
minutes: -1,
|
|
570
570
|
seconds: -1,
|
|
571
571
|
milliseconds: -1
|
|
572
|
-
}),
|
|
573
|
-
|
|
572
|
+
}), b;
|
|
573
|
+
W += 1, x += 1;
|
|
574
574
|
}
|
|
575
|
-
for (g in
|
|
576
|
-
|
|
577
|
-
year:
|
|
578
|
-
month:
|
|
579
|
-
day:
|
|
580
|
-
hours:
|
|
581
|
-
minutes:
|
|
582
|
-
seconds:
|
|
575
|
+
for (g in w)
|
|
576
|
+
w.hasOwnProperty(g) && k.hasOwnProperty(w[g]) && (P = k[w[g]].parse(z[g]), G = {
|
|
577
|
+
year: P.year !== e ? P.year : G.year,
|
|
578
|
+
month: P.month !== e ? P.month : G.month,
|
|
579
|
+
day: P.day !== e ? P.day : G.day,
|
|
580
|
+
hours: P.hours !== e ? P.hours : G.hours,
|
|
581
|
+
minutes: P.minutes !== e ? P.minutes : G.minutes,
|
|
582
|
+
seconds: P.seconds !== e ? P.seconds : G.seconds
|
|
583
583
|
});
|
|
584
|
-
this.day(
|
|
584
|
+
this.day(n.MIN_DAY), this.year(G.year), this.month(G.month), this.day(G.day), this.hours(G.hours), this.minutes(G.minutes), this.seconds(G.seconds), this.milliseconds(G.milliseconds);
|
|
585
585
|
}
|
|
586
586
|
return this;
|
|
587
|
-
},
|
|
588
|
-
var
|
|
589
|
-
return
|
|
590
|
-
},
|
|
591
|
-
return arguments.length !== 0 ? (this._d = new Date(Number(
|
|
592
|
-
},
|
|
593
|
-
return arguments.length !== 0 ? (this._d = new Date(Number(
|
|
594
|
-
},
|
|
595
|
-
if (
|
|
596
|
-
return
|
|
597
|
-
if (
|
|
598
|
-
return
|
|
599
|
-
if (
|
|
587
|
+
}, M.fn.leapYear = function() {
|
|
588
|
+
var r = this.year();
|
|
589
|
+
return r % 4 === 0 ? r % 100 === 0 ? r % 400 === 0 : !0 : !1;
|
|
590
|
+
}, M.fn.timestamp = function(r) {
|
|
591
|
+
return arguments.length !== 0 ? (this._d = new Date(Number(r) * (n.options("useMilliseconds") ? 1 : 1e3) + this._d.getTimezoneOffset() * 6e4), this) : n.options("useMilliseconds") ? this._d.getTime() - this._d.getTimezoneOffset() * 6e4 : Math.floor(this._d.getTime() / 1e3) - this._d.getTimezoneOffset() * 60;
|
|
592
|
+
}, M.fn.utc = function(r) {
|
|
593
|
+
return arguments.length !== 0 ? (this._d = new Date(Number(r) * (n.options("useMilliseconds") ? 1 : 1e3)), this) : n.options("useMilliseconds") ? this._d.getTime() : Math.floor(this._d.getTime() / 1e3);
|
|
594
|
+
}, M.fn.dayOfWeek = function(r) {
|
|
595
|
+
if (r === "long")
|
|
596
|
+
return L[this._d.getDay()];
|
|
597
|
+
if (r === "short")
|
|
598
|
+
return I[this._d.getDay()];
|
|
599
|
+
if (r === e)
|
|
600
600
|
return this._d.getDay();
|
|
601
|
-
if (
|
|
601
|
+
if (r === 0 || r === "Sunday")
|
|
602
602
|
return this.calc({ day: -this.dayOfWeek() });
|
|
603
|
-
if (
|
|
603
|
+
if (r === 1 || r === "Monday")
|
|
604
604
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -6 : 1) - this.dayOfWeek() });
|
|
605
|
-
if (
|
|
605
|
+
if (r === 2 || r === "Tuesday")
|
|
606
606
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -5 : 2) - this.dayOfWeek() });
|
|
607
|
-
if (
|
|
607
|
+
if (r === 3 || r === "Wednesday")
|
|
608
608
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -4 : 3) - this.dayOfWeek() });
|
|
609
|
-
if (
|
|
609
|
+
if (r === 4 || r === "Thursday")
|
|
610
610
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -3 : 4) - this.dayOfWeek() });
|
|
611
|
-
if (
|
|
611
|
+
if (r === 5 || r === "Friday")
|
|
612
612
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -2 : 5) - this.dayOfWeek() });
|
|
613
|
-
if (
|
|
613
|
+
if (r === 6 || r === "Saturday")
|
|
614
614
|
return this.calc({ day: (this.dayOfWeek() === 0 ? -1 : 6) - this.dayOfWeek() });
|
|
615
|
-
},
|
|
616
|
-
switch (
|
|
615
|
+
}, M.fn.timezone = function(r) {
|
|
616
|
+
switch (r) {
|
|
617
617
|
case "hours":
|
|
618
618
|
return Math.floor(this._d.getTimezoneOffset() / 60);
|
|
619
619
|
case "minutes":
|
|
@@ -621,12 +621,12 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
621
621
|
default:
|
|
622
622
|
return this._d.getTimezoneOffset() * 60;
|
|
623
623
|
}
|
|
624
|
-
},
|
|
625
|
-
switch (
|
|
624
|
+
}, M.fn.get = function(r) {
|
|
625
|
+
switch (r) {
|
|
626
626
|
case "Date":
|
|
627
627
|
return new Date(
|
|
628
628
|
this.year(),
|
|
629
|
-
this.month() - (
|
|
629
|
+
this.month() - (n.options("monthFromZero") ? 0 : 1),
|
|
630
630
|
this.day(),
|
|
631
631
|
this.hours(),
|
|
632
632
|
this.minutes(),
|
|
@@ -636,7 +636,7 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
636
636
|
case "DateUTC":
|
|
637
637
|
return new Date(Date.UTC(
|
|
638
638
|
this.year(),
|
|
639
|
-
this.month() - (
|
|
639
|
+
this.month() - (n.options("monthFromZero") ? 0 : 1),
|
|
640
640
|
this.day(),
|
|
641
641
|
this.hours(),
|
|
642
642
|
this.minutes(),
|
|
@@ -670,17 +670,17 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
670
670
|
timestamp: this.timestamp()
|
|
671
671
|
};
|
|
672
672
|
}
|
|
673
|
-
},
|
|
674
|
-
for (var
|
|
675
|
-
|
|
673
|
+
}, M.fn.format = function(r) {
|
|
674
|
+
for (var o = 0, d = "", g; o < r.length; )
|
|
675
|
+
r.charAt(o) === "%" ? (g = r.charAt(o) + r.charAt(o + 1), k[g] !== e ? (d += k[g].format(this), o += 1) : d += "%") : d += r.charAt(o), o += 1;
|
|
676
676
|
return d;
|
|
677
|
-
},
|
|
677
|
+
}, M.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
|
+
}, M.fn.errors = function() {
|
|
680
680
|
return this._i;
|
|
681
|
-
},
|
|
682
|
-
var d = this.timestamp(), g =
|
|
683
|
-
switch (
|
|
681
|
+
}, M.fn.between = function(r, o) {
|
|
682
|
+
var d = this.timestamp(), g = r.timestamp();
|
|
683
|
+
switch (o) {
|
|
684
684
|
case "year":
|
|
685
685
|
return Math.floor((g - d) / 31556952);
|
|
686
686
|
case "month":
|
|
@@ -696,132 +696,306 @@ https://github.com/douglascrockford/JSON-js/blob/master/json2.js`) : a(JSON.pars
|
|
|
696
696
|
default:
|
|
697
697
|
return e;
|
|
698
698
|
}
|
|
699
|
-
},
|
|
700
|
-
return
|
|
701
|
-
},
|
|
702
|
-
return new
|
|
703
|
-
},
|
|
704
|
-
if (
|
|
705
|
-
return
|
|
706
|
-
if (
|
|
707
|
-
if (
|
|
708
|
-
return
|
|
709
|
-
|
|
699
|
+
}, M.fn.calc = function(r) {
|
|
700
|
+
return r.year !== e && this._d.setFullYear(this._d.getFullYear() + r.year), r.month !== e && this._d.setMonth(this._d.getMonth() + r.month), r.day !== e && this._d.setDate(this._d.getDate() + r.day), r.hours !== e && this._d.setHours(this._d.getHours() + r.hours), r.minutes !== e && this._d.setMinutes(this._d.getMinutes() + r.minutes), r.seconds !== e && this._d.setSeconds(this._d.getSeconds() + r.seconds), r.milliseconds !== e && this._d.setMilliseconds(this._d.getMilliseconds() + r.milliseconds), this;
|
|
701
|
+
}, n = function(r, o, d) {
|
|
702
|
+
return new M(r, o, d);
|
|
703
|
+
}, n.MIN_YEAR = 1e3, n.MAX_YEAR = 3e3, n.MIN_MONTH = 1, n.MAX_MONTH = 12, n.MIN_DAY = 1, n.MAX_DAY_IN_MONTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], n.MIN_DAY_OF_WEEK = 0, n.MAX_DAY_OF_WEEK = 6, n.MIN_HOURS = 0, n.MAX_HOURS = 23, n.MIN_MINUTES = 0, n.MAX_MINUTES = 59, n.MIN_SECONDS = 0, n.MAX_SECONDS = 59, n.MIN_MILLISECONDS = 0, n.MAX_MILLISECONDS = 999, n.VERSION = "0.2.18", n.options = function(r, o) {
|
|
704
|
+
if (r === e)
|
|
705
|
+
return U;
|
|
706
|
+
if (U.hasOwnProperty(r)) {
|
|
707
|
+
if (o === e)
|
|
708
|
+
return U[r];
|
|
709
|
+
U[r] = o, r === "monthFromZero" && (n.MIN_MONTH = o ? 0 : 1, n.MAX_MONTH = o ? 11 : 12);
|
|
710
710
|
}
|
|
711
711
|
return e;
|
|
712
|
-
},
|
|
713
|
-
return
|
|
714
|
-
},
|
|
715
|
-
var
|
|
716
|
-
if (typeof
|
|
712
|
+
}, n.noConflict = function() {
|
|
713
|
+
return s.tempus = h, n;
|
|
714
|
+
}, n.generate = function(r) {
|
|
715
|
+
var o, d, g, w, b, B, z, W;
|
|
716
|
+
if (typeof r.dateFrom != "number" && (r.dateFrom instanceof M ? o = r.dateFrom.utc() : o = n(r.dateFrom, r.formatFrom).utc()), typeof r.dateTo != "number" && (r.dateTo instanceof M ? d = r.dateTo.utc() : d = n(r.dateTo, r.formatTo !== e ? r.formatTo : r.formatFrom).utc()), typeof r.period == "number" ? b = {
|
|
717
717
|
year: 0,
|
|
718
718
|
month: 0,
|
|
719
719
|
day: 0,
|
|
720
720
|
hours: 0,
|
|
721
721
|
minutes: 0,
|
|
722
|
-
seconds:
|
|
723
|
-
} : typeof
|
|
724
|
-
year:
|
|
725
|
-
month:
|
|
726
|
-
day:
|
|
727
|
-
hours:
|
|
728
|
-
minutes:
|
|
729
|
-
seconds:
|
|
730
|
-
} : typeof
|
|
731
|
-
year:
|
|
732
|
-
month:
|
|
733
|
-
day:
|
|
734
|
-
hours:
|
|
735
|
-
minutes:
|
|
736
|
-
seconds:
|
|
737
|
-
}),
|
|
738
|
-
return
|
|
739
|
-
},
|
|
740
|
-
var
|
|
741
|
-
year:
|
|
742
|
-
month:
|
|
743
|
-
day:
|
|
744
|
-
hours:
|
|
745
|
-
minutes:
|
|
746
|
-
seconds:
|
|
747
|
-
milliseconds:
|
|
722
|
+
seconds: r.period
|
|
723
|
+
} : typeof r.period == "string" ? b = {
|
|
724
|
+
year: r.period === "year" ? 1 : 0,
|
|
725
|
+
month: r.period === "month" ? 1 : 0,
|
|
726
|
+
day: r.period === "day" ? 1 : 0,
|
|
727
|
+
hours: r.period === "hours" ? 1 : 0,
|
|
728
|
+
minutes: r.period === "minutes" ? 1 : 0,
|
|
729
|
+
seconds: r.period === "seconds" ? 1 : 0
|
|
730
|
+
} : typeof r.period == "object" && (b = {
|
|
731
|
+
year: r.period.year !== e ? r.period.year : 0,
|
|
732
|
+
month: r.period.month !== e ? r.period.month : 0,
|
|
733
|
+
day: r.period.day !== e ? r.period.day : 0,
|
|
734
|
+
hours: r.period.hours !== e ? r.period.hours : 0,
|
|
735
|
+
minutes: r.period.minutes !== e ? r.period.minutes : 0,
|
|
736
|
+
seconds: r.period.seconds !== e ? r.period.seconds : 0
|
|
737
|
+
}), r.groupBy === e ? B = r.asObject === !0 ? {} : [] : (B = [], B.push([]), z = n(o).get()[r.groupBy]), W = function(X, G, P) {
|
|
738
|
+
return r.asObject === !0 ? r.format !== e ? X[n(G).format(r.format)] = {} : X[n(G).format("%F %H:%M:%S")] = {} : r.format !== e ? X.push(P ? null : n(G).format(r.format)) : X.push(P ? null : n(G)), X;
|
|
739
|
+
}, r.groupBy !== e && r.fillNulls) {
|
|
740
|
+
var x = {
|
|
741
|
+
year: b.year ? -b.year : e,
|
|
742
|
+
month: b.month ? -b.month : e,
|
|
743
|
+
day: b.day ? -b.day : e,
|
|
744
|
+
hours: b.hours ? -b.hours : e,
|
|
745
|
+
minutes: b.minutes ? -b.minutes : e,
|
|
746
|
+
seconds: b.seconds ? -b.seconds : e,
|
|
747
|
+
milliseconds: b.milliseconds ? -b.milliseconds : e
|
|
748
748
|
};
|
|
749
|
-
for (g =
|
|
750
|
-
|
|
751
|
-
if (
|
|
752
|
-
var
|
|
753
|
-
for (g =
|
|
754
|
-
|
|
749
|
+
for (g = n(o).calc(x).utc(); n(g).get()[r.groupBy] === z; )
|
|
750
|
+
W(B[B.length - 1], g, !0), g = n(g).calc(x).utc();
|
|
751
|
+
if (r.groupBy === "week") {
|
|
752
|
+
var Y = n(o).dayOfWeek();
|
|
753
|
+
for (g = n(o).dayOfWeek(0).utc(); B[0].length < Y && g < o; )
|
|
754
|
+
W(B[B.length - 1], g, !0), g = n(g).calc(b).utc();
|
|
755
755
|
}
|
|
756
756
|
}
|
|
757
|
-
for (;
|
|
758
|
-
|
|
759
|
-
if (
|
|
760
|
-
for (
|
|
761
|
-
|
|
762
|
-
return
|
|
763
|
-
},
|
|
764
|
-
switch (
|
|
757
|
+
for (; o <= d; )
|
|
758
|
+
r.groupBy === e ? W(B, o) : n(o).get()[r.groupBy] === z ? W(B[B.length - 1], o) : (B.push([]), W(B[B.length - 1], o), z = n(o).get()[r.groupBy]), o = n(o).calc(b).utc();
|
|
759
|
+
if (r.groupBy !== e && r.fillNulls)
|
|
760
|
+
for (w = n(d).calc(b).utc(); n(w).get()[r.groupBy] === z; )
|
|
761
|
+
W(B[B.length - 1], w, !0), w = n(w).calc(b).utc();
|
|
762
|
+
return B;
|
|
763
|
+
}, n.monthNames = function(r) {
|
|
764
|
+
switch (r) {
|
|
765
765
|
case "long":
|
|
766
|
-
return
|
|
766
|
+
return N;
|
|
767
767
|
default:
|
|
768
|
-
return
|
|
768
|
+
return y;
|
|
769
769
|
}
|
|
770
|
-
},
|
|
771
|
-
switch (
|
|
770
|
+
}, n.dayNames = function(r) {
|
|
771
|
+
switch (r) {
|
|
772
772
|
case "long":
|
|
773
|
-
return
|
|
773
|
+
return L;
|
|
774
774
|
default:
|
|
775
|
-
return
|
|
775
|
+
return I;
|
|
776
776
|
}
|
|
777
|
-
},
|
|
778
|
-
if (
|
|
779
|
-
|
|
777
|
+
}, n.lang = function(r) {
|
|
778
|
+
if (r !== e)
|
|
779
|
+
c = r, f[c] === e && (c = "en"), N = O(), y = T(), L = _(), I = R();
|
|
780
780
|
else
|
|
781
|
-
return
|
|
781
|
+
return c;
|
|
782
782
|
return e;
|
|
783
|
-
},
|
|
784
|
-
return Object.keys(
|
|
785
|
-
},
|
|
786
|
-
|
|
787
|
-
format:
|
|
783
|
+
}, n.availableLangs = function() {
|
|
784
|
+
return Object.keys(f);
|
|
785
|
+
}, n.registerFormat = function(r, o, d, g, w, b) {
|
|
786
|
+
k[r] = {
|
|
787
|
+
format: o,
|
|
788
788
|
parse: d,
|
|
789
789
|
minLength: g,
|
|
790
|
-
maxLength:
|
|
791
|
-
type:
|
|
790
|
+
maxLength: w,
|
|
791
|
+
type: b
|
|
792
792
|
};
|
|
793
|
-
},
|
|
794
|
-
delete
|
|
795
|
-
},
|
|
796
|
-
var
|
|
797
|
-
return
|
|
798
|
-
},
|
|
799
|
-
TempusDate:
|
|
800
|
-
},
|
|
801
|
-
if (
|
|
802
|
-
return
|
|
803
|
-
|
|
804
|
-
},
|
|
805
|
-
typeof
|
|
806
|
-
|
|
807
|
-
}, function(
|
|
793
|
+
}, n.unregisterFormat = function(r) {
|
|
794
|
+
delete k[r];
|
|
795
|
+
}, n.detectFormat = function(r) {
|
|
796
|
+
var o, d, g;
|
|
797
|
+
return o = A(r, 0), o !== "" && (g = 10), d = r.charAt(g), (d === "T" || d === " ") && (o += d, g += 1), o += l(r, g), o;
|
|
798
|
+
}, u = {
|
|
799
|
+
TempusDate: M
|
|
800
|
+
}, n.classes = function(r, o) {
|
|
801
|
+
if (o === e)
|
|
802
|
+
return u[r];
|
|
803
|
+
u[r] = o;
|
|
804
|
+
}, n.loadTranslations = function(r) {
|
|
805
|
+
typeof r == "object" ? f = r : typeof r == "string" && H(r, function(o) {
|
|
806
|
+
f = o;
|
|
807
|
+
}, function(o) {
|
|
808
808
|
});
|
|
809
|
-
},
|
|
810
|
-
}).call(
|
|
811
|
-
})(
|
|
812
|
-
var
|
|
813
|
-
const
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
809
|
+
}, c = (m.language || m.systemLanguage || m.userLanguage || "en").substr(0, 2).toLowerCase(), f[c] === e && (c = "en"), N = O(), y = T(), L = _(), I = R(), p.exports && (t = p.exports = n), t.tempus = n;
|
|
810
|
+
}).call(oe);
|
|
811
|
+
})(Ht, Ht.exports);
|
|
812
|
+
var Ae = Ht.exports;
|
|
813
|
+
const dt = /* @__PURE__ */ ae(Ae);
|
|
814
|
+
var yt, Jt, pt, Nt, Ot, _t, it, gt, Tt, jt, Et, Kt, Q, st, Z, at, V, At, Lt, vt, lt, Ut;
|
|
815
|
+
const j = class j {
|
|
816
|
+
constructor(t) {
|
|
817
|
+
/**
|
|
818
|
+
* Режим «прогресс по доле завершённых подкоманд» — только когда пачка похожа на
|
|
819
|
+
* много параллельных list (crm.deal.list × N и т.п.). Иначе сохраняется старая
|
|
820
|
+
* формула sum(count)/sum(total)×chunkRate (один длинный list, batchTotalCount, смешанные batch).
|
|
821
|
+
* @returns {boolean}
|
|
822
|
+
*/
|
|
823
|
+
D(this, yt);
|
|
824
|
+
/**
|
|
825
|
+
* Одно обновление колбэка прогресса, если снимок изменился.
|
|
826
|
+
* @returns {void}
|
|
827
|
+
*/
|
|
828
|
+
D(this, it);
|
|
829
|
+
/**
|
|
830
|
+
* Проверяет, изменились ли метрики прогресса относительно предыдущей отправки.
|
|
831
|
+
*
|
|
832
|
+
* @param {{percent: number, allCount: number, allTotal: number}} snapshot - Текущий снимок прогресса.
|
|
833
|
+
* @returns {boolean} `true`, если нужно отправить callback прогресса.
|
|
834
|
+
*/
|
|
835
|
+
D(this, Tt);
|
|
836
|
+
/**
|
|
837
|
+
* Уведомляет подписчиков о текущем состоянии лимита.
|
|
838
|
+
*
|
|
839
|
+
* @returns {void}
|
|
840
|
+
*/
|
|
841
|
+
D(this, Et);
|
|
842
|
+
/**
|
|
843
|
+
* Включает состояние лимита, выдерживает паузу и затем выключает лимит.
|
|
844
|
+
* Используется как единый "cooldown" перед повторной отправкой chunk.
|
|
845
|
+
*
|
|
846
|
+
* @param {number} [pauseMs=this.defaultPauseMs] - Длительность паузы; для batch по умолчанию 120 с, для `call()` — `callLimitPauseMs` (30 с).
|
|
847
|
+
* @returns {Promise<void>}
|
|
848
|
+
*/
|
|
849
|
+
D(this, Q);
|
|
850
|
+
/**
|
|
851
|
+
* Проверяет operating-time в результате batch и ставит паузу,
|
|
852
|
+
* если сервер приблизился к лимиту выполнения.
|
|
853
|
+
*
|
|
854
|
+
* @param {Object} result - Результат текущего batch-запроса.
|
|
855
|
+
* @returns {Promise<number>} Максимальный operating-time среди команд.
|
|
856
|
+
*/
|
|
857
|
+
D(this, Z);
|
|
858
|
+
/**
|
|
859
|
+
* Выполняет один chunk с автоматическим повтором после лимит-паузы.
|
|
860
|
+
* Повтор запускается при ошибках QUERY_LIMIT_EXCEEDED, OPERATION_TIME_LIMIT или TIMEOUT.
|
|
861
|
+
*
|
|
862
|
+
* @param {Object} chunk - Объект команд текущего chunk.
|
|
863
|
+
* @param {(result: Object) => Promise<void>} processResult - Обработчик успешного результата chunk.
|
|
864
|
+
* @returns {Promise<void>}
|
|
865
|
+
*/
|
|
866
|
+
D(this, V);
|
|
867
|
+
/**
|
|
868
|
+
* Выполняет BX24.callMethod с таймаутом ожидания ответа.
|
|
869
|
+
*
|
|
870
|
+
* @param {string} method - Имя REST-метода.
|
|
871
|
+
* @param {Object} params - Параметры REST-метода.
|
|
872
|
+
* @returns {Promise<Object|null>} Raw-result BX24 или null при таймауте/ошибке вызова.
|
|
873
|
+
*/
|
|
874
|
+
D(this, Lt);
|
|
875
|
+
/**
|
|
876
|
+
* Resets mutable runtime state before each public batch run.
|
|
877
|
+
* @param {Function} progressCall - Progress callback for current run.
|
|
878
|
+
* @returns {void}
|
|
879
|
+
*/
|
|
880
|
+
D(this, lt);
|
|
881
|
+
typeof t == "function" ? (this.callBatch = t, this.callMethod = null) : (this.callBatch = (t == null ? void 0 : t.callBatch) || null, this.callMethod = (t == null ? void 0 : t.callMethod) || null), this.result = {}, this.errors = {}, this.timeLimit = {
|
|
882
|
+
limit: !1,
|
|
883
|
+
date: void 0,
|
|
884
|
+
pauseMs: void 0
|
|
885
|
+
}, this.timeLimitListeners = /* @__PURE__ */ new Set(), this.canContinue = !0, this.progressCall = "", this.progressData = "", this.progressTimer = "", this.lastProgressSnapshot = null, this.chunkRate = 1, this.totalProgress = 0, this.batchCommandKeyOrder = [], this.totalBatchCommands = 0, this.batchCommandMethods = [], this.filterChunkSize = 50, this.limit = 50, this.progressDelay = 100, this.operatingThreshold = 475, this.defaultPauseMs = 12e4, this.callLimitPauseMs = 3e4, this.requestTimeoutMs = 6e4;
|
|
886
|
+
}
|
|
887
|
+
/**
|
|
888
|
+
* Вычисление текущего прогресса выполнения batch запросов
|
|
889
|
+
* @returns {{percent: number, allCount: number, allTotal: number}}
|
|
890
|
+
*/
|
|
891
|
+
get progressPercent() {
|
|
892
|
+
if (!this.progressData)
|
|
893
|
+
return { percent: 0, allCount: 0, allTotal: 0 };
|
|
894
|
+
const t = this.totalBatchCommands || 0;
|
|
895
|
+
if (t > 0 && Array.isArray(this.batchCommandKeyOrder) && this.batchCommandKeyOrder.length && E(this, yt, Jt).call(this)) {
|
|
896
|
+
let A = 0;
|
|
897
|
+
for (const c of this.batchCommandKeyOrder) {
|
|
898
|
+
const f = this.progressData[c];
|
|
899
|
+
if (!f)
|
|
900
|
+
continue;
|
|
901
|
+
const O = Number(f.total) || 0, T = Number(f.count) || 0;
|
|
902
|
+
O === 0 && T === 0 ? A += 1 : O > 0 && (A += Math.min(1, T / O));
|
|
903
|
+
}
|
|
904
|
+
const h = A / t * 100;
|
|
905
|
+
let n = Math.max(0, Math.min(100, Math.floor(h)));
|
|
906
|
+
const u = t, m = Math.min(t, Math.floor(A));
|
|
907
|
+
return { percent: n, allCount: m, allTotal: u };
|
|
908
|
+
}
|
|
909
|
+
let e = 0, s = 0;
|
|
910
|
+
for (const A of Object.values(this.progressData)) {
|
|
911
|
+
const { total: h, count: n } = A;
|
|
912
|
+
e += h ?? 0, s += n ?? 0;
|
|
913
|
+
}
|
|
914
|
+
const i = Number(this.chunkRate) || 0;
|
|
915
|
+
let a = 0;
|
|
916
|
+
e ? a = s / e * 100 * i + this.totalProgress : s === 0 && e === 0 ? a = 100 * i + this.totalProgress : a = 100, a = Math.max(0, Math.min(a, 100));
|
|
917
|
+
let l = Math.floor(a);
|
|
918
|
+
return e > 0 && s >= e && (l = 100), { percent: l, allCount: s, allTotal: e };
|
|
919
|
+
}
|
|
920
|
+
/**
|
|
921
|
+
* Обновление данных прогресса выполнения
|
|
922
|
+
* @param {Object} params
|
|
923
|
+
* @param {string} params.key - Ключ запроса
|
|
924
|
+
* @param {Object} params.value - Значение ответа от API
|
|
925
|
+
* @param {string} params.type - Тип обработки ('count' или undefined)
|
|
926
|
+
*/
|
|
927
|
+
setProgressData({ key: t, value: e, type: s }) {
|
|
928
|
+
var f, O;
|
|
929
|
+
if (!this.progressCall)
|
|
930
|
+
return;
|
|
931
|
+
const i = this.getData(e.data()), a = Array.isArray(i) ? i.length : 0;
|
|
932
|
+
let l = a;
|
|
933
|
+
if (typeof e.total == "function") {
|
|
934
|
+
const T = e.total();
|
|
935
|
+
if (T != null && T !== "") {
|
|
936
|
+
const _ = Number(T);
|
|
937
|
+
Number.isFinite(_) && (l = _);
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
s === "count" && (l = a);
|
|
941
|
+
let A = 1;
|
|
942
|
+
i && (A = a), this.progressData || (this.progressData = {});
|
|
943
|
+
const h = ((f = this.progressData[t]) == null ? void 0 : f.total) ?? 0, n = ((O = this.progressData[t]) == null ? void 0 : O.count) ?? 0, u = A + n, m = Math.max(h, l ?? 0, u);
|
|
944
|
+
if (this.progressData[t] = {
|
|
945
|
+
total: m,
|
|
946
|
+
count: Math.min(u, m)
|
|
947
|
+
}, typeof document < "u" && (document == null ? void 0 : document.hidden) === !0) {
|
|
948
|
+
E(this, it, gt).call(this);
|
|
949
|
+
return;
|
|
950
|
+
}
|
|
951
|
+
E(this, it, gt).call(this), this.progressTimer || (this.progressTimer = setInterval(() => {
|
|
952
|
+
if (!this.progressCall) {
|
|
953
|
+
this.clearProgressData();
|
|
954
|
+
return;
|
|
955
|
+
}
|
|
956
|
+
E(this, it, gt).call(this);
|
|
957
|
+
const { percent: T } = this.progressPercent;
|
|
958
|
+
T >= 100 && (clearInterval(this.progressTimer), this.progressTimer = "");
|
|
959
|
+
}, this.progressDelay));
|
|
817
960
|
}
|
|
818
961
|
/**
|
|
819
962
|
* Извлечение данных из ответа API с учетом различных форматов
|
|
820
963
|
* @param {Object} data - Ответ от API
|
|
821
964
|
* @returns {any} Данные из ответа
|
|
822
965
|
*/
|
|
823
|
-
getData(
|
|
824
|
-
|
|
966
|
+
getData(t) {
|
|
967
|
+
if (t == null)
|
|
968
|
+
return t;
|
|
969
|
+
let e = (t == null ? void 0 : t.items) ?? (t == null ? void 0 : t.tasks) ?? (t == null ? void 0 : t.types) ?? (t == null ? void 0 : t.type) ?? (t == null ? void 0 : t.fields) ?? (t == null ? void 0 : t.workgroups) ?? t;
|
|
970
|
+
return e && typeof e == "object" && !Array.isArray(e) && Array.isArray(e.result) && (e = e.result), e;
|
|
971
|
+
}
|
|
972
|
+
/**
|
|
973
|
+
* Устанавливает состояние лимита и уведомляет подписчиков об изменении.
|
|
974
|
+
*
|
|
975
|
+
* @param {boolean} limit - Активен ли лимит.
|
|
976
|
+
* @param {string|undefined} date - ISO-дата начала лимита.
|
|
977
|
+
* @param {number|undefined} pauseMs - Длительность текущей лимит-паузы (мс); при снятии лимита не передаётся.
|
|
978
|
+
* @returns {void}
|
|
979
|
+
*/
|
|
980
|
+
setTimeLimitState(t, e, s) {
|
|
981
|
+
this.timeLimit.limit = !!t, this.timeLimit.date = t ? e : void 0, t && typeof s == "number" && s > 0 ? this.timeLimit.pauseMs = s : this.timeLimit.pauseMs = void 0, E(this, Et, Kt).call(this);
|
|
982
|
+
}
|
|
983
|
+
/**
|
|
984
|
+
* Подписывает внешний код на изменения состояния лимита.
|
|
985
|
+
* Callback вызывается сразу с текущим состоянием.
|
|
986
|
+
*
|
|
987
|
+
* @param {(state: {limit: boolean, date?: string, pauseMs?: number}) => void} callback - Обработчик состояния лимита.
|
|
988
|
+
* @returns {() => void} Функция отписки.
|
|
989
|
+
*/
|
|
990
|
+
subscribeTimeLimit(t) {
|
|
991
|
+
return typeof t != "function" ? () => {
|
|
992
|
+
} : (this.timeLimitListeners.add(t), t({
|
|
993
|
+
limit: this.timeLimit.limit,
|
|
994
|
+
date: this.timeLimit.date,
|
|
995
|
+
pauseMs: this.timeLimit.pauseMs
|
|
996
|
+
}), () => {
|
|
997
|
+
this.timeLimitListeners.delete(t);
|
|
998
|
+
});
|
|
825
999
|
}
|
|
826
1000
|
/**
|
|
827
1001
|
* Проверяет, содержит ли запрос большие массивы в фильтрах, которые могут вызвать 500 ошибку
|
|
@@ -830,29 +1004,29 @@ class K {
|
|
|
830
1004
|
* @param {Object} request - Объект запроса {method, params}
|
|
831
1005
|
* @returns {Array} Массив запросов (может быть один или несколько)
|
|
832
1006
|
*/
|
|
833
|
-
splitLargeFilters(
|
|
834
|
-
const { method:
|
|
835
|
-
if (!
|
|
836
|
-
return [{ key:
|
|
837
|
-
const
|
|
838
|
-
if (!
|
|
839
|
-
return [{ key:
|
|
840
|
-
for (const [l,
|
|
841
|
-
if (Array.isArray(
|
|
1007
|
+
splitLargeFilters(t, e) {
|
|
1008
|
+
const { method: s, params: i } = e;
|
|
1009
|
+
if (!i)
|
|
1010
|
+
return [{ key: t, request: e }];
|
|
1011
|
+
const a = i.filter || i.FILTER;
|
|
1012
|
+
if (!a || typeof a != "object" || Array.isArray(a))
|
|
1013
|
+
return [{ key: t, request: e }];
|
|
1014
|
+
for (const [l, A] of Object.entries(a))
|
|
1015
|
+
if (!String(l).trim().startsWith("!") && Array.isArray(A) && A.length > this.filterChunkSize) {
|
|
842
1016
|
const h = [];
|
|
843
|
-
for (let
|
|
844
|
-
const
|
|
845
|
-
|
|
1017
|
+
for (let n = 0; n < A.length; n += this.filterChunkSize) {
|
|
1018
|
+
const u = A.slice(n, n + this.filterChunkSize), m = n === 0 ? t : `${t}__chunk_${Math.floor(n / this.filterChunkSize)}`, c = { ...i };
|
|
1019
|
+
i.filter ? (c.filter = { ...a }, c.filter[l] = u) : i.FILTER && (c.FILTER = { ...a }, c.FILTER[l] = u), h.push({
|
|
846
1020
|
key: m,
|
|
847
|
-
request: { method:
|
|
848
|
-
originalKey:
|
|
1021
|
+
request: { method: s, params: c },
|
|
1022
|
+
originalKey: t,
|
|
849
1023
|
filterKey: l,
|
|
850
|
-
chunkIndex: Math.floor(
|
|
1024
|
+
chunkIndex: Math.floor(n / this.filterChunkSize)
|
|
851
1025
|
});
|
|
852
1026
|
}
|
|
853
1027
|
return h;
|
|
854
1028
|
}
|
|
855
|
-
return [{ key:
|
|
1029
|
+
return [{ key: t, request: e }];
|
|
856
1030
|
}
|
|
857
1031
|
/**
|
|
858
1032
|
* Объединяет результаты разбитых запросов обратно в один результат
|
|
@@ -860,59 +1034,23 @@ class K {
|
|
|
860
1034
|
* @param {string} originalKey - Оригинальный ключ запроса
|
|
861
1035
|
* @returns {Array} Объединенный массив результатов
|
|
862
1036
|
*/
|
|
863
|
-
mergeSplitResults(
|
|
864
|
-
const i = [],
|
|
865
|
-
const
|
|
866
|
-
return
|
|
1037
|
+
mergeSplitResults(t, e) {
|
|
1038
|
+
const s = [], i = String(e).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), a = new RegExp(`^${i}(?:__chunk_\\d+)?$`), l = Object.keys(t).filter((A) => a.test(A)).sort((A, h) => {
|
|
1039
|
+
const n = A.match(/__chunk_(\d+)$/), u = h.match(/__chunk_(\d+)$/);
|
|
1040
|
+
return n ? u ? parseInt(n[1]) - parseInt(u[1]) : 1 : -1;
|
|
867
1041
|
});
|
|
868
|
-
for (const
|
|
869
|
-
const
|
|
870
|
-
Array.isArray(
|
|
1042
|
+
for (const A of l) {
|
|
1043
|
+
const h = t[A];
|
|
1044
|
+
Array.isArray(h) ? s.push(...h) : h && s.push(h);
|
|
871
1045
|
}
|
|
872
|
-
return
|
|
873
|
-
}
|
|
874
|
-
/**
|
|
875
|
-
* Вычисление текущего прогресса выполнения batch запросов
|
|
876
|
-
* @returns {{percent: number, allCount: number, allTotal: number}}
|
|
877
|
-
*/
|
|
878
|
-
get progressPercent() {
|
|
879
|
-
let r = 0;
|
|
880
|
-
if (!this.progressData)
|
|
881
|
-
return { percent: Math.round(r), allCount: 0, allTotal: 0 };
|
|
882
|
-
let e = 0, i = 0;
|
|
883
|
-
return Object.values(this.progressData).forEach((n) => {
|
|
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 };
|
|
887
|
-
}
|
|
888
|
-
/**
|
|
889
|
-
* Обновление данных прогресса выполнения
|
|
890
|
-
* @param {Object} params
|
|
891
|
-
* @param {string} params.key - Ключ запроса
|
|
892
|
-
* @param {Object} params.value - Значение ответа от API
|
|
893
|
-
* @param {string} params.type - Тип обработки ('count' или undefined)
|
|
894
|
-
*/
|
|
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);
|
|
899
|
-
let c = 1;
|
|
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;
|
|
902
|
-
(this.oldPercent === "no" || this.oldPercent < this.progressPercent.percent) && (this.progressCall({
|
|
903
|
-
data: this.progressData,
|
|
904
|
-
percent: h,
|
|
905
|
-
allCount: s,
|
|
906
|
-
allTotal: f
|
|
907
|
-
}), this.oldPercent = this.progressPercent.percent), h >= 100 && this.clearProgressData();
|
|
908
|
-
}, this.progressDelay)));
|
|
1046
|
+
return s;
|
|
909
1047
|
}
|
|
910
1048
|
/**
|
|
911
1049
|
* Задержка между запросами
|
|
912
1050
|
* @returns {Promise<void>}
|
|
913
1051
|
*/
|
|
914
1052
|
delay() {
|
|
915
|
-
return new Promise((
|
|
1053
|
+
return typeof document < "u" && (document == null ? void 0 : document.hidden) === !0 ? Promise.resolve() : new Promise((e) => setTimeout(e, 500));
|
|
916
1054
|
}
|
|
917
1055
|
/**
|
|
918
1056
|
* Обертка над callBatch с таймаутом для предотвращения зависаний
|
|
@@ -922,32 +1060,30 @@ class K {
|
|
|
922
1060
|
* @param {Function} callback - Callback функция для обработки результата
|
|
923
1061
|
* @returns {Promise<void>}
|
|
924
1062
|
*/
|
|
925
|
-
callBatchWithTimeout(
|
|
926
|
-
return new Promise((
|
|
927
|
-
let
|
|
928
|
-
const
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
if (!o) {
|
|
932
|
-
o = !0, f && clearTimeout(f), m && clearTimeout(m);
|
|
1063
|
+
callBatchWithTimeout(t, e) {
|
|
1064
|
+
return new Promise((s, i) => {
|
|
1065
|
+
let a = !1, l = null;
|
|
1066
|
+
const A = async (n) => {
|
|
1067
|
+
if (!a) {
|
|
1068
|
+
a = !0, l && clearTimeout(l);
|
|
933
1069
|
try {
|
|
934
|
-
await Promise.resolve(e(
|
|
935
|
-
} catch (
|
|
936
|
-
console.error(
|
|
1070
|
+
await Promise.resolve(e(n)), s();
|
|
1071
|
+
} catch (u) {
|
|
1072
|
+
console.error("Error in callBatch callback:", u), i(u);
|
|
937
1073
|
}
|
|
938
1074
|
}
|
|
939
|
-
},
|
|
940
|
-
if (!
|
|
941
|
-
|
|
942
|
-
`Batch request timeout after ${
|
|
1075
|
+
}, h = async () => {
|
|
1076
|
+
if (!a) {
|
|
1077
|
+
a = !0, l && clearTimeout(l), console.warn(
|
|
1078
|
+
`Batch request timeout after ${this.requestTimeoutMs}ms. This may indicate a CORS or network error.`
|
|
943
1079
|
);
|
|
944
|
-
const
|
|
945
|
-
Object.keys(
|
|
946
|
-
|
|
1080
|
+
const n = {};
|
|
1081
|
+
Object.keys(t).forEach((u) => {
|
|
1082
|
+
n[u] = {
|
|
947
1083
|
error: () => ({
|
|
948
1084
|
ex: {
|
|
949
1085
|
error: "TIMEOUT",
|
|
950
|
-
error_description: "Request timeout after
|
|
1086
|
+
error_description: "Request timeout after 60 seconds. Possible CORS or network error."
|
|
951
1087
|
}
|
|
952
1088
|
}),
|
|
953
1089
|
data: () => [],
|
|
@@ -955,27 +1091,24 @@ class K {
|
|
|
955
1091
|
};
|
|
956
1092
|
});
|
|
957
1093
|
try {
|
|
958
|
-
await Promise.resolve(e(
|
|
959
|
-
} catch (
|
|
960
|
-
console.error("Error in timeout callback:",
|
|
1094
|
+
await Promise.resolve(e(n)), s();
|
|
1095
|
+
} catch (u) {
|
|
1096
|
+
console.error("Error in timeout callback:", u), s();
|
|
961
1097
|
}
|
|
962
1098
|
}
|
|
963
|
-
}, N = (y) => {
|
|
964
|
-
try {
|
|
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));
|
|
967
|
-
});
|
|
968
|
-
} catch (p) {
|
|
969
|
-
o || console.error(`Error calling callBatch (attempt ${y}):`, p);
|
|
970
|
-
}
|
|
971
1099
|
};
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
)
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
}
|
|
1100
|
+
try {
|
|
1101
|
+
this.callBatch(t, async (n) => {
|
|
1102
|
+
await A(n);
|
|
1103
|
+
});
|
|
1104
|
+
} catch (n) {
|
|
1105
|
+
a || console.error("Error calling callBatch:", n);
|
|
1106
|
+
}
|
|
1107
|
+
l = setTimeout(async () => {
|
|
1108
|
+
a || (console.warn(
|
|
1109
|
+
`Batch request attempt timeout after ${this.requestTimeoutMs}ms. Switching to timeout fallback result.`
|
|
1110
|
+
), await h());
|
|
1111
|
+
}, this.requestTimeoutMs);
|
|
979
1112
|
});
|
|
980
1113
|
}
|
|
981
1114
|
/**
|
|
@@ -988,49 +1121,67 @@ class K {
|
|
|
988
1121
|
* Очистка данных прогресса
|
|
989
1122
|
*/
|
|
990
1123
|
clearProgressData() {
|
|
991
|
-
clearInterval(this.progressTimer), this.progressTimer = "", this.progressData = "", this.progressCall = "", this.
|
|
1124
|
+
clearInterval(this.progressTimer), this.progressTimer = "", this.progressData = "", this.progressCall = "", this.lastProgressSnapshot = null;
|
|
992
1125
|
}
|
|
993
1126
|
/** Основная функция при вызове batch
|
|
994
|
-
* @param {Array
|
|
995
|
-
* @param {Function} progressCall - Функция получающая данные выполнения
|
|
996
|
-
* @
|
|
1127
|
+
* @param {Array|Object} requestList - Массив/объект методов.
|
|
1128
|
+
* @param {Function} progressCall - Функция получающая данные выполнения батча.
|
|
1129
|
+
* @param {{oneBatch?: boolean}} [options] - Опции выполнения.
|
|
1130
|
+
* @returns {Promise<Object>}
|
|
997
1131
|
*/
|
|
998
|
-
async batch(
|
|
999
|
-
this
|
|
1000
|
-
const
|
|
1001
|
-
for (const [
|
|
1002
|
-
const
|
|
1003
|
-
if (!
|
|
1132
|
+
async batch(t, e, s = {}) {
|
|
1133
|
+
E(this, lt, Ut).call(this, e);
|
|
1134
|
+
const i = {}, a = {}, l = {};
|
|
1135
|
+
for (const [u, m] of Object.entries(t)) {
|
|
1136
|
+
const c = this.arrayChunk(m);
|
|
1137
|
+
if (!c)
|
|
1004
1138
|
continue;
|
|
1005
|
-
const
|
|
1006
|
-
if (
|
|
1007
|
-
|
|
1139
|
+
const f = this.splitLargeFilters(u, c);
|
|
1140
|
+
if (f.length === 1)
|
|
1141
|
+
a[u] = c;
|
|
1008
1142
|
else {
|
|
1009
|
-
l[
|
|
1010
|
-
for (const
|
|
1011
|
-
|
|
1143
|
+
l[u] = [];
|
|
1144
|
+
for (const O of f)
|
|
1145
|
+
a[O.key] = O.request, l[u].push(O.key);
|
|
1012
1146
|
}
|
|
1013
1147
|
}
|
|
1014
|
-
this.
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1148
|
+
this.batchCommandKeyOrder = Object.keys(a), this.totalBatchCommands = this.batchCommandKeyOrder.length, this.batchCommandMethods = this.batchCommandKeyOrder.map(
|
|
1149
|
+
(u) => {
|
|
1150
|
+
var m;
|
|
1151
|
+
return String(((m = a[u]) == null ? void 0 : m.method) || "");
|
|
1152
|
+
}
|
|
1153
|
+
), this.chunkRate = (1 / Math.ceil(Object.keys(a).length / this.limit)).toFixed(5);
|
|
1154
|
+
let A = {}, h = 0;
|
|
1155
|
+
const n = Object.keys(a).length;
|
|
1156
|
+
for (const [u, m] of Object.entries(a)) {
|
|
1018
1157
|
if (!this.canContinue)
|
|
1019
1158
|
break;
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1159
|
+
if (A[u] = m, Object.keys(A).length >= this.limit || h + 1 === n) {
|
|
1160
|
+
const c = h + 1 === n;
|
|
1161
|
+
await this.batchChunk(
|
|
1162
|
+
A,
|
|
1163
|
+
void 0,
|
|
1164
|
+
!c,
|
|
1165
|
+
{
|
|
1166
|
+
disablePagination: !1,
|
|
1167
|
+
oneBatch: !!(s != null && s.oneBatch)
|
|
1168
|
+
}
|
|
1169
|
+
), Object.entries(this.result).forEach(([f, O]) => {
|
|
1170
|
+
i[f] = O;
|
|
1171
|
+
}), this.totalProgress = Math.round(
|
|
1172
|
+
h / n * 100
|
|
1173
|
+
), A = {};
|
|
1174
|
+
}
|
|
1175
|
+
h++;
|
|
1025
1176
|
}
|
|
1026
|
-
for (const [
|
|
1177
|
+
for (const [u, m] of Object.entries(l))
|
|
1027
1178
|
if (m && m.length > 0) {
|
|
1028
|
-
const
|
|
1029
|
-
for (const
|
|
1030
|
-
delete
|
|
1031
|
-
|
|
1179
|
+
const c = this.mergeSplitResults(i, u);
|
|
1180
|
+
for (const f of m)
|
|
1181
|
+
delete i[f];
|
|
1182
|
+
i[u] = c;
|
|
1032
1183
|
}
|
|
1033
|
-
return Object.entries(this.errors).length && (
|
|
1184
|
+
return Object.entries(this.errors).length && (i.errorsList = this.errors), e && e({ percent: 100 }), Promise.resolve(i);
|
|
1034
1185
|
}
|
|
1035
1186
|
/**
|
|
1036
1187
|
* Выполняет батч-запрос и возвращает только количество элементов для каждой команды.
|
|
@@ -1039,109 +1190,137 @@ class K {
|
|
|
1039
1190
|
*
|
|
1040
1191
|
* @param {Object} requestList - Объект с методами для выполнения
|
|
1041
1192
|
* @param {Function} progressCall - Callback для отслеживания прогресса
|
|
1042
|
-
* @param {Function} limitCall - Callback при превышении лимитов
|
|
1043
1193
|
* @returns {Promise<Object>} Объект с количеством элементов для каждого ключа
|
|
1044
1194
|
*/
|
|
1045
|
-
async batchTotalCount(
|
|
1046
|
-
this
|
|
1047
|
-
const
|
|
1048
|
-
for (const [
|
|
1049
|
-
const
|
|
1050
|
-
if (!
|
|
1195
|
+
async batchTotalCount(t, e) {
|
|
1196
|
+
E(this, lt, Ut).call(this, e);
|
|
1197
|
+
const s = {}, i = {}, a = {};
|
|
1198
|
+
for (const [h, n] of Object.entries(t)) {
|
|
1199
|
+
const u = this.arrayChunk(n);
|
|
1200
|
+
if (!u)
|
|
1051
1201
|
continue;
|
|
1052
|
-
const
|
|
1053
|
-
if (
|
|
1054
|
-
|
|
1202
|
+
const m = this.splitLargeFilters(h, u);
|
|
1203
|
+
if (m.length === 1)
|
|
1204
|
+
i[h] = u;
|
|
1055
1205
|
else {
|
|
1056
|
-
|
|
1057
|
-
for (const
|
|
1058
|
-
|
|
1206
|
+
a[h] = [];
|
|
1207
|
+
for (const c of m)
|
|
1208
|
+
i[c.key] = c.request, a[h].push(c.key);
|
|
1059
1209
|
}
|
|
1060
1210
|
}
|
|
1061
|
-
const
|
|
1062
|
-
for (let
|
|
1063
|
-
const
|
|
1064
|
-
for (const [
|
|
1211
|
+
const l = [], A = Object.entries(i);
|
|
1212
|
+
for (let h = 0; h < A.length; h += this.limit) {
|
|
1213
|
+
const n = A.slice(h, h + this.limit), u = {};
|
|
1214
|
+
for (const [m, c] of n) {
|
|
1065
1215
|
if (!this.canContinue)
|
|
1066
1216
|
break;
|
|
1067
|
-
m
|
|
1217
|
+
u[m] = c;
|
|
1068
1218
|
}
|
|
1069
|
-
Object.keys(
|
|
1219
|
+
Object.keys(u).length > 0 && l.push(u);
|
|
1070
1220
|
}
|
|
1071
|
-
this.chunkRate = (1 /
|
|
1072
|
-
for (const [
|
|
1221
|
+
this.chunkRate = (1 / l.length).toFixed(5);
|
|
1222
|
+
for (const [h, n] of Object.entries(l)) {
|
|
1073
1223
|
if (!this.canContinue)
|
|
1074
1224
|
break;
|
|
1075
|
-
this.totalProgress = Math.round(Number(
|
|
1076
|
-
|
|
1077
|
-
|
|
1225
|
+
this.totalProgress = Math.round(Number(h) / l.length * 100);
|
|
1226
|
+
const u = Number(h) === l.length - 1;
|
|
1227
|
+
await E(this, V, At).call(this, n, async (m) => {
|
|
1228
|
+
var c, f, O, T, _;
|
|
1229
|
+
for (const [R, N] of Object.entries(m)) {
|
|
1078
1230
|
if (!this.canContinue)
|
|
1079
1231
|
return;
|
|
1080
|
-
if (
|
|
1081
|
-
const
|
|
1082
|
-
this.errors[
|
|
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
|
-
}
|
|
1232
|
+
if (N.error()) {
|
|
1233
|
+
const k = (f = (c = N.error()) == null ? void 0 : c.ex) == null ? void 0 : f.error, U = (T = (O = N.error()) == null ? void 0 : O.ex) == null ? void 0 : T.error_description;
|
|
1234
|
+
this.errors[R] = k && k.trim() || U && U.trim() || ((_ = N.error()) == null ? void 0 : _.toString()) || "Неизвестная ошибка", s[R] = 0;
|
|
1097
1235
|
continue;
|
|
1098
1236
|
}
|
|
1099
|
-
const
|
|
1100
|
-
|
|
1237
|
+
const y = this.getData(N.data()), L = Array.isArray(y) ? y.length : 0, H = typeof N.total == "function" && N.total() !== void 0 ? N.total() : L;
|
|
1238
|
+
s[R] = H, this.setProgressData({ key: R, value: N, type: "count" });
|
|
1101
1239
|
}
|
|
1240
|
+
await E(this, Z, at).call(this, m, !u);
|
|
1102
1241
|
});
|
|
1103
1242
|
}
|
|
1104
|
-
for (const [
|
|
1105
|
-
if (
|
|
1106
|
-
let
|
|
1107
|
-
for (const
|
|
1108
|
-
|
|
1109
|
-
|
|
1243
|
+
for (const [h, n] of Object.entries(a))
|
|
1244
|
+
if (n && n.length > 0) {
|
|
1245
|
+
let u = 0;
|
|
1246
|
+
for (const m of n)
|
|
1247
|
+
s[m] !== void 0 && (u += s[m] || 0), delete s[m];
|
|
1248
|
+
s[h] = u;
|
|
1249
|
+
}
|
|
1250
|
+
return Object.entries(this.errors).length && (s.errorsList = this.errors, this.errorLogger()), e && e({ percent: 100 }), Promise.resolve(s);
|
|
1251
|
+
}
|
|
1252
|
+
/**
|
|
1253
|
+
* Выполняет одиночный REST-вызов с таймаутом и авто-повтором после лимит-паузы.
|
|
1254
|
+
* Повторяет вызов при QUERY_LIMIT_EXCEEDED / OPERATION_TIME_LIMIT / TIMEOUT.
|
|
1255
|
+
*
|
|
1256
|
+
* @param {{method: string, params?: Object}} request - Описание REST-вызова.
|
|
1257
|
+
* @returns {Promise<{success: boolean, data: any, answer: Object, error: string|null}>}
|
|
1258
|
+
*/
|
|
1259
|
+
async call({ method: t, params: e = {} }) {
|
|
1260
|
+
var s, i, a, l, A, h, n;
|
|
1261
|
+
for (; ; ) {
|
|
1262
|
+
const u = await E(this, Lt, vt).call(this, t, e);
|
|
1263
|
+
if (!u) {
|
|
1264
|
+
await E(this, Q, st).call(this, this.callLimitPauseMs);
|
|
1265
|
+
continue;
|
|
1110
1266
|
}
|
|
1111
|
-
|
|
1267
|
+
const m = {};
|
|
1268
|
+
if (u != null && u.answer)
|
|
1269
|
+
for (const [f, O] of Object.entries(u.answer))
|
|
1270
|
+
f !== "result" && O && (m[f] = O);
|
|
1271
|
+
if (u.error()) {
|
|
1272
|
+
const f = ((i = (s = u.error()) == null ? void 0 : s.ex) == null ? void 0 : i.error) ?? "";
|
|
1273
|
+
if (["QUERY_LIMIT_EXCEEDED", "OPERATION_TIME_LIMIT", "TIMEOUT"].includes(f)) {
|
|
1274
|
+
await E(this, Q, st).call(this, this.callLimitPauseMs);
|
|
1275
|
+
continue;
|
|
1276
|
+
}
|
|
1277
|
+
const O = ((a = u.error()) == null ? void 0 : a.toString()) || ((A = (l = u.error()) == null ? void 0 : l.ex) == null ? void 0 : A.error_description) || ((n = (h = u.error()) == null ? void 0 : h.ex) == null ? void 0 : n.error) || "Неизвестная ошибка";
|
|
1278
|
+
return {
|
|
1279
|
+
success: !1,
|
|
1280
|
+
data: !1,
|
|
1281
|
+
answer: m,
|
|
1282
|
+
error: O
|
|
1283
|
+
};
|
|
1284
|
+
}
|
|
1285
|
+
let c = u.data();
|
|
1286
|
+
return c != null && c.items && (c = c.items), {
|
|
1287
|
+
success: !0,
|
|
1288
|
+
data: c,
|
|
1289
|
+
answer: m,
|
|
1290
|
+
error: null
|
|
1291
|
+
};
|
|
1292
|
+
}
|
|
1112
1293
|
}
|
|
1113
1294
|
/** Валидация запросов
|
|
1114
1295
|
* Чтобы не перегружать Битрикс сервера запросами с start - добавляем нужные поля в параметры
|
|
1115
1296
|
* Так же переделываем некоторые запросы в нужный вид (Для task-методов)
|
|
1116
1297
|
* @param {Array/Object} request - Массив/объект методов
|
|
1117
1298
|
*/
|
|
1118
|
-
arrayChunk(
|
|
1119
|
-
let e = "",
|
|
1120
|
-
if (Array.isArray(
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
if (!i)
|
|
1124
|
-
i = {
|
|
1299
|
+
arrayChunk(t) {
|
|
1300
|
+
let e = "", s = {};
|
|
1301
|
+
if (Array.isArray(t) ? [e] = t : (e = t.method, s = t.params), (e.includes("list") || e === "user.get" || e === "entity.item.get") && e !== "task.item.list") {
|
|
1302
|
+
if (!s)
|
|
1303
|
+
s = e === "entity.item.get" ? { SORT: { ID: "ASC" } } : {
|
|
1125
1304
|
order: { ID: "ASC", id: "ASC" }
|
|
1126
1305
|
};
|
|
1127
1306
|
else {
|
|
1128
|
-
e === "tasks.task.list" ? (
|
|
1129
|
-
const
|
|
1130
|
-
typeof
|
|
1131
|
-
(
|
|
1307
|
+
e === "entity.item.get" ? (s.SORT || (s.SORT = { ID: "ASC" }), Array.isArray(s.select) ? s.select.includes("ID") || s.select.push("ID") : s.select = ["ID"]) : e === "tasks.task.list" ? (s.order || (s.order = {}), s.order.ID = "asc") : e === "user.get" ? (s.sort || (s.sort = "ID"), s.order || (s.order = "ASC")) : s.order = { ID: "ASC", id: "ASC" }, Array.isArray(s.select) && !s.select.includes("ID") && s.select.push("ID");
|
|
1308
|
+
const i = e === "user.get" || e === "entity.item.get" ? s.FILTER : s.filter;
|
|
1309
|
+
typeof i == "object" && i !== null && !Array.isArray(i) && Object.entries(i).forEach(([a, l]) => {
|
|
1310
|
+
(s.start === void 0 || s.start !== -1) && ["id", "ID"].includes(a) && (typeof l == "string" || Array.isArray(l) && l.length <= 50) && (s.start = -1);
|
|
1132
1311
|
});
|
|
1133
1312
|
}
|
|
1134
|
-
e === "crm.type.list" &&
|
|
1313
|
+
e === "crm.type.list" && s.order && delete s.order.ID;
|
|
1135
1314
|
}
|
|
1136
1315
|
if (e === "task.item.list")
|
|
1137
|
-
if (!
|
|
1138
|
-
|
|
1316
|
+
if (!s)
|
|
1317
|
+
s = [{ ID: "ASC" }, [""], [""], ["ID"]];
|
|
1139
1318
|
else {
|
|
1140
|
-
Array.isArray(
|
|
1141
|
-
const [
|
|
1142
|
-
|
|
1319
|
+
Array.isArray(s[0]) && (s[0] = {});
|
|
1320
|
+
const [i, a, l, A] = s;
|
|
1321
|
+
i.ID = "ASC", A[0] !== "" && A.includes("ID") || A.push("ID");
|
|
1143
1322
|
}
|
|
1144
|
-
return { method: e, params:
|
|
1323
|
+
return { method: e, params: s };
|
|
1145
1324
|
}
|
|
1146
1325
|
/** Выполняет первичный запрос с массивом методов
|
|
1147
1326
|
* При наличии более 50 элементов в нем, подготоваливаем данные и передаем в this.batchPayload
|
|
@@ -1149,147 +1328,275 @@ class K {
|
|
|
1149
1328
|
* @param {Array} query - Тот же массив с методами
|
|
1150
1329
|
* @returns {Object} Объект с результатами запросов
|
|
1151
1330
|
*/
|
|
1152
|
-
async batchChunk(
|
|
1153
|
-
return new Promise((
|
|
1154
|
-
const
|
|
1155
|
-
let
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
break;
|
|
1167
|
-
case "ACCESS_DENIED":
|
|
1168
|
-
this.skipList.add(r[N].method);
|
|
1169
|
-
break;
|
|
1170
|
-
case "TIMEOUT":
|
|
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);
|
|
1173
|
-
break;
|
|
1331
|
+
async batchChunk(t, e, s = !0, i = {}) {
|
|
1332
|
+
return new Promise((a) => {
|
|
1333
|
+
const l = [];
|
|
1334
|
+
let A;
|
|
1335
|
+
const h = !!(i != null && i.disablePagination);
|
|
1336
|
+
(async () => {
|
|
1337
|
+
await E(this, V, At).call(this, t, async (u) => {
|
|
1338
|
+
var c, f, O, T, _;
|
|
1339
|
+
for (const [R, N] of Object.entries(u)) {
|
|
1340
|
+
if (!this.canContinue)
|
|
1341
|
+
return;
|
|
1342
|
+
if (N.error()) {
|
|
1343
|
+
const g = (f = (c = N.error()) == null ? void 0 : c.ex) == null ? void 0 : f.error, w = (T = (O = N.error()) == null ? void 0 : O.ex) == null ? void 0 : T.error_description;
|
|
1344
|
+
this.errors[R] = g && g.trim() || w && w.trim() || ((_ = N.error()) == null ? void 0 : _.toString()) || "Неизвестная ошибка", A = !0;
|
|
1174
1345
|
}
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1346
|
+
const y = this.getData(N.data()), L = Array.isArray(y) ? y.length : 0, I = typeof N.total == "function" && N.total() !== void 0, H = I ? N.total() : L;
|
|
1347
|
+
e === "count" ? this.result[R] ? this.result[R] += L : this.result[R] = H : this.result[R] = y, this.setProgressData({ key: R, value: N, type: e });
|
|
1348
|
+
const k = t[R], U = Array.isArray(k) ? k[0] : k == null ? void 0 : k.method, M = typeof U == "string" && (U.includes(".list") || U === "user.get" || U === "entity.item.get"), r = e === "count" ? !I && L === this.limit : M ? L === this.limit : H > this.limit && H > L, o = e !== "count" && U === "entity.item.get" && L === this.limit && !r, d = r || o;
|
|
1349
|
+
if (!h && (!this.canContinue || d)) {
|
|
1350
|
+
let g = t[R];
|
|
1351
|
+
if (Array.isArray(g)) {
|
|
1352
|
+
const [w, b = {}] = g;
|
|
1353
|
+
g = [w, b];
|
|
1354
|
+
} else {
|
|
1355
|
+
const { method: w, params: b = {} } = g;
|
|
1356
|
+
g = [w, b];
|
|
1357
|
+
}
|
|
1358
|
+
l.push([
|
|
1359
|
+
R,
|
|
1360
|
+
g,
|
|
1361
|
+
H,
|
|
1362
|
+
{ entityItemGetScan: o }
|
|
1363
|
+
]);
|
|
1187
1364
|
}
|
|
1188
|
-
n.push([N, B, M]);
|
|
1189
1365
|
}
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
(
|
|
1193
|
-
|
|
1194
|
-
|
|
1366
|
+
A > 0 && this.errorLogger();
|
|
1367
|
+
const m = l.length > 0 || s;
|
|
1368
|
+
await E(this, Z, at).call(this, u, m), l.length ? await this.batchPayload(l, e, i).then(
|
|
1369
|
+
() => a(this.result)
|
|
1370
|
+
) : a(this.result);
|
|
1371
|
+
});
|
|
1372
|
+
})();
|
|
1195
1373
|
});
|
|
1196
1374
|
}
|
|
1197
1375
|
/** Функция для запроса списочных методов
|
|
1198
1376
|
* @param {Array} payloadList - Массив с подмассивами списочных методов
|
|
1199
1377
|
* @param {String} type - Тип обработки результатов ('count' или undefined)
|
|
1378
|
+
* @param {{oneBatch?: boolean}} [options] - Опции выполнения payload.
|
|
1200
1379
|
*/
|
|
1201
|
-
async batchPayload(
|
|
1202
|
-
const i =
|
|
1203
|
-
let
|
|
1204
|
-
this.result[
|
|
1205
|
-
let
|
|
1206
|
-
if (JSON.stringify(
|
|
1380
|
+
async batchPayload(t, e, s = {}) {
|
|
1381
|
+
const i = !!(s != null && s.oneBatch), a = (O, T, _, R) => {
|
|
1382
|
+
let N = "ID";
|
|
1383
|
+
this.result[O][this.result[O].length - 1].ID || (N = "id");
|
|
1384
|
+
let y = `${N}`;
|
|
1385
|
+
if (JSON.stringify(R[1]).toLocaleLowerCase().includes('"id":"desc"') ? y = "<" + y : y = ">" + y, T === 1 || _.length === 0)
|
|
1207
1386
|
return {
|
|
1208
|
-
field:
|
|
1209
|
-
id: this.result[
|
|
1387
|
+
field: y,
|
|
1388
|
+
id: this.result[O][this.result[O].length - 1][N]
|
|
1210
1389
|
};
|
|
1211
|
-
let
|
|
1212
|
-
const [
|
|
1213
|
-
return (
|
|
1214
|
-
field:
|
|
1215
|
-
id: `$result[${[
|
|
1390
|
+
let I = "";
|
|
1391
|
+
const [H, k] = R;
|
|
1392
|
+
return (H === "tasks.task.list" || H === "task.item.list") && (I = "[tasks]"), ["crm.item.list", "crm.stagehistory.list"].includes(H) && (I = "[items]"), H === "crm.type.list" && (I = "[types]"), H === "socialnetwork.api.workgroup.list" && (I = "[workgroups]"), {
|
|
1393
|
+
field: y,
|
|
1394
|
+
id: `$result[${[O, T - 1].join("__")}]${I}[49][${N}]`
|
|
1216
1395
|
};
|
|
1217
|
-
},
|
|
1218
|
-
const [
|
|
1219
|
-
let
|
|
1220
|
-
if (
|
|
1221
|
-
|
|
1222
|
-
const [
|
|
1223
|
-
return
|
|
1396
|
+
}, l = (O, T) => {
|
|
1397
|
+
const [_, R] = O;
|
|
1398
|
+
let N = JSON.parse(JSON.stringify(R)), y;
|
|
1399
|
+
if (_ === "task.item.list") {
|
|
1400
|
+
N = [...N];
|
|
1401
|
+
const [L, I, H, k] = N;
|
|
1402
|
+
return I[T.field] = T.id, [_, N];
|
|
1224
1403
|
}
|
|
1225
|
-
return ["user.get"].includes(
|
|
1404
|
+
return ["user.get"].includes(_) || N.FILTER ? (N.FILTER || (N.FILTER = {}), y = N.FILTER) : (N.filter || (N.filter = {}), y = N.filter), [
|
|
1226
1405
|
"socialnetwork.api.workgroup.list",
|
|
1227
1406
|
"tasks.task.list"
|
|
1228
|
-
].includes(
|
|
1229
|
-
},
|
|
1230
|
-
Object.entries(
|
|
1231
|
-
var
|
|
1232
|
-
const [
|
|
1233
|
-
if (Array.isArray(
|
|
1234
|
-
const
|
|
1235
|
-
this.errors[
|
|
1236
|
-
const F = ((M = (b = f.error()) == null ? void 0 : b.ex) == null ? void 0 : M.error) ?? "", S = i.get(m);
|
|
1237
|
-
switch (F) {
|
|
1238
|
-
case "OPERATION_TIME_LIMIT":
|
|
1239
|
-
S && (this.skipList.add(S), this.limitCall && this.limitCall(m));
|
|
1240
|
-
break;
|
|
1241
|
-
case "QUERY_LIMIT_EXCEEDED":
|
|
1242
|
-
this.canContinue = !1;
|
|
1243
|
-
break;
|
|
1244
|
-
case "ACCESS_DENIED":
|
|
1245
|
-
S && this.skipList.add(S);
|
|
1246
|
-
break;
|
|
1247
|
-
case "TIMEOUT":
|
|
1248
|
-
S && (this.skipList.add(S), this.limitCall && this.limitCall(m));
|
|
1249
|
-
break;
|
|
1250
|
-
}
|
|
1407
|
+
].includes(_) ? y[">ID"] = T.id : y[T.field] = T.id, [_, { ...N, start: -1 }];
|
|
1408
|
+
}, A = (O) => {
|
|
1409
|
+
Object.entries(O).forEach(([T, _]) => {
|
|
1410
|
+
var y, L, I, H, k;
|
|
1411
|
+
const [R] = T.split("__"), N = this.getData(_.data());
|
|
1412
|
+
if (Array.isArray(N) && (e === "count" ? this.result[R] += N.length : this.result[R].push(...N)), _.error()) {
|
|
1413
|
+
const U = (L = (y = _.error()) == null ? void 0 : y.ex) == null ? void 0 : L.error, M = (H = (I = _.error()) == null ? void 0 : I.ex) == null ? void 0 : H.error_description;
|
|
1414
|
+
this.errors[R] = U && U.trim() || M && M.trim() || ((k = _.error()) == null ? void 0 : k.toString()) || "Неизвестная ошибка";
|
|
1251
1415
|
}
|
|
1252
|
-
this.setProgressData({ key:
|
|
1416
|
+
this.setProgressData({ key: R, value: _, type: e });
|
|
1253
1417
|
});
|
|
1418
|
+
}, h = (O, T) => {
|
|
1419
|
+
if (!Array.isArray(O) || O.length === 0)
|
|
1420
|
+
return null;
|
|
1421
|
+
const _ = O[O.length - 1];
|
|
1422
|
+
let R = "ID";
|
|
1423
|
+
_.ID || (R = "id");
|
|
1424
|
+
let N = R;
|
|
1425
|
+
return JSON.stringify(T[1]).toLocaleLowerCase().includes('"id":"desc"') ? N = "<" + N : N = ">" + N, { field: N, id: _[R] };
|
|
1426
|
+
}, n = 1e4, u = async (O, T) => {
|
|
1427
|
+
var R, N;
|
|
1428
|
+
let _ = this.limit;
|
|
1429
|
+
for (let y = 1; this.canContinue && _ === this.limit && y <= n; y++) {
|
|
1430
|
+
const L = this.result[O], I = h(L, T);
|
|
1431
|
+
if (!I)
|
|
1432
|
+
break;
|
|
1433
|
+
const H = `${O}__eiscan_${y}`, k = l(T, I);
|
|
1434
|
+
let U = null;
|
|
1435
|
+
await E(this, V, At).call(this, { [H]: k }, async (d) => {
|
|
1436
|
+
U = d, A(d);
|
|
1437
|
+
});
|
|
1438
|
+
const M = y < n;
|
|
1439
|
+
await E(this, Z, at).call(this, U, M), await this.delay();
|
|
1440
|
+
const r = U == null ? void 0 : U[H];
|
|
1441
|
+
if ((R = r == null ? void 0 : r.error) != null && R.call(r)) {
|
|
1442
|
+
_ = 0;
|
|
1443
|
+
break;
|
|
1444
|
+
}
|
|
1445
|
+
const o = this.getData((N = r == null ? void 0 : r.data) == null ? void 0 : N.call(r));
|
|
1446
|
+
_ = Array.isArray(o) ? o.length : 0;
|
|
1447
|
+
}
|
|
1254
1448
|
};
|
|
1255
|
-
let
|
|
1256
|
-
|
|
1449
|
+
let m = [], c = 0;
|
|
1450
|
+
const f = async (O = !0) => m.length ? (await E(this, V, At).call(this, Object.fromEntries(m), async (T) => {
|
|
1451
|
+
A(T), await E(this, Z, at).call(this, T, O);
|
|
1452
|
+
}), c++, m = [], i && c >= 1 ? !0 : (await this.delay(), !1)) : !1;
|
|
1453
|
+
for await (const O of t) {
|
|
1257
1454
|
if (!this.canContinue)
|
|
1258
1455
|
return;
|
|
1259
|
-
const [
|
|
1260
|
-
if (
|
|
1456
|
+
const [T, _, R, N = {}] = O;
|
|
1457
|
+
if (N.entityItemGetScan) {
|
|
1458
|
+
if (await f(!0))
|
|
1459
|
+
return;
|
|
1460
|
+
if (i)
|
|
1461
|
+
continue;
|
|
1462
|
+
await u(T, _);
|
|
1261
1463
|
continue;
|
|
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(
|
|
1266
|
-
Object.fromEntries(c),
|
|
1267
|
-
(y) => {
|
|
1268
|
-
l(y);
|
|
1269
|
-
}
|
|
1270
|
-
), c = [], await this.delay()), A++;
|
|
1271
1464
|
}
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1465
|
+
let y = 1;
|
|
1466
|
+
for (; R > y * this.limit; ) {
|
|
1467
|
+
const L = [T, y].join("__"), I = a(T, y, m, _);
|
|
1468
|
+
if (m.push([L, l(_, I)]), i && m.length === 49 && await f(!0) || m.length % 50 === 0 && await f(!0))
|
|
1469
|
+
return;
|
|
1470
|
+
y++;
|
|
1277
1471
|
}
|
|
1278
|
-
|
|
1472
|
+
}
|
|
1473
|
+
await f(!1);
|
|
1279
1474
|
}
|
|
1280
1475
|
/**
|
|
1281
1476
|
* Вывод ошибок в консоль в группированном виде
|
|
1282
1477
|
*/
|
|
1283
1478
|
errorLogger() {
|
|
1284
|
-
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([
|
|
1285
|
-
e && console.log(`[${
|
|
1479
|
+
console.group(`${this.constructor.name}: Ошибки в методах!`), Object.entries(this.errors).forEach(([t, e]) => {
|
|
1480
|
+
e && console.log(`[${t}]`, e.toString());
|
|
1286
1481
|
}), console.groupEnd();
|
|
1287
1482
|
}
|
|
1288
|
-
}
|
|
1289
|
-
|
|
1290
|
-
|
|
1483
|
+
};
|
|
1484
|
+
yt = new WeakSet(), Jt = function() {
|
|
1485
|
+
const t = this.totalBatchCommands || 0, e = this.batchCommandMethods;
|
|
1486
|
+
if (t < S(j, pt) || !Array.isArray(e) || e.length !== t)
|
|
1487
|
+
return !1;
|
|
1488
|
+
if (e.filter((a) => a === "crm.deal.list").length >= S(j, Nt))
|
|
1489
|
+
return !0;
|
|
1490
|
+
const i = e.filter(
|
|
1491
|
+
(a) => typeof a == "string" && a.includes(".list")
|
|
1492
|
+
).length;
|
|
1493
|
+
return i >= S(j, Ot) && i / t >= S(j, _t);
|
|
1494
|
+
}, pt = new WeakMap(), Nt = new WeakMap(), Ot = new WeakMap(), _t = new WeakMap(), it = new WeakSet(), gt = function() {
|
|
1495
|
+
if (!this.progressCall || !this.progressData)
|
|
1496
|
+
return;
|
|
1497
|
+
const { percent: t, allCount: e, allTotal: s } = this.progressPercent, i = { percent: t, allCount: e, allTotal: s };
|
|
1498
|
+
E(this, Tt, jt).call(this, i) && (this.progressCall({
|
|
1499
|
+
data: this.progressData,
|
|
1500
|
+
percent: t,
|
|
1501
|
+
allCount: e,
|
|
1502
|
+
allTotal: s
|
|
1503
|
+
}), this.lastProgressSnapshot = i);
|
|
1504
|
+
}, Tt = new WeakSet(), jt = function(t) {
|
|
1505
|
+
return this.lastProgressSnapshot ? this.lastProgressSnapshot.percent !== t.percent || this.lastProgressSnapshot.allCount !== t.allCount || this.lastProgressSnapshot.allTotal !== t.allTotal : !0;
|
|
1506
|
+
}, Et = new WeakSet(), Kt = function() {
|
|
1507
|
+
const t = {
|
|
1508
|
+
limit: this.timeLimit.limit,
|
|
1509
|
+
date: this.timeLimit.date,
|
|
1510
|
+
pauseMs: this.timeLimit.pauseMs
|
|
1511
|
+
};
|
|
1512
|
+
for (const e of this.timeLimitListeners)
|
|
1513
|
+
try {
|
|
1514
|
+
e(t);
|
|
1515
|
+
} catch (s) {
|
|
1516
|
+
console.warn("Batch timeLimit listener error:", s);
|
|
1517
|
+
}
|
|
1518
|
+
}, Q = new WeakSet(), st = async function(t = this.defaultPauseMs) {
|
|
1519
|
+
this.setTimeLimitState(!0, (/* @__PURE__ */ new Date()).toISOString(), t), await new Promise((e) => setTimeout(e, t)), this.setTimeLimitState(!1, void 0);
|
|
1520
|
+
}, Z = new WeakSet(), at = async function(t, e = !0) {
|
|
1521
|
+
if (!e)
|
|
1522
|
+
return 0;
|
|
1523
|
+
let s = 0;
|
|
1524
|
+
if (!t || typeof t != "object")
|
|
1525
|
+
return 0;
|
|
1526
|
+
for (const i of Object.values(t))
|
|
1527
|
+
if (!(!i || typeof i != "object"))
|
|
1528
|
+
try {
|
|
1529
|
+
if (typeof i.time == "function") {
|
|
1530
|
+
const a = i.time();
|
|
1531
|
+
a && typeof a.operating == "number" && (s = Math.max(s, a.operating));
|
|
1532
|
+
}
|
|
1533
|
+
} catch {
|
|
1534
|
+
}
|
|
1535
|
+
s >= this.operatingThreshold && await E(this, Q, st).call(this);
|
|
1536
|
+
}, V = new WeakSet(), At = async function(t, e) {
|
|
1537
|
+
let s = !1, i = t;
|
|
1538
|
+
do
|
|
1539
|
+
s = !1, await this.callBatchWithTimeout(i, async (a) => {
|
|
1540
|
+
var h, n;
|
|
1541
|
+
let l = !1;
|
|
1542
|
+
const A = /* @__PURE__ */ new Set();
|
|
1543
|
+
for (const [u, m] of Object.entries(a || {})) {
|
|
1544
|
+
if (!(m != null && m.error) || !m.error())
|
|
1545
|
+
continue;
|
|
1546
|
+
const c = ((n = (h = m.error()) == null ? void 0 : h.ex) == null ? void 0 : n.error) ?? "";
|
|
1547
|
+
if (c === "TIMEOUT") {
|
|
1548
|
+
l = !0;
|
|
1549
|
+
break;
|
|
1550
|
+
}
|
|
1551
|
+
["QUERY_LIMIT_EXCEEDED", "OPERATION_TIME_LIMIT"].includes(c) && A.add(u);
|
|
1552
|
+
}
|
|
1553
|
+
if (l) {
|
|
1554
|
+
s = !0, await E(this, Q, st).call(this);
|
|
1555
|
+
return;
|
|
1556
|
+
}
|
|
1557
|
+
if (A.size > 0) {
|
|
1558
|
+
const u = {};
|
|
1559
|
+
for (const [c, f] of Object.entries(a || {}))
|
|
1560
|
+
A.has(c) || (u[c] = f);
|
|
1561
|
+
Object.keys(u).length && await e(u);
|
|
1562
|
+
const m = {};
|
|
1563
|
+
for (const c of A)
|
|
1564
|
+
i[c] && (m[c] = i[c]);
|
|
1565
|
+
i = m, Object.keys(i).length && (s = !0, await E(this, Q, st).call(this));
|
|
1566
|
+
return;
|
|
1567
|
+
}
|
|
1568
|
+
await e(a);
|
|
1569
|
+
});
|
|
1570
|
+
while (s);
|
|
1571
|
+
}, Lt = new WeakSet(), vt = function(t, e) {
|
|
1572
|
+
return new Promise((s) => {
|
|
1573
|
+
if (typeof this.callMethod != "function") {
|
|
1574
|
+
s(null);
|
|
1575
|
+
return;
|
|
1576
|
+
}
|
|
1577
|
+
let i = !1;
|
|
1578
|
+
const a = setTimeout(() => {
|
|
1579
|
+
i || (i = !0, s(null));
|
|
1580
|
+
}, this.requestTimeoutMs);
|
|
1581
|
+
try {
|
|
1582
|
+
this.callMethod(t, e, (l) => {
|
|
1583
|
+
i || (i = !0, clearTimeout(a), s(l));
|
|
1584
|
+
});
|
|
1585
|
+
} catch {
|
|
1586
|
+
i || (i = !0, clearTimeout(a), s(null));
|
|
1587
|
+
}
|
|
1588
|
+
});
|
|
1589
|
+
}, lt = new WeakSet(), Ut = function(t) {
|
|
1590
|
+
this.clearProgressData(), this.progressCall = typeof t == "function" ? t : "", this.canContinue = !0, this.result = {}, this.errors = {}, this.chunkRate = 1, this.totalProgress = 0, this.batchCommandKeyOrder = [], this.totalBatchCommands = 0, this.batchCommandMethods = [], this.setTimeLimitState(!1, void 0);
|
|
1591
|
+
}, /** Не включать вес по командам для совсем маленьких batch. */
|
|
1592
|
+
D(j, pt, 5), /** Явный сигнал: много отдельных выборок сделок по фильтрам. */
|
|
1593
|
+
D(j, Nt, 5), /** Достаточно «list»-методов в пачке и доля list от всех команд. */
|
|
1594
|
+
D(j, Ot, 8), D(j, _t, 0.65);
|
|
1595
|
+
let v = j;
|
|
1596
|
+
var $;
|
|
1597
|
+
class zt {
|
|
1291
1598
|
constructor() {
|
|
1292
|
-
|
|
1599
|
+
D(this, $, {});
|
|
1293
1600
|
}
|
|
1294
1601
|
/**
|
|
1295
1602
|
* Получить случайный хеш-код длиной 8 символов
|
|
@@ -1303,12 +1610,12 @@ class mt {
|
|
|
1303
1610
|
* @param {number} length - Длина генерируемого хеша
|
|
1304
1611
|
* @returns {string}
|
|
1305
1612
|
*/
|
|
1306
|
-
createHash(
|
|
1307
|
-
let e = "abcdefghijklmnopqrstuvwxyz0123456789",
|
|
1308
|
-
|
|
1309
|
-
for (let
|
|
1310
|
-
|
|
1311
|
-
return
|
|
1613
|
+
createHash(t) {
|
|
1614
|
+
let e = "abcdefghijklmnopqrstuvwxyz0123456789", s = "";
|
|
1615
|
+
t = t || 6;
|
|
1616
|
+
for (let i = 0; i < t; i++)
|
|
1617
|
+
s += e.charAt(Math.floor(Math.random() * e.length));
|
|
1618
|
+
return s;
|
|
1312
1619
|
}
|
|
1313
1620
|
/**
|
|
1314
1621
|
* Фильтр часто запускаемых действий (debounce)
|
|
@@ -1317,9 +1624,9 @@ class mt {
|
|
|
1317
1624
|
* @param {number} params.duration - Задержка в миллисекундах (по умолчанию 10)
|
|
1318
1625
|
* @param {Function} params.action - Функция для выполнения
|
|
1319
1626
|
*/
|
|
1320
|
-
actionFilter({ keyTimer:
|
|
1321
|
-
|
|
1322
|
-
|
|
1627
|
+
actionFilter({ keyTimer: t, duration: e = 10, action: s }) {
|
|
1628
|
+
S(this, $)[t] && (clearTimeout(S(this, $)[t]), S(this, $)[t] = null), s && (S(this, $)[t] = setTimeout(() => {
|
|
1629
|
+
s();
|
|
1323
1630
|
}, e));
|
|
1324
1631
|
}
|
|
1325
1632
|
/**
|
|
@@ -1327,88 +1634,88 @@ class mt {
|
|
|
1327
1634
|
* Создает невидимое видео, которое циклически воспроизводится
|
|
1328
1635
|
*/
|
|
1329
1636
|
async noSleep() {
|
|
1330
|
-
let
|
|
1331
|
-
|
|
1332
|
-
|
|
1637
|
+
let t = document.createElement("video");
|
|
1638
|
+
t.classList.add("no-sleep"), t.muted = !0, t.autoplay = !0, t.setAttribute("playsinline", ""), t.addEventListener("loadeddata", () => {
|
|
1639
|
+
t.style.position = "fixed", t.style.left = "-9999px", document.querySelector("body").append(t), t.play().catch((e) => {
|
|
1333
1640
|
console.warn("noSleep: autoplay prevented", e);
|
|
1334
1641
|
});
|
|
1335
|
-
}),
|
|
1642
|
+
}), t.addEventListener("ended", () => {
|
|
1336
1643
|
this.actionFilter({
|
|
1337
1644
|
keyTimer: "no-sleep",
|
|
1338
1645
|
duration: 5e3,
|
|
1339
1646
|
action: () => {
|
|
1340
|
-
|
|
1647
|
+
t.play().catch((e) => {
|
|
1341
1648
|
console.warn("noSleep: replay prevented", e);
|
|
1342
1649
|
});
|
|
1343
1650
|
}
|
|
1344
1651
|
});
|
|
1345
|
-
}),
|
|
1652
|
+
}), t.src = "data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAP5tZGF0AAAAAQYAAADlZYiEE28FmH9jNWDBjI+Z/1tIBZsjfhbmcNNUpBFej0U3p+zhaJ3eemJRL2LUMa5tkidy6bp+eatLE3jBIY864TvaAmqEFCgLMTCwVbem1n3myAw9yDXQdR5HfU/8iYf+eneVnRf7Qx9M70XDUuPx1MJX671XJwAE0VAMpnhbcUDx0pTldvUX9KQPhkZNH3eyZHmObkAeyEJ2tl+BEBJIGc90BiqKL60+5EA6fXB6iG5UU/M5KsW8BNAAUw5CbRJIqohNk10fwKbUXwya03rqGkE8+wuYGtEbrVYXb+iOl1mHHVPLYQbIAAcGyAAHAAAFNG1vb3YAAABsbXZoZAAAAAAAAAAAAAAAAAAAA+gAAAAvAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAIldHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAFAAAAA8AAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAAAAAAAAAAAQAAAAABnW1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAAQAAAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAUhtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEIc3RibAAAAKRzdHNkAAAAAAAAAAEAAACUYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAPAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAC5hdmNDAU1AC//hABZnTUAL2wUH7ARAAAADAEAAAAQDxQq4AQAFaOrAZXIAAAAQcGFzcAAAAAEAAAABAAAAGHN0dHMAAAAAAAAAAQAAAAEAAAAAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAABRzdHN6AAAAAAAAAO4AAAABAAAAFHN0Y28AAAAAAAAAAQAAADAAAAIadHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAgAAAAAAAAAvAAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAALwAAAAAAAQAAAAABkm1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAArEQAAAgAVcQAAAAAAC1oZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU291bmRIYW5kbGVyAAAAAT1taW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAQFzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAAC7gAAAAViBYCAgAISCAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAAACAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAgAAAAEAAAAUc3RzegAAAAAAAAAEAAAAAgAAABRzdGNvAAAAAAAAAAEAAAEeAAAAGnNncGQBAAAAcm9sbAAAAAIAAAAB//8AAAAcc2JncAAAAAByb2xsAAAAAQAAAAIAAAABAAAAgXVkdGEAAAB5bWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWR0YQAAAAAAAAAAAAAAAAAAAAAfa2V5cwAAAAAAAAABAAAAD21kdGFlbmNvZGVyAAAALWlsc3QAAAAlAAAAAQAAAB1kYXRhAAAAAQAAAABMYXZmNTguMTIuMTAw";
|
|
1346
1653
|
}
|
|
1347
1654
|
/**
|
|
1348
1655
|
* Скачать данные в JSON-файл
|
|
1349
1656
|
* @param {any} data - Данные для сохранения
|
|
1350
1657
|
* @param {string} filename - Имя файла без расширения
|
|
1351
1658
|
*/
|
|
1352
|
-
downloadFileJson(
|
|
1353
|
-
let
|
|
1354
|
-
|
|
1355
|
-
document.body.removeChild(
|
|
1659
|
+
downloadFileJson(t, e) {
|
|
1660
|
+
let s = new Blob([JSON.stringify(t)], { type: "application/json" }), i = URL.createObjectURL(s), a = document.createElement("a");
|
|
1661
|
+
a.style.display = "none", a.href = i, a.download = `${e}.json`, document.body.appendChild(a), a.click(), setTimeout(() => {
|
|
1662
|
+
document.body.removeChild(a), URL.revokeObjectURL(i);
|
|
1356
1663
|
}, 200);
|
|
1357
1664
|
}
|
|
1358
1665
|
}
|
|
1359
|
-
|
|
1360
|
-
const
|
|
1361
|
-
var
|
|
1362
|
-
class
|
|
1666
|
+
$ = new WeakMap();
|
|
1667
|
+
const Bt = new zt();
|
|
1668
|
+
var K, q, tt, nt, F, et, ot, Rt, Qt, ht, Yt, bt, qt, St, Zt, It, Vt;
|
|
1669
|
+
class ce {
|
|
1363
1670
|
constructor() {
|
|
1364
|
-
|
|
1671
|
+
D(this, Rt);
|
|
1365
1672
|
/** Вывод ошибок логера
|
|
1366
1673
|
* @param {'entity'} type - тип ошибки
|
|
1367
1674
|
*/
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1675
|
+
D(this, ht);
|
|
1676
|
+
D(this, bt);
|
|
1677
|
+
D(this, St);
|
|
1678
|
+
D(this, It);
|
|
1679
|
+
D(this, K, "logger");
|
|
1680
|
+
D(this, q, !1);
|
|
1681
|
+
D(this, tt, /* @__PURE__ */ new Map());
|
|
1682
|
+
D(this, nt, {});
|
|
1683
|
+
D(this, F, null);
|
|
1684
|
+
D(this, et, !1);
|
|
1685
|
+
D(this, ot, !1);
|
|
1379
1686
|
/** Очистка хранилища элементов старше 'N' месяцев */
|
|
1380
|
-
|
|
1381
|
-
|
|
1687
|
+
C(this, "periodClear", 3);
|
|
1688
|
+
E(this, Rt, Qt).call(this);
|
|
1382
1689
|
}
|
|
1383
1690
|
/** Инициализация логера */
|
|
1384
1691
|
async init() {
|
|
1385
1692
|
try {
|
|
1386
|
-
let
|
|
1693
|
+
let t = new v(BX24.callBatch), { entityList: e } = await t.batch({
|
|
1387
1694
|
entityList: { method: "entity.get" }
|
|
1388
1695
|
});
|
|
1389
1696
|
if (e && Array.isArray(e))
|
|
1390
1697
|
if (e.find(
|
|
1391
|
-
(
|
|
1698
|
+
(i) => i.ENTITY == S(this, K)
|
|
1392
1699
|
))
|
|
1393
|
-
|
|
1700
|
+
J(this, q, !0);
|
|
1394
1701
|
else {
|
|
1395
|
-
let { entityAdd:
|
|
1702
|
+
let { entityAdd: i } = await t.batch({
|
|
1396
1703
|
entityAdd: {
|
|
1397
1704
|
method: "entity.add",
|
|
1398
1705
|
params: {
|
|
1399
|
-
ENTITY:
|
|
1400
|
-
NAME:
|
|
1706
|
+
ENTITY: S(this, K),
|
|
1707
|
+
NAME: S(this, K),
|
|
1401
1708
|
ACCESS: { AU: "X" }
|
|
1402
1709
|
}
|
|
1403
1710
|
}
|
|
1404
1711
|
});
|
|
1405
|
-
|
|
1712
|
+
i && J(this, q, !0);
|
|
1406
1713
|
}
|
|
1407
|
-
return
|
|
1408
|
-
console.error("Ошибка при проверке периода очистки:",
|
|
1409
|
-
}),
|
|
1410
|
-
} catch (
|
|
1411
|
-
return console.error("Ошибка при инициализации логера:",
|
|
1714
|
+
return E(this, St, Zt).call(this).catch((s) => {
|
|
1715
|
+
console.error("Ошибка при проверке периода очистки:", s);
|
|
1716
|
+
}), S(this, q);
|
|
1717
|
+
} catch (t) {
|
|
1718
|
+
return console.error("Ошибка при инициализации логера:", t), !1;
|
|
1412
1719
|
}
|
|
1413
1720
|
}
|
|
1414
1721
|
/**
|
|
@@ -1420,21 +1727,21 @@ class bt {
|
|
|
1420
1727
|
* }; }}
|
|
1421
1728
|
* @returns {string|null}
|
|
1422
1729
|
*/
|
|
1423
|
-
start({ type:
|
|
1424
|
-
if (!
|
|
1425
|
-
return
|
|
1426
|
-
if (!
|
|
1427
|
-
return console.error("Невалидные данные для логирования:", { type:
|
|
1428
|
-
const
|
|
1429
|
-
type:
|
|
1730
|
+
start({ type: t, data: e }) {
|
|
1731
|
+
if (!S(this, q))
|
|
1732
|
+
return E(this, ht, Yt).call(this, "entity"), null;
|
|
1733
|
+
if (!t || !e)
|
|
1734
|
+
return console.error("Невалидные данные для логирования:", { type: t, data: e }), null;
|
|
1735
|
+
const s = Bt.hash, i = {
|
|
1736
|
+
type: t,
|
|
1430
1737
|
data: e,
|
|
1431
|
-
userInfo:
|
|
1738
|
+
userInfo: S(this, nt),
|
|
1432
1739
|
errorList: {},
|
|
1433
1740
|
status: "",
|
|
1434
1741
|
answer: null,
|
|
1435
1742
|
date: (/* @__PURE__ */ new Date()).getTime()
|
|
1436
1743
|
};
|
|
1437
|
-
return
|
|
1744
|
+
return S(this, tt).set(s, i), J(this, ot, !0), s;
|
|
1438
1745
|
}
|
|
1439
1746
|
/**
|
|
1440
1747
|
* @param {{
|
|
@@ -1443,182 +1750,217 @@ class bt {
|
|
|
1443
1750
|
* status: 'success'|'fail'|'fail-runtime',
|
|
1444
1751
|
* answer: { [key]: unknown } }}
|
|
1445
1752
|
*/
|
|
1446
|
-
async stop({ key:
|
|
1753
|
+
async stop({ key: t, errorList: e, status: s, answer: i }) {
|
|
1447
1754
|
var l;
|
|
1448
|
-
if (!
|
|
1755
|
+
if (!S(this, ot))
|
|
1449
1756
|
return;
|
|
1450
|
-
if (!
|
|
1451
|
-
|
|
1757
|
+
if (!S(this, q)) {
|
|
1758
|
+
E(this, ht, Yt).call(this, "entity");
|
|
1452
1759
|
return;
|
|
1453
1760
|
}
|
|
1454
|
-
let
|
|
1455
|
-
if (!
|
|
1456
|
-
console.error(`Не найдены данные логирования для ключа: ${
|
|
1761
|
+
let a = S(this, tt).get(t);
|
|
1762
|
+
if (!a) {
|
|
1763
|
+
console.error(`Не найдены данные логирования для ключа: ${t}`);
|
|
1457
1764
|
return;
|
|
1458
1765
|
}
|
|
1459
|
-
e && (
|
|
1766
|
+
e && (a.errorList = e), s && (a.status = s), i && (a.answer = i), await E(this, bt, qt).call(this), (l = a == null ? void 0 : a.data) != null && l.updateList && J(this, et, !0), J(this, ot, !1);
|
|
1460
1767
|
}
|
|
1461
1768
|
/**
|
|
1462
1769
|
* @param { ({percent}:{percent:number})=>{} } progressCall - коллбэк
|
|
1463
1770
|
*/
|
|
1464
|
-
async getEntityList(
|
|
1771
|
+
async getEntityList(t) {
|
|
1465
1772
|
var e;
|
|
1466
1773
|
try {
|
|
1467
|
-
if ((e =
|
|
1468
|
-
return
|
|
1469
|
-
let
|
|
1774
|
+
if ((e = S(this, F)) != null && e.length && !S(this, et))
|
|
1775
|
+
return S(this, F);
|
|
1776
|
+
let s = new v(BX24.callBatch), { entityList: i } = await s.batch(
|
|
1470
1777
|
{
|
|
1471
1778
|
entityList: {
|
|
1472
1779
|
method: "entity.item.get",
|
|
1473
1780
|
params: {
|
|
1474
|
-
ENTITY:
|
|
1781
|
+
ENTITY: S(this, K),
|
|
1475
1782
|
SORT: { ID: "DESC" }
|
|
1476
1783
|
}
|
|
1477
1784
|
}
|
|
1478
1785
|
},
|
|
1479
|
-
|
|
1786
|
+
t
|
|
1480
1787
|
);
|
|
1481
|
-
return !
|
|
1788
|
+
return !i || !Array.isArray(i) ? (console.warn("Получен невалидный список записей"), []) : (i = i.map((a) => {
|
|
1482
1789
|
try {
|
|
1483
|
-
const { ID: l, DATE_CREATE:
|
|
1790
|
+
const { ID: l, DATE_CREATE: A, DETAIL_TEXT: h } = a;
|
|
1484
1791
|
return {
|
|
1485
1792
|
...JSON.parse(h),
|
|
1486
1793
|
id: l,
|
|
1487
|
-
dateCreate:
|
|
1794
|
+
dateCreate: A
|
|
1488
1795
|
};
|
|
1489
1796
|
} catch (l) {
|
|
1490
1797
|
return console.error(
|
|
1491
|
-
`Ошибка парсинга записи ${
|
|
1798
|
+
`Ошибка парсинга записи ${a.ID}:`,
|
|
1492
1799
|
l
|
|
1493
1800
|
), null;
|
|
1494
1801
|
}
|
|
1495
|
-
}).filter((
|
|
1496
|
-
} catch (
|
|
1497
|
-
return console.error("Ошибка при получении списка записей:",
|
|
1802
|
+
}).filter((a) => a !== null), J(this, et, !1), J(this, F, i), i);
|
|
1803
|
+
} catch (s) {
|
|
1804
|
+
return console.error("Ошибка при получении списка записей:", s), [];
|
|
1498
1805
|
}
|
|
1499
1806
|
}
|
|
1500
1807
|
/** Выгрузка всех данных из хранилища в JSON-файл */
|
|
1501
1808
|
async downAllEntityJson() {
|
|
1502
1809
|
try {
|
|
1503
|
-
if (
|
|
1810
|
+
if (S(this, F) || await this.getEntityList(), !S(this, F) || S(this, F).length === 0)
|
|
1504
1811
|
return console.warn("Нет данных для выгрузки"), !1;
|
|
1505
|
-
let
|
|
1506
|
-
return
|
|
1507
|
-
|
|
1508
|
-
`sdklogger-entity-data__${
|
|
1812
|
+
let t = dt().format("%Y-%m-%d");
|
|
1813
|
+
return Bt.downloadFileJson(
|
|
1814
|
+
S(this, F),
|
|
1815
|
+
`sdklogger-entity-data__${t}`
|
|
1509
1816
|
), !0;
|
|
1510
|
-
} catch (
|
|
1511
|
-
return console.error("Ошибка при выгрузке данных в JSON:",
|
|
1817
|
+
} catch (t) {
|
|
1818
|
+
return console.error("Ошибка при выгрузке данных в JSON:", t), !1;
|
|
1512
1819
|
}
|
|
1513
1820
|
}
|
|
1514
1821
|
}
|
|
1515
|
-
|
|
1822
|
+
K = new WeakMap(), q = new WeakMap(), tt = new WeakMap(), nt = new WeakMap(), F = new WeakMap(), et = new WeakMap(), ot = new WeakMap(), Rt = new WeakSet(), Qt = async function() {
|
|
1516
1823
|
try {
|
|
1517
|
-
const
|
|
1824
|
+
const t = new v(BX24.callBatch), e = BX24.isAdmin(), { curUser: s } = await t.batch({
|
|
1518
1825
|
curUser: { method: "user.current" }
|
|
1519
1826
|
});
|
|
1520
|
-
|
|
1521
|
-
} catch (
|
|
1827
|
+
J(this, nt, { isAdmin: e, curUser: s });
|
|
1828
|
+
} catch (t) {
|
|
1522
1829
|
console.error(
|
|
1523
1830
|
"Ошибка при получении информации о пользователе:",
|
|
1524
|
-
|
|
1525
|
-
),
|
|
1831
|
+
t
|
|
1832
|
+
), J(this, nt, { isAdmin: !1, curUser: null });
|
|
1526
1833
|
}
|
|
1527
|
-
},
|
|
1528
|
-
|
|
1834
|
+
}, ht = new WeakSet(), Yt = function(t) {
|
|
1835
|
+
t == "entity" && Bt.actionFilter({
|
|
1529
1836
|
keyTimer: "error.logger.entity",
|
|
1530
1837
|
duration: 500,
|
|
1531
1838
|
action: () => {
|
|
1532
1839
|
console.error("Хранилище для логгера не инициализировано");
|
|
1533
1840
|
}
|
|
1534
1841
|
});
|
|
1535
|
-
},
|
|
1842
|
+
}, bt = new WeakSet(), qt = async function() {
|
|
1536
1843
|
try {
|
|
1537
|
-
let
|
|
1538
|
-
for (let [
|
|
1539
|
-
if (
|
|
1540
|
-
const
|
|
1541
|
-
|
|
1844
|
+
let t = {}, e = new v(BX24.callBatch);
|
|
1845
|
+
for (let [s, i] of S(this, tt).entries())
|
|
1846
|
+
if (i.status) {
|
|
1847
|
+
const a = JSON.stringify(i);
|
|
1848
|
+
t[s] = {
|
|
1542
1849
|
method: "entity.item.add",
|
|
1543
1850
|
params: {
|
|
1544
|
-
ENTITY:
|
|
1545
|
-
NAME:
|
|
1546
|
-
DETAIL_TEXT:
|
|
1851
|
+
ENTITY: S(this, K),
|
|
1852
|
+
NAME: S(this, K),
|
|
1853
|
+
DETAIL_TEXT: a
|
|
1547
1854
|
}
|
|
1548
1855
|
};
|
|
1549
1856
|
}
|
|
1550
|
-
if (Object.keys(
|
|
1551
|
-
let
|
|
1552
|
-
for (let [
|
|
1553
|
-
|
|
1857
|
+
if (Object.keys(t).length) {
|
|
1858
|
+
let s = await e.batch(t), { errors: i } = e;
|
|
1859
|
+
for (let [a, l] of Object.entries({ ...s, ...i }))
|
|
1860
|
+
S(this, tt).delete(a);
|
|
1554
1861
|
return !0;
|
|
1555
1862
|
}
|
|
1556
1863
|
return !1;
|
|
1557
|
-
} catch (
|
|
1558
|
-
return console.error("Ошибка при добавлении записей в хранилище:",
|
|
1864
|
+
} catch (t) {
|
|
1865
|
+
return console.error("Ошибка при добавлении записей в хранилище:", t), !1;
|
|
1559
1866
|
}
|
|
1560
|
-
},
|
|
1867
|
+
}, St = new WeakSet(), Zt = async function() {
|
|
1561
1868
|
try {
|
|
1562
|
-
let
|
|
1869
|
+
let t = new v(BX24.callBatch), { serverTime: e } = await t.batch({
|
|
1563
1870
|
serverTime: { method: "server.time" }
|
|
1564
1871
|
});
|
|
1565
1872
|
if (!e) {
|
|
1566
1873
|
console.error("Не удалось получить время сервера");
|
|
1567
1874
|
return;
|
|
1568
1875
|
}
|
|
1569
|
-
if (
|
|
1876
|
+
if (S(this, F) || await this.getEntityList(), !S(this, F) || S(this, F).length === 0)
|
|
1570
1877
|
return;
|
|
1571
|
-
let
|
|
1878
|
+
let s = S(this, F).filter((i) => {
|
|
1572
1879
|
try {
|
|
1573
|
-
let { dateCreate:
|
|
1574
|
-
return
|
|
1575
|
-
|
|
1880
|
+
let { dateCreate: a } = i;
|
|
1881
|
+
return a ? dt(new Date(a)).between(
|
|
1882
|
+
dt(new Date(e)),
|
|
1576
1883
|
"month"
|
|
1577
1884
|
) >= this.periodClear : !1;
|
|
1578
|
-
} catch (
|
|
1579
|
-
return console.error("Ошибка при проверке даты записи:",
|
|
1885
|
+
} catch (a) {
|
|
1886
|
+
return console.error("Ошибка при проверке даты записи:", a), !1;
|
|
1580
1887
|
}
|
|
1581
1888
|
});
|
|
1582
|
-
|
|
1583
|
-
`Найдено ${
|
|
1584
|
-
), await
|
|
1585
|
-
} catch (
|
|
1586
|
-
console.error("Ошибка при проверке периода очистки:",
|
|
1889
|
+
s.length > 0 && (console.log(
|
|
1890
|
+
`Найдено ${s.length} записей для очистки (старше ${this.periodClear} месяцев)`
|
|
1891
|
+
), await E(this, It, Vt).call(this, s));
|
|
1892
|
+
} catch (t) {
|
|
1893
|
+
console.error("Ошибка при проверке периода очистки:", t);
|
|
1587
1894
|
}
|
|
1588
|
-
},
|
|
1895
|
+
}, It = new WeakSet(), Vt = async function(t) {
|
|
1589
1896
|
try {
|
|
1590
|
-
if (!
|
|
1897
|
+
if (!t || t.length === 0)
|
|
1591
1898
|
return !1;
|
|
1592
|
-
let e = new
|
|
1593
|
-
let { id: l } =
|
|
1899
|
+
let e = new v(BX24.callBatch), s = t.filter((a) => a && a.id).map((a) => {
|
|
1900
|
+
let { id: l } = a;
|
|
1594
1901
|
return {
|
|
1595
1902
|
method: "entity.item.delete",
|
|
1596
1903
|
params: {
|
|
1597
|
-
ENTITY:
|
|
1904
|
+
ENTITY: S(this, K),
|
|
1598
1905
|
ID: l
|
|
1599
1906
|
}
|
|
1600
1907
|
};
|
|
1601
1908
|
});
|
|
1602
|
-
if (
|
|
1909
|
+
if (s.length === 0)
|
|
1603
1910
|
return !1;
|
|
1604
|
-
const
|
|
1605
|
-
return console.log(`Успешно удалено ${
|
|
1911
|
+
const i = await e.batch(s);
|
|
1912
|
+
return console.log(`Успешно удалено ${s.length} записей`), J(this, et, !0), i;
|
|
1606
1913
|
} catch (e) {
|
|
1607
1914
|
return console.error("Ошибка при очистке устаревших записей:", e), !1;
|
|
1608
1915
|
}
|
|
1609
1916
|
};
|
|
1610
|
-
|
|
1611
|
-
|
|
1917
|
+
function Ft(p) {
|
|
1918
|
+
if (!p || typeof p != "string")
|
|
1919
|
+
return "";
|
|
1920
|
+
try {
|
|
1921
|
+
const t = new URL(p);
|
|
1922
|
+
t.search = "", t.hash = "";
|
|
1923
|
+
let e = t.toString();
|
|
1924
|
+
return e.endsWith("/") && t.pathname !== "/" && (e = e.slice(0, -1)), e;
|
|
1925
|
+
} catch {
|
|
1926
|
+
return p.split("?")[0].split("#")[0].replace(/\/$/, "");
|
|
1927
|
+
}
|
|
1928
|
+
}
|
|
1929
|
+
function $t(p) {
|
|
1930
|
+
return !p || typeof p != "string" ? !1 : p.toLowerCase().includes("/marketplace/app");
|
|
1931
|
+
}
|
|
1932
|
+
function le() {
|
|
1933
|
+
var t;
|
|
1934
|
+
if (typeof window > "u" || !((t = window.location) != null && t.href))
|
|
1935
|
+
return "";
|
|
1936
|
+
const p = Ft(window.location.href);
|
|
1937
|
+
return $t(p) ? "" : p;
|
|
1938
|
+
}
|
|
1939
|
+
function Gt(p) {
|
|
1940
|
+
if (!(p != null && p.appConst) || typeof p.appConst != "object")
|
|
1941
|
+
return "";
|
|
1942
|
+
const t = le();
|
|
1943
|
+
return t ? (p.appConst.pathApp = t, t) : Ft(p.appConst.pathApp ?? "");
|
|
1944
|
+
}
|
|
1945
|
+
var rt, ct, Mt, te, Dt, ee, ut, Pt, ft, Wt, kt, re;
|
|
1946
|
+
class ge {
|
|
1612
1947
|
/**
|
|
1613
1948
|
* @param {Object} appConst - Константы приложения
|
|
1614
1949
|
* @param {string} appConst.appName - Название приложения
|
|
1615
1950
|
* @param {string} appConst.pathApp - Путь к приложению
|
|
1616
1951
|
*/
|
|
1617
|
-
constructor(
|
|
1952
|
+
constructor(t) {
|
|
1953
|
+
/**
|
|
1954
|
+
* Returns shared Batch instance for all batch operations.
|
|
1955
|
+
* Keeps a single stateful Batch (including timeLimit) within current BxBoot lifecycle.
|
|
1956
|
+
*
|
|
1957
|
+
* @returns {Batch} Shared Batch instance.
|
|
1958
|
+
*/
|
|
1959
|
+
D(this, rt);
|
|
1618
1960
|
/** Запрос данных о приложении */
|
|
1619
|
-
|
|
1961
|
+
D(this, Mt);
|
|
1620
1962
|
/** Запрос данных о текущем пользователе */
|
|
1621
|
-
|
|
1963
|
+
D(this, Dt);
|
|
1622
1964
|
/**
|
|
1623
1965
|
* Расширяет errorList для случаев TIMEOUT и LIMIT
|
|
1624
1966
|
* Если есть ошибки TIMEOUT или LIMIT, добавляет все необработанные сущности из commandList
|
|
@@ -1628,16 +1970,41 @@ class It {
|
|
|
1628
1970
|
* @param {Array} updateList - Список обновлений для логирования (опционально)
|
|
1629
1971
|
* @returns {Object} Расширенный список ошибок
|
|
1630
1972
|
*/
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1973
|
+
D(this, ut);
|
|
1974
|
+
/**
|
|
1975
|
+
* Нормализует входные данные в массив объектов {placement, handler?}
|
|
1976
|
+
* @private
|
|
1977
|
+
*/
|
|
1978
|
+
D(this, ft);
|
|
1979
|
+
/**
|
|
1980
|
+
* Находит встройки с устаревшим handler (не содержащим текущий pathApp)
|
|
1981
|
+
* @private
|
|
1982
|
+
*/
|
|
1983
|
+
D(this, kt);
|
|
1984
|
+
C(this, "domain", "");
|
|
1985
|
+
C(this, "isAdmin", !1);
|
|
1986
|
+
C(this, "appInfo", null);
|
|
1987
|
+
C(this, "appConst", null);
|
|
1988
|
+
C(this, "userInfo", null);
|
|
1989
|
+
C(this, "placeData", null);
|
|
1990
|
+
C(this, "placeInfo", null);
|
|
1991
|
+
C(this, "logger", !1);
|
|
1992
|
+
C(this, "timeLimit", {
|
|
1993
|
+
limit: !1,
|
|
1994
|
+
date: void 0,
|
|
1995
|
+
pauseMs: void 0
|
|
1996
|
+
});
|
|
1997
|
+
C(this, "batchClient", null);
|
|
1998
|
+
this.appConst = t;
|
|
1999
|
+
}
|
|
2000
|
+
/**
|
|
2001
|
+
* Подписывает внешний код на изменения состояния timeLimit в Batch.
|
|
2002
|
+
*
|
|
2003
|
+
* @param {(state: {limit: boolean, date?: string, pauseMs?: number}) => void} callback - Обработчик состояния лимита.
|
|
2004
|
+
* @returns {() => void} Функция отписки.
|
|
2005
|
+
*/
|
|
2006
|
+
subscribeTimeLimit(t) {
|
|
2007
|
+
return E(this, rt, ct).call(this).subscribeTimeLimit(t);
|
|
1641
2008
|
}
|
|
1642
2009
|
/**
|
|
1643
2010
|
* Инициализация Bitrix24 SDK
|
|
@@ -1645,10 +2012,10 @@ class It {
|
|
|
1645
2012
|
* @throws {Error} Если BX24 не загружен в течение 30 секунд
|
|
1646
2013
|
*/
|
|
1647
2014
|
init() {
|
|
1648
|
-
return new Promise((
|
|
1649
|
-
let
|
|
2015
|
+
return new Promise((t, e) => {
|
|
2016
|
+
let i = setInterval(() => {
|
|
1650
2017
|
window.BX24 && BX24.init(async () => {
|
|
1651
|
-
console.info("init BX24"), clearInterval(
|
|
2018
|
+
console.info("init BX24"), clearInterval(i), clearTimeout(a), this.domain = BX24.getDomain(), this.isAdmin = BX24.isAdmin(), this.placeInfo = BX24.placement.info(), this.logger ? (this.logger = new ce(), await this.logger.init()) : this.logger = {
|
|
1652
2019
|
start: () => {
|
|
1653
2020
|
},
|
|
1654
2021
|
stop: () => {
|
|
@@ -1656,25 +2023,25 @@ class It {
|
|
|
1656
2023
|
getEntityList: () => {
|
|
1657
2024
|
}
|
|
1658
2025
|
};
|
|
1659
|
-
const [l,
|
|
1660
|
-
|
|
1661
|
-
|
|
2026
|
+
const [l, A] = await Promise.all([
|
|
2027
|
+
E(this, Mt, te).call(this),
|
|
2028
|
+
E(this, Dt, ee).call(this)
|
|
1662
2029
|
]);
|
|
1663
|
-
this.appInfo = l, this.userInfo =
|
|
1664
|
-
let h = new
|
|
2030
|
+
this.appInfo = l, this.userInfo = A, Gt(this);
|
|
2031
|
+
let h = new zt();
|
|
1665
2032
|
try {
|
|
1666
2033
|
h.noSleep();
|
|
1667
|
-
} catch (
|
|
2034
|
+
} catch (n) {
|
|
1668
2035
|
console.warn(
|
|
1669
2036
|
"Failed to initialize noSleep:",
|
|
1670
|
-
|
|
2037
|
+
n
|
|
1671
2038
|
);
|
|
1672
2039
|
}
|
|
1673
|
-
|
|
2040
|
+
t(!0);
|
|
1674
2041
|
});
|
|
1675
2042
|
}, 100);
|
|
1676
|
-
const
|
|
1677
|
-
clearInterval(
|
|
2043
|
+
const a = setTimeout(() => {
|
|
2044
|
+
clearInterval(i);
|
|
1678
2045
|
const l = new Error(
|
|
1679
2046
|
"BX24 initialization timeout: BX24 object not found within 30 seconds"
|
|
1680
2047
|
);
|
|
@@ -1688,23 +2055,23 @@ class It {
|
|
|
1688
2055
|
* @param {any} value - Значение для установки (если не указано, метод вернет текущее значение)
|
|
1689
2056
|
* @returns {any}
|
|
1690
2057
|
*/
|
|
1691
|
-
userOption(
|
|
2058
|
+
userOption(t, e) {
|
|
1692
2059
|
if (typeof BX24 > "u" || !BX24.userOption) {
|
|
1693
2060
|
console.warn(
|
|
1694
2061
|
"BX24.userOption is not available. Make sure BX24 is initialized."
|
|
1695
2062
|
);
|
|
1696
2063
|
return;
|
|
1697
2064
|
}
|
|
1698
|
-
return e !== void 0 ? BX24.userOption.set(
|
|
2065
|
+
return e !== void 0 ? BX24.userOption.set(t, e) : BX24.userOption.get(t);
|
|
1699
2066
|
}
|
|
1700
|
-
appOption(
|
|
2067
|
+
appOption(t, e) {
|
|
1701
2068
|
if (typeof BX24 > "u" || !BX24.appOption) {
|
|
1702
2069
|
console.warn(
|
|
1703
2070
|
"BX24.appOption is not available. Make sure BX24 is initialized."
|
|
1704
2071
|
);
|
|
1705
2072
|
return;
|
|
1706
2073
|
}
|
|
1707
|
-
return e !== void 0 ? BX24.appOption.set(
|
|
2074
|
+
return e !== void 0 ? BX24.appOption.set(t, e) : BX24.appOption.get(t);
|
|
1708
2075
|
}
|
|
1709
2076
|
/**
|
|
1710
2077
|
* @param {{
|
|
@@ -1724,51 +2091,41 @@ class It {
|
|
|
1724
2091
|
* }[]
|
|
1725
2092
|
* }[]
|
|
1726
2093
|
*/
|
|
1727
|
-
async call({ method:
|
|
1728
|
-
let
|
|
1729
|
-
if (
|
|
2094
|
+
async call({ method: t, params: e, updateList: s }) {
|
|
2095
|
+
let i;
|
|
2096
|
+
if (s && (i = this.logger.start({
|
|
1730
2097
|
type: "call",
|
|
1731
|
-
data: { method:
|
|
2098
|
+
data: { method: t, params: e, updateList: s }
|
|
1732
2099
|
})), e || (e = {}), typeof BX24 > "u" || !BX24.callMethod) {
|
|
1733
|
-
const
|
|
1734
|
-
throw console.error(
|
|
2100
|
+
const A = new Error("BX24 is not initialized");
|
|
2101
|
+
throw console.error(A), A;
|
|
1735
2102
|
}
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
key: n,
|
|
1749
|
-
status: "fail",
|
|
1750
|
-
errorList: { 0: s.toString() }
|
|
1751
|
-
});
|
|
1752
|
-
} catch (f) {
|
|
1753
|
-
console.error("Logger error:", f);
|
|
1754
|
-
}
|
|
1755
|
-
o(!1);
|
|
1756
|
-
} else {
|
|
1757
|
-
let s = c.data();
|
|
1758
|
-
if (s != null && s.items && (s = s.items), n)
|
|
1759
|
-
try {
|
|
1760
|
-
await this.logger.stop({
|
|
1761
|
-
answer: h,
|
|
1762
|
-
key: n,
|
|
1763
|
-
status: "success"
|
|
1764
|
-
});
|
|
1765
|
-
} catch (f) {
|
|
1766
|
-
console.error("Logger error:", f);
|
|
1767
|
-
}
|
|
1768
|
-
o(s);
|
|
2103
|
+
const l = await E(this, rt, ct).call(this).call({ method: t, params: e });
|
|
2104
|
+
if (!l.success) {
|
|
2105
|
+
if (console.error(l.error), i)
|
|
2106
|
+
try {
|
|
2107
|
+
await this.logger.stop({
|
|
2108
|
+
answer: l.answer,
|
|
2109
|
+
key: i,
|
|
2110
|
+
status: "fail",
|
|
2111
|
+
errorList: { 0: l.error || "Unknown call error" }
|
|
2112
|
+
});
|
|
2113
|
+
} catch (A) {
|
|
2114
|
+
console.error("Logger error:", A);
|
|
1769
2115
|
}
|
|
1770
|
-
|
|
1771
|
-
}
|
|
2116
|
+
return !1;
|
|
2117
|
+
}
|
|
2118
|
+
if (i)
|
|
2119
|
+
try {
|
|
2120
|
+
await this.logger.stop({
|
|
2121
|
+
answer: l.answer,
|
|
2122
|
+
key: i,
|
|
2123
|
+
status: "success"
|
|
2124
|
+
});
|
|
2125
|
+
} catch (A) {
|
|
2126
|
+
console.error("Logger error:", A);
|
|
2127
|
+
}
|
|
2128
|
+
return l.data;
|
|
1772
2129
|
}
|
|
1773
2130
|
/**
|
|
1774
2131
|
* @param commandList - объект/массив команд
|
|
@@ -1789,58 +2146,57 @@ class It {
|
|
|
1789
2146
|
* }[]
|
|
1790
2147
|
* }}
|
|
1791
2148
|
*/
|
|
1792
|
-
async batch(
|
|
2149
|
+
async batch(t, e, { errorCall: s, updateList: i, batchOptions: a } = {}) {
|
|
1793
2150
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1794
|
-
const
|
|
1795
|
-
return console.error(
|
|
2151
|
+
const h = new Error("BX24 is not initialized");
|
|
2152
|
+
return console.error(h), !1;
|
|
1796
2153
|
}
|
|
1797
|
-
|
|
1798
|
-
|
|
2154
|
+
const l = E(this, rt, ct).call(this);
|
|
2155
|
+
let A;
|
|
2156
|
+
i && (A = this.logger.start({
|
|
1799
2157
|
type: "batch",
|
|
1800
|
-
data: { commandList:
|
|
1801
|
-
}))
|
|
1802
|
-
"limitCommandSerial is deprecated and not used in current Batch implementation"
|
|
1803
|
-
);
|
|
2158
|
+
data: { commandList: t, updateList: i }
|
|
2159
|
+
}));
|
|
1804
2160
|
try {
|
|
1805
|
-
let
|
|
1806
|
-
|
|
2161
|
+
let h = await l.batch(
|
|
2162
|
+
t,
|
|
1807
2163
|
e,
|
|
1808
|
-
|
|
2164
|
+
a
|
|
1809
2165
|
);
|
|
1810
|
-
const
|
|
1811
|
-
if (Object.keys(
|
|
1812
|
-
if (
|
|
2166
|
+
const n = E(this, ut, Pt).call(this, l, h, t, i);
|
|
2167
|
+
if (Object.keys(n).length) {
|
|
2168
|
+
if (s && s(n), A)
|
|
1813
2169
|
try {
|
|
1814
2170
|
await this.logger.stop({
|
|
1815
|
-
key:
|
|
2171
|
+
key: A,
|
|
1816
2172
|
status: "fail",
|
|
1817
|
-
errorList:
|
|
2173
|
+
errorList: n
|
|
1818
2174
|
});
|
|
1819
|
-
} catch (
|
|
1820
|
-
console.error("Logger error:",
|
|
2175
|
+
} catch (u) {
|
|
2176
|
+
console.error("Logger error:", u);
|
|
1821
2177
|
}
|
|
1822
|
-
} else if (
|
|
2178
|
+
} else if (A)
|
|
1823
2179
|
try {
|
|
1824
2180
|
await this.logger.stop({
|
|
1825
|
-
key:
|
|
2181
|
+
key: A,
|
|
1826
2182
|
status: "success"
|
|
1827
2183
|
});
|
|
1828
|
-
} catch (
|
|
1829
|
-
console.error("Logger error:",
|
|
2184
|
+
} catch (u) {
|
|
2185
|
+
console.error("Logger error:", u);
|
|
1830
2186
|
}
|
|
1831
|
-
return
|
|
1832
|
-
} catch (
|
|
1833
|
-
if (
|
|
2187
|
+
return h;
|
|
2188
|
+
} catch (h) {
|
|
2189
|
+
if (A)
|
|
1834
2190
|
try {
|
|
1835
2191
|
await this.logger.stop({
|
|
1836
|
-
key:
|
|
2192
|
+
key: A,
|
|
1837
2193
|
status: "fail-runtime",
|
|
1838
|
-
errorList: { 0:
|
|
2194
|
+
errorList: { 0: h == null ? void 0 : h.toString() }
|
|
1839
2195
|
});
|
|
1840
|
-
} catch (
|
|
1841
|
-
console.error("Logger error:",
|
|
2196
|
+
} catch (n) {
|
|
2197
|
+
console.error("Logger error:", n);
|
|
1842
2198
|
}
|
|
1843
|
-
return console.error(
|
|
2199
|
+
return console.error(h), !1;
|
|
1844
2200
|
}
|
|
1845
2201
|
}
|
|
1846
2202
|
/**
|
|
@@ -1861,151 +2217,144 @@ class It {
|
|
|
1861
2217
|
* }
|
|
1862
2218
|
* }[]
|
|
1863
2219
|
* }[],
|
|
1864
|
-
* errorCall: Function
|
|
1865
|
-
* limitCall: Function
|
|
2220
|
+
* errorCall: Function
|
|
1866
2221
|
* }}
|
|
1867
2222
|
* @returns {Promise<Object|false>}
|
|
1868
2223
|
*/
|
|
1869
|
-
async batchTotalCount(
|
|
2224
|
+
async batchTotalCount(t, e, { errorCall: s, updateList: i } = {}) {
|
|
1870
2225
|
if (typeof BX24 > "u" || !BX24.callBatch) {
|
|
1871
|
-
const
|
|
1872
|
-
return console.error(
|
|
2226
|
+
const A = new Error("BX24 is not initialized");
|
|
2227
|
+
return console.error(A), !1;
|
|
1873
2228
|
}
|
|
1874
|
-
|
|
1875
|
-
|
|
2229
|
+
const a = E(this, rt, ct).call(this);
|
|
2230
|
+
let l;
|
|
2231
|
+
i && (l = this.logger.start({
|
|
1876
2232
|
type: "batch-total-count",
|
|
1877
|
-
data: { commandList:
|
|
2233
|
+
data: { commandList: t }
|
|
1878
2234
|
}));
|
|
1879
2235
|
try {
|
|
1880
|
-
let
|
|
1881
|
-
|
|
1882
|
-
e
|
|
1883
|
-
o
|
|
2236
|
+
let A = await a.batchTotalCount(
|
|
2237
|
+
t,
|
|
2238
|
+
e
|
|
1884
2239
|
);
|
|
1885
|
-
const
|
|
1886
|
-
if (Object.keys(
|
|
1887
|
-
if (
|
|
2240
|
+
const h = E(this, ut, Pt).call(this, a, A, t, i);
|
|
2241
|
+
if (Object.keys(h).length) {
|
|
2242
|
+
if (s && s(h), l)
|
|
1888
2243
|
try {
|
|
1889
2244
|
await this.logger.stop({
|
|
1890
|
-
key:
|
|
2245
|
+
key: l,
|
|
1891
2246
|
status: "fail",
|
|
1892
|
-
errorList:
|
|
2247
|
+
errorList: h
|
|
1893
2248
|
});
|
|
1894
|
-
} catch (
|
|
1895
|
-
console.error("Logger error:",
|
|
2249
|
+
} catch (n) {
|
|
2250
|
+
console.error("Logger error:", n);
|
|
1896
2251
|
}
|
|
1897
|
-
} else if (
|
|
2252
|
+
} else if (l)
|
|
1898
2253
|
try {
|
|
1899
2254
|
await this.logger.stop({
|
|
1900
|
-
key:
|
|
2255
|
+
key: l,
|
|
1901
2256
|
status: "success"
|
|
1902
2257
|
});
|
|
1903
|
-
} catch (
|
|
1904
|
-
console.error("Logger error:",
|
|
2258
|
+
} catch (n) {
|
|
2259
|
+
console.error("Logger error:", n);
|
|
1905
2260
|
}
|
|
1906
|
-
return
|
|
1907
|
-
} catch (
|
|
1908
|
-
if (
|
|
2261
|
+
return A;
|
|
2262
|
+
} catch (A) {
|
|
2263
|
+
if (l)
|
|
1909
2264
|
try {
|
|
1910
2265
|
await this.logger.stop({
|
|
1911
|
-
key:
|
|
2266
|
+
key: l,
|
|
1912
2267
|
status: "fail-runtime",
|
|
1913
|
-
errorList: { 0:
|
|
2268
|
+
errorList: { 0: A == null ? void 0 : A.toString() }
|
|
1914
2269
|
});
|
|
1915
|
-
} catch (
|
|
1916
|
-
console.error("Logger error:",
|
|
2270
|
+
} catch (h) {
|
|
2271
|
+
console.error("Logger error:", h);
|
|
1917
2272
|
}
|
|
1918
|
-
return console.error(
|
|
2273
|
+
return console.error(A), !1;
|
|
1919
2274
|
}
|
|
1920
2275
|
}
|
|
1921
2276
|
/** Запрос данных о местах встройки приложения */
|
|
1922
2277
|
async getPlacement() {
|
|
1923
|
-
return await this.call({ method: "placement.get" }).then((
|
|
2278
|
+
return await this.call({ method: "placement.get" }).then((t) => (this.placeData || (this.placeData = t), t));
|
|
1924
2279
|
}
|
|
1925
|
-
/**
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
2280
|
+
/**
|
|
2281
|
+
* Встройка приложения в указанные места
|
|
2282
|
+
* @param {string|string[]|Object|Object[]} place - Место или массив мест для встройки
|
|
2283
|
+
*/
|
|
2284
|
+
async placementBind(t) {
|
|
2285
|
+
var m;
|
|
2286
|
+
if (!this.isAdmin || (this.placeData = await this.getPlacement(), !this.placeData))
|
|
1929
2287
|
return;
|
|
1930
|
-
e
|
|
1931
|
-
let i =
|
|
1932
|
-
|
|
1933
|
-
(
|
|
1934
|
-
)
|
|
2288
|
+
const { appName: e, pathApp: s } = this.appConst;
|
|
2289
|
+
let i = E(this, ft, Wt).call(this, t);
|
|
2290
|
+
i = i.filter(
|
|
2291
|
+
(c) => c.placement !== "PAGE_BACKGROUND_WORKER" && c.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
2292
|
+
);
|
|
2293
|
+
const a = E(this, kt, re).call(this, s), l = new Set(i.map((c) => c.placement));
|
|
2294
|
+
for (const c of a)
|
|
2295
|
+
l.has(c.placement) || i.push({ placement: c.placement });
|
|
2296
|
+
if (i.length === 0)
|
|
1935
2297
|
return;
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
const u = i[m].placement, N = o;
|
|
2298
|
+
let A = e;
|
|
2299
|
+
this.domain === "szdl.bitrix24.ru" && ((m = this.appInfo) != null && m.ID) && (A = `${e}: #${this.appInfo.ID}`);
|
|
2300
|
+
const h = A.replace(" CRM", ""), n = {}, u = [];
|
|
2301
|
+
for (let c = 0; c < i.length; c++) {
|
|
2302
|
+
const f = i[c].placement;
|
|
1942
2303
|
if (this.placeData.find(
|
|
1943
|
-
(
|
|
2304
|
+
(_) => _.placement === f && _.handler === s
|
|
1944
2305
|
))
|
|
1945
2306
|
continue;
|
|
1946
|
-
const
|
|
1947
|
-
(
|
|
2307
|
+
const T = this.placeData.filter(
|
|
2308
|
+
(_) => _.placement === f && _.handler !== s
|
|
1948
2309
|
);
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
2310
|
+
for (const _ of T)
|
|
2311
|
+
u.push({
|
|
2312
|
+
placement: f,
|
|
2313
|
+
handler: _.handler
|
|
2314
|
+
});
|
|
2315
|
+
n[`bind_${c}`] = {
|
|
2316
|
+
method: "placement.bind",
|
|
2317
|
+
params: {
|
|
2318
|
+
PLACEMENT: f,
|
|
2319
|
+
HANDLER: s,
|
|
2320
|
+
LANG_ALL: {
|
|
2321
|
+
ru: {
|
|
2322
|
+
TITLE: f === "USER_PROFILE_TOOLBAR" ? h : A
|
|
2323
|
+
}
|
|
2324
|
+
},
|
|
2325
|
+
OPTIONS: {
|
|
2326
|
+
errorHandlerUrl: s
|
|
1959
2327
|
}
|
|
1960
|
-
},
|
|
1961
|
-
OPTIONS: {
|
|
1962
|
-
errorHandlerUrl: N
|
|
1963
2328
|
}
|
|
1964
2329
|
};
|
|
1965
|
-
h[`bind_${m}`] = {
|
|
1966
|
-
method: "placement.bind",
|
|
1967
|
-
params: R
|
|
1968
|
-
};
|
|
1969
2330
|
}
|
|
1970
|
-
|
|
1971
|
-
console.log(
|
|
1972
|
-
"Приложение успешно встроено в",
|
|
1973
|
-
m.params.PLACEMENT
|
|
1974
|
-
);
|
|
2331
|
+
u.length > 0 && await this.placementUnBind(u), Object.keys(n).length > 0 && (await this.batch(n), this.placeData = await this.getPlacement(), Object.values(n).forEach((c) => {
|
|
2332
|
+
console.log("Приложение успешно встроено в", c.params.PLACEMENT);
|
|
1975
2333
|
}));
|
|
1976
2334
|
}
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
);
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
2335
|
+
/**
|
|
2336
|
+
* Отвязка встройки из указанных мест
|
|
2337
|
+
* @param {string|string[]|Object|Object[]} place - Место или массив мест для отвязки
|
|
2338
|
+
*/
|
|
2339
|
+
async placementUnBind(t) {
|
|
2340
|
+
let e = E(this, ft, Wt).call(this, t);
|
|
2341
|
+
if (e = e.filter(
|
|
2342
|
+
(i) => i.placement !== "PAGE_BACKGROUND_WORKER" && i.placement !== "PAGE_BACKGROUND_WORKER_ALL"
|
|
2343
|
+
), e.length === 0)
|
|
2344
|
+
return;
|
|
2345
|
+
const s = {};
|
|
2346
|
+
for (let i = 0; i < e.length; i++) {
|
|
2347
|
+
const a = {
|
|
2348
|
+
PLACEMENT: e[i].placement
|
|
1987
2349
|
};
|
|
1988
|
-
|
|
2350
|
+
e[i].handler && (a.HANDLER = e[i].handler), s[`unbind_${i}`] = {
|
|
1989
2351
|
method: "placement.unbind",
|
|
1990
|
-
params:
|
|
2352
|
+
params: a
|
|
1991
2353
|
};
|
|
1992
2354
|
}
|
|
1993
|
-
|
|
1994
|
-
console.log("Встройка отвязана",
|
|
1995
|
-
})
|
|
1996
|
-
}
|
|
1997
|
-
/** Удаляем фоновые обработчики прошлых версий и создаем новые */
|
|
1998
|
-
async placementCheck() {
|
|
1999
|
-
if (this.placeData = await this.getPlacement(), !this.placeData)
|
|
2000
|
-
return;
|
|
2001
|
-
const { pathApp: r } = this.appConst, e = [], i = [];
|
|
2002
|
-
for (const n of this.placeData) {
|
|
2003
|
-
if (n.placement === "PAGE_BACKGROUND_WORKER" || !n.handler || n.handler.includes(r))
|
|
2004
|
-
continue;
|
|
2005
|
-
const { placement: o, handler: l, userId: c } = n;
|
|
2006
|
-
e.push({ placement: o, handler: l }), i.push({ placement: o, userId: c });
|
|
2007
|
-
}
|
|
2008
|
-
e.length > 0 && await this.placementUnBind(e), i.length > 0 && await this.placementBind(i, !1);
|
|
2355
|
+
await this.batch(s), e.forEach((i) => {
|
|
2356
|
+
console.log("Встройка отвязана", i.placement);
|
|
2357
|
+
});
|
|
2009
2358
|
}
|
|
2010
2359
|
/** Чат-бот */
|
|
2011
2360
|
/* получение списка ботов */
|
|
@@ -2013,22 +2362,22 @@ class It {
|
|
|
2013
2362
|
return this.call({
|
|
2014
2363
|
method: "imbot.bot.list",
|
|
2015
2364
|
params: {}
|
|
2016
|
-
}).then((
|
|
2017
|
-
let e = Object.values(
|
|
2365
|
+
}).then((t) => {
|
|
2366
|
+
let e = Object.values(t);
|
|
2018
2367
|
return console.log("chat-bot list:", e), e;
|
|
2019
2368
|
});
|
|
2020
2369
|
}
|
|
2021
2370
|
/* регистрация бота */
|
|
2022
|
-
regBot({ code:
|
|
2023
|
-
const { appName:
|
|
2371
|
+
regBot({ code: t, type: e, name: s }) {
|
|
2372
|
+
const { appName: i, pathApp: a, chatBotLogo: l } = this.appConst, A = this.appInfo.ID;
|
|
2024
2373
|
return this.call({
|
|
2025
2374
|
method: "imbot.register",
|
|
2026
2375
|
params: {
|
|
2027
|
-
CODE:
|
|
2376
|
+
CODE: t ?? this.appInfo.CODE,
|
|
2028
2377
|
// Строковой идентификатор бота, уникальный в рамках вашего приложения (обяз.)
|
|
2029
2378
|
TYPE: e ?? "O",
|
|
2030
2379
|
// Тип бота, B - чат-бот, ответы поступают сразу, H - человек, ответы поступают с задержкой от 2-х до 10 секунд, O - чат-бот для Открытых линий, S - чат-бот с повышенными привилегиями (supervisor)
|
|
2031
|
-
EVENT_HANDLER:
|
|
2380
|
+
EVENT_HANDLER: a,
|
|
2032
2381
|
// Ссылка на обработчик событий, поступивших от сервера - см. Обработчики событий ниже (обяз).
|
|
2033
2382
|
OPENLINE: "Y",
|
|
2034
2383
|
// Включение режима поддержки Открытых линий, можно не указывать, если TYPE = 'O'
|
|
@@ -2036,7 +2385,7 @@ class It {
|
|
|
2036
2385
|
// строковый идентификатор чат-бота, используется только в режиме Вебхуков
|
|
2037
2386
|
PROPERTIES: {
|
|
2038
2387
|
// Личные данные чат-бота (обяз.)
|
|
2039
|
-
NAME: `${
|
|
2388
|
+
NAME: `${s ?? i} - бот #${A}`,
|
|
2040
2389
|
// Имя чат-бота (обязательное одно из полей NAME или LAST_NAME)
|
|
2041
2390
|
LAST_NAME: "",
|
|
2042
2391
|
// Фамилия чат-бота (обязательное одно из полей NAME или LAST_NAME)
|
|
@@ -2044,7 +2393,7 @@ class It {
|
|
|
2044
2393
|
// Цвет чат-бота для мобильного приложения RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK, LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE
|
|
2045
2394
|
EMAIL: "",
|
|
2046
2395
|
// E-mail для связи. НЕЛЬЗЯ использовать e-mail, дублирующий e-mail реальных пользователей
|
|
2047
|
-
PERSONAL_BIRTHDAY:
|
|
2396
|
+
PERSONAL_BIRTHDAY: dt().format("%Y-%m-%d"),
|
|
2048
2397
|
// День рождения в формате YYYY-mm-dd
|
|
2049
2398
|
WORK_POSITION: "Почтальон",
|
|
2050
2399
|
// Занимаемая должность, используется как описание чат-бота
|
|
@@ -2059,79 +2408,147 @@ class It {
|
|
|
2059
2408
|
}).then((h) => (console.log("Чат-бот добавлен", h), h));
|
|
2060
2409
|
}
|
|
2061
2410
|
/* Убрать регистрацию бота */
|
|
2062
|
-
unRegBot(
|
|
2411
|
+
unRegBot(t) {
|
|
2063
2412
|
return this.call({
|
|
2064
2413
|
method: "imbot.unregister",
|
|
2065
2414
|
params: {
|
|
2066
|
-
BOT_ID:
|
|
2415
|
+
BOT_ID: t
|
|
2067
2416
|
}
|
|
2068
2417
|
}).then((e) => (console.log("чат-бот удален", e), e));
|
|
2069
2418
|
}
|
|
2070
2419
|
/* Получение данных логера */
|
|
2071
|
-
getLoggerList(
|
|
2072
|
-
return this.logger.getEntityList(
|
|
2420
|
+
getLoggerList(t) {
|
|
2421
|
+
return this.logger.getEntityList(t);
|
|
2073
2422
|
}
|
|
2074
2423
|
}
|
|
2075
|
-
|
|
2424
|
+
rt = new WeakSet(), ct = function() {
|
|
2425
|
+
return this.batchClient || (this.batchClient = new v({
|
|
2426
|
+
callBatch: BX24.callBatch,
|
|
2427
|
+
callMethod: BX24.callMethod
|
|
2428
|
+
}), this.timeLimit = this.batchClient.timeLimit), this.batchClient;
|
|
2429
|
+
}, Mt = new WeakSet(), te = function() {
|
|
2076
2430
|
return this.call({ method: "app.info" });
|
|
2077
|
-
},
|
|
2431
|
+
}, Dt = new WeakSet(), ee = function() {
|
|
2078
2432
|
return this.call({ method: "user.current" });
|
|
2079
|
-
},
|
|
2080
|
-
let
|
|
2081
|
-
if (Object.values(
|
|
2082
|
-
(
|
|
2083
|
-
if (typeof
|
|
2433
|
+
}, ut = new WeakSet(), Pt = function(t, e, s, i) {
|
|
2434
|
+
let a = { ...t.errors };
|
|
2435
|
+
if (Object.values(t.errors).some(
|
|
2436
|
+
(A) => {
|
|
2437
|
+
if (typeof A != "string")
|
|
2084
2438
|
return !1;
|
|
2085
|
-
const h =
|
|
2439
|
+
const h = A.toUpperCase();
|
|
2086
2440
|
return h === "TIMEOUT" || h === "OPERATION_TIME_LIMIT" || h.includes("TIMEOUT") || h.includes("OPERATION_TIME_LIMIT");
|
|
2087
2441
|
}
|
|
2088
|
-
) &&
|
|
2089
|
-
const
|
|
2442
|
+
) && i) {
|
|
2443
|
+
const A = e ? Object.keys(e).filter((m) => m !== "errorsList") : [], h = new Set(Object.keys(t.errors || {})), n = /* @__PURE__ */ new Set();
|
|
2090
2444
|
if (e) {
|
|
2091
|
-
for (const m of
|
|
2445
|
+
for (const m of A)
|
|
2092
2446
|
if (!h.has(m)) {
|
|
2093
|
-
const
|
|
2094
|
-
|
|
2447
|
+
const c = e[m];
|
|
2448
|
+
c != null && n.add(m);
|
|
2095
2449
|
}
|
|
2096
2450
|
}
|
|
2097
|
-
const
|
|
2451
|
+
const u = Object.values(t.errors).find(
|
|
2098
2452
|
(m) => {
|
|
2099
2453
|
if (typeof m != "string")
|
|
2100
2454
|
return !1;
|
|
2101
|
-
const
|
|
2102
|
-
return
|
|
2455
|
+
const c = m.toUpperCase();
|
|
2456
|
+
return c === "TIMEOUT" || c === "OPERATION_TIME_LIMIT" || c.includes("TIMEOUT") || c.includes("OPERATION_TIME_LIMIT");
|
|
2103
2457
|
}
|
|
2104
2458
|
);
|
|
2105
|
-
for (const m of Object.keys(
|
|
2106
|
-
!
|
|
2107
|
-
}
|
|
2108
|
-
return
|
|
2459
|
+
for (const m of Object.keys(s))
|
|
2460
|
+
!n.has(m) && !t.errors[m] && (a[m] = u || "TIMEOUT или OPERATION_TIME_LIMIT: запрос не был обработан");
|
|
2461
|
+
}
|
|
2462
|
+
return a;
|
|
2463
|
+
}, ft = new WeakSet(), Wt = function(t) {
|
|
2464
|
+
if (!t)
|
|
2465
|
+
return [];
|
|
2466
|
+
let e = [];
|
|
2467
|
+
return Array.isArray(t) ? e = t.map(
|
|
2468
|
+
(s) => typeof s == "string" ? { placement: s } : s
|
|
2469
|
+
) : typeof t == "string" ? e = [{ placement: t }] : e = [t], e;
|
|
2470
|
+
}, kt = new WeakSet(), re = function(t) {
|
|
2471
|
+
return this.placeData ? this.placeData.filter((e) => !(e.placement === "PAGE_BACKGROUND_WORKER" || !e.handler || e.handler.includes(t))) : [];
|
|
2109
2472
|
};
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2473
|
+
const se = "szdl-utils-kit|";
|
|
2474
|
+
function he() {
|
|
2475
|
+
if (typeof sessionStorage > "u")
|
|
2476
|
+
return `ephemeral-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
2477
|
+
let p = sessionStorage.getItem("szdl-cross-tab-instance-id");
|
|
2478
|
+
return p || (p = `${Date.now()}-${Math.random().toString(16).slice(2)}`, sessionStorage.setItem("szdl-cross-tab-instance-id", p)), p;
|
|
2479
|
+
}
|
|
2480
|
+
function ue() {
|
|
2481
|
+
return typeof navigator < "u" && typeof navigator.locks < "u" && typeof navigator.locks.request == "function";
|
|
2482
|
+
}
|
|
2483
|
+
const Ct = /* @__PURE__ */ new Map();
|
|
2484
|
+
function fe(p = "default") {
|
|
2485
|
+
if (typeof BroadcastChannel > "u")
|
|
2486
|
+
return null;
|
|
2487
|
+
const t = `${se}bc:${p}`;
|
|
2488
|
+
return Ct.has(t) || Ct.set(t, new BroadcastChannel(t)), Ct.get(t);
|
|
2489
|
+
}
|
|
2490
|
+
function Xt(p, t) {
|
|
2491
|
+
const e = fe(p);
|
|
2492
|
+
if (e)
|
|
2493
|
+
try {
|
|
2494
|
+
const s = t && typeof t == "object" && !Array.isArray(t) ? t : { data: t };
|
|
2495
|
+
e.postMessage({
|
|
2496
|
+
...s,
|
|
2497
|
+
tabId: he(),
|
|
2498
|
+
ts: Date.now()
|
|
2499
|
+
});
|
|
2500
|
+
} catch {
|
|
2501
|
+
}
|
|
2502
|
+
}
|
|
2503
|
+
async function me(p, t, e = {}) {
|
|
2504
|
+
const { ifAvailable: s = !1 } = e, i = typeof p == "string" && p.length > 0 ? p : "default", a = `${se}${i}`;
|
|
2505
|
+
return ue() ? navigator.locks.request(
|
|
2506
|
+
a,
|
|
2507
|
+
{ mode: "exclusive", ifAvailable: !!s },
|
|
2508
|
+
async (l) => {
|
|
2509
|
+
if (s && l == null)
|
|
2510
|
+
return { skipped: !0, coordination: "locks" };
|
|
2511
|
+
Xt(i, { type: "lock-acquired", resource: i });
|
|
2512
|
+
try {
|
|
2513
|
+
return { skipped: !1, result: await t(), coordination: "locks" };
|
|
2514
|
+
} finally {
|
|
2515
|
+
Xt(i, { type: "lock-released", resource: i });
|
|
2516
|
+
}
|
|
2517
|
+
}
|
|
2518
|
+
) : { skipped: !1, result: await t(), coordination: "none" };
|
|
2519
|
+
}
|
|
2520
|
+
var mt, xt;
|
|
2521
|
+
class ye {
|
|
2522
|
+
constructor(t) {
|
|
2523
|
+
/**
|
|
2524
|
+
* Канонический base URL для placement (без завершающего `/`).
|
|
2525
|
+
* Пустая строка — не биндить (некорректный или marketplace URL).
|
|
2526
|
+
*/
|
|
2527
|
+
D(this, mt);
|
|
2528
|
+
C(this, "entityName", "tabs");
|
|
2529
|
+
C(this, "maxTabs", 20);
|
|
2530
|
+
C(this, "tabList", []);
|
|
2531
|
+
C(this, "id", 0);
|
|
2532
|
+
C(this, "hasStarted", !1);
|
|
2533
|
+
C(this, "heartbeat");
|
|
2534
|
+
C(this, "runHeartbeat");
|
|
2535
|
+
/** Вкладка считается «мёртвой», если нет обновления lastActive дольше этого (см. refreshTabs). */
|
|
2536
|
+
C(this, "activeMaxPause", 10 * 1e3);
|
|
2537
|
+
C(this, "quickCleanupThreshold", 2 * 60 * 1e3);
|
|
2122
2538
|
// агрессивная очистка при переполнении
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2539
|
+
/** Должен быть заметно меньше activeMaxPause: иначе «живые» вкладки успеют удалиться до следующего тика. */
|
|
2540
|
+
C(this, "pollInterval", 6 * 1e3 + Math.floor(Math.random() * 2e3));
|
|
2541
|
+
// ~6–8 с + размазать одновременные запросы
|
|
2542
|
+
C(this, "sessionId", `${Date.now()}-${Math.random().toString(16).slice(2)}`);
|
|
2543
|
+
C(this, "continueCondition");
|
|
2544
|
+
C(this, "defaultContinueBackground", () => !0);
|
|
2545
|
+
var l, A, h;
|
|
2546
|
+
if (!t) {
|
|
2130
2547
|
console.error("BackgroundWorker: Нет опций конструктора");
|
|
2131
2548
|
return;
|
|
2132
2549
|
}
|
|
2133
|
-
const { appFunc: e, bx:
|
|
2134
|
-
this.bx =
|
|
2550
|
+
const { appFunc: e, bx: s, users: i, continueBackground: a } = t;
|
|
2551
|
+
this.bx = s, this.appInit = e, this.users = i, Gt(s), this.appPath = E(this, mt, xt).call(this, ((l = s == null ? void 0 : s.appConst) == null ? void 0 : l.pathApp) ?? ""), this.appName = ((A = s == null ? void 0 : s.appConst) == null ? void 0 : A.appName) ?? "", this.appCodeName = ((h = s == null ? void 0 : s.appConst) == null ? void 0 : h.appCodeName) ?? "", this.start = /* @__PURE__ */ new Date(), this.continueCondition = typeof a == "function" ? a : this.defaultContinueBackground;
|
|
2135
2552
|
}
|
|
2136
2553
|
async init() {
|
|
2137
2554
|
if (!this.appInit) {
|
|
@@ -2162,31 +2579,31 @@ class Mt {
|
|
|
2162
2579
|
return;
|
|
2163
2580
|
}
|
|
2164
2581
|
await this.refreshTabs(!0), await this.ensureTabRegistered();
|
|
2165
|
-
const e = this.selectLeaderId(),
|
|
2166
|
-
await this.updateTabState(
|
|
2582
|
+
const e = this.selectLeaderId(), s = e && +this.id == +e;
|
|
2583
|
+
await this.updateTabState(s), s && !this.hasStarted && await this.runAsLeader();
|
|
2167
2584
|
}
|
|
2168
2585
|
stopTimers() {
|
|
2169
2586
|
this.heartbeat && (clearInterval(this.heartbeat), this.heartbeat = void 0), this.runHeartbeat && (clearInterval(this.runHeartbeat), this.runHeartbeat = void 0);
|
|
2170
2587
|
}
|
|
2171
2588
|
isAppPage() {
|
|
2172
|
-
var
|
|
2173
|
-
if (typeof BX24 > "u" || !((
|
|
2589
|
+
var t;
|
|
2590
|
+
if (typeof BX24 > "u" || !((t = BX24.placement) != null && t.info))
|
|
2174
2591
|
return !1;
|
|
2175
2592
|
try {
|
|
2176
|
-
const e = BX24.placement.info(),
|
|
2177
|
-
return !l ||
|
|
2593
|
+
const e = BX24.placement.info(), s = e == null ? void 0 : e.placement, i = (e == null ? void 0 : e.options) || {}, a = (i == null ? void 0 : i.URI) || "", l = s === "PAGE_BACKGROUND_WORKER" || (i == null ? void 0 : i.ID) === "PAGE_BACKGROUND_WORKER", A = typeof a == "string" && (a.includes("marketplace/app") || a.includes("marketplace/apps") || a.includes("placement") || a.includes("sozdavatel" + this.appCodeName));
|
|
2594
|
+
return !l || A;
|
|
2178
2595
|
} catch {
|
|
2179
2596
|
return !1;
|
|
2180
2597
|
}
|
|
2181
2598
|
}
|
|
2182
2599
|
async checkEntity() {
|
|
2183
|
-
var
|
|
2184
|
-
const
|
|
2600
|
+
var s;
|
|
2601
|
+
const t = await this.safeCall(
|
|
2185
2602
|
() => this.bx.call({ method: "entity.get" })
|
|
2186
2603
|
);
|
|
2187
|
-
((
|
|
2188
|
-
|
|
2189
|
-
(
|
|
2604
|
+
((s = t == null ? void 0 : t.find) == null ? void 0 : s.call(
|
|
2605
|
+
t,
|
|
2606
|
+
(i) => i.ENTITY === this.entityName
|
|
2190
2607
|
)) || await this.safeCall(
|
|
2191
2608
|
() => this.bx.call({
|
|
2192
2609
|
method: "entity.add",
|
|
@@ -2199,7 +2616,7 @@ class Mt {
|
|
|
2199
2616
|
);
|
|
2200
2617
|
}
|
|
2201
2618
|
async getTabs() {
|
|
2202
|
-
const
|
|
2619
|
+
const t = await this.safeCall(
|
|
2203
2620
|
() => {
|
|
2204
2621
|
var e;
|
|
2205
2622
|
return this.bx.call({
|
|
@@ -2212,14 +2629,14 @@ class Mt {
|
|
|
2212
2629
|
});
|
|
2213
2630
|
}
|
|
2214
2631
|
);
|
|
2215
|
-
return !Array.isArray(
|
|
2632
|
+
return !Array.isArray(t) || !t.length ? [] : t.map((e) => {
|
|
2216
2633
|
if (!e)
|
|
2217
2634
|
return { id: void 0, data: void 0 };
|
|
2218
2635
|
try {
|
|
2219
|
-
const
|
|
2220
|
-
return { id: +e.ID || 0, data:
|
|
2221
|
-
} catch (
|
|
2222
|
-
return console.log("BackgroundWorker: parse tab error",
|
|
2636
|
+
const s = JSON.parse(e.DETAIL_TEXT);
|
|
2637
|
+
return { id: +e.ID || 0, data: s };
|
|
2638
|
+
} catch (s) {
|
|
2639
|
+
return console.log("BackgroundWorker: parse tab error", s), { id: +e.ID || 0, data: void 0 };
|
|
2223
2640
|
}
|
|
2224
2641
|
});
|
|
2225
2642
|
}
|
|
@@ -2230,65 +2647,61 @@ class Mt {
|
|
|
2230
2647
|
return console.log(
|
|
2231
2648
|
"BackgroundWorker: Достигнут лимит вкладок даже после быстрой очистки, не регистрируемся"
|
|
2232
2649
|
), 0;
|
|
2233
|
-
const
|
|
2650
|
+
const t = {
|
|
2234
2651
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2235
2652
|
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2236
2653
|
start: !1,
|
|
2237
2654
|
sessionId: this.sessionId
|
|
2238
2655
|
}, e = await this.safeCall(
|
|
2239
2656
|
() => {
|
|
2240
|
-
var
|
|
2657
|
+
var s;
|
|
2241
2658
|
return this.bx.call({
|
|
2242
2659
|
method: "entity.item.add",
|
|
2243
2660
|
params: {
|
|
2244
2661
|
ENTITY: this.entityName,
|
|
2245
|
-
NAME: (
|
|
2246
|
-
DETAIL_TEXT: JSON.stringify(
|
|
2662
|
+
NAME: (s = this.bx.userInfo) == null ? void 0 : s.ID,
|
|
2663
|
+
DETAIL_TEXT: JSON.stringify(t)
|
|
2247
2664
|
}
|
|
2248
2665
|
});
|
|
2249
2666
|
}
|
|
2250
2667
|
) || 0;
|
|
2251
2668
|
return this.id = +e || 0, this.id;
|
|
2252
2669
|
}
|
|
2253
|
-
async updateTabState(
|
|
2670
|
+
async updateTabState(t) {
|
|
2254
2671
|
if (!this.id)
|
|
2255
2672
|
return;
|
|
2256
2673
|
const e = {
|
|
2257
2674
|
lastActive: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2258
2675
|
createdAt: this.start.toISOString(),
|
|
2259
|
-
start:
|
|
2676
|
+
start: t,
|
|
2260
2677
|
sessionId: this.sessionId
|
|
2261
2678
|
};
|
|
2262
2679
|
await this.safeCall(
|
|
2263
2680
|
() => {
|
|
2264
|
-
var
|
|
2681
|
+
var s;
|
|
2265
2682
|
return this.bx.call({
|
|
2266
2683
|
method: "entity.item.update",
|
|
2267
2684
|
params: {
|
|
2268
2685
|
ENTITY: this.entityName,
|
|
2269
2686
|
ID: this.id,
|
|
2270
|
-
NAME: (
|
|
2687
|
+
NAME: (s = this.bx.userInfo) == null ? void 0 : s.ID,
|
|
2271
2688
|
DETAIL_TEXT: JSON.stringify(e)
|
|
2272
2689
|
}
|
|
2273
2690
|
});
|
|
2274
2691
|
}
|
|
2275
2692
|
);
|
|
2276
2693
|
}
|
|
2277
|
-
async deleteTabs(
|
|
2278
|
-
if (!
|
|
2694
|
+
async deleteTabs(t = []) {
|
|
2695
|
+
if (!t.length)
|
|
2279
2696
|
return;
|
|
2280
|
-
const e =
|
|
2697
|
+
const e = t.map((s) => ({
|
|
2281
2698
|
method: "entity.item.delete",
|
|
2282
|
-
params: { ENTITY: this.entityName, ID:
|
|
2699
|
+
params: { ENTITY: this.entityName, ID: s.id }
|
|
2283
2700
|
}));
|
|
2284
2701
|
await this.safeCall(() => this.bx.batch(e));
|
|
2285
2702
|
}
|
|
2286
|
-
getRandomNum() {
|
|
2287
|
-
const r = Math.round(Number(Math.random().toFixed(2)) * 30);
|
|
2288
|
-
return Math.round(Math.random()) ? r : -r;
|
|
2289
|
-
}
|
|
2290
2703
|
async checkPlacementType() {
|
|
2291
|
-
var
|
|
2704
|
+
var t;
|
|
2292
2705
|
try {
|
|
2293
2706
|
const e = await this.safeCall(
|
|
2294
2707
|
() => this.bx.getPlacement()
|
|
@@ -2297,24 +2710,24 @@ class Mt {
|
|
|
2297
2710
|
return console.log(
|
|
2298
2711
|
"BackgroundWorker: Не получили список размещений, продолжаем"
|
|
2299
2712
|
), !0;
|
|
2300
|
-
const
|
|
2713
|
+
const s = +(((t = this.bx.userInfo) == null ? void 0 : t.ID) ?? 0), i = this.isIndividualPlacement(
|
|
2301
2714
|
typeof window < "u" ? window.location.href : ""
|
|
2302
|
-
),
|
|
2303
|
-
if (!
|
|
2715
|
+
), a = !i;
|
|
2716
|
+
if (!s)
|
|
2304
2717
|
return !0;
|
|
2305
2718
|
let l = !1;
|
|
2306
|
-
for (const
|
|
2307
|
-
if (
|
|
2719
|
+
for (const A of e) {
|
|
2720
|
+
if (A.placement !== "PAGE_BACKGROUND_WORKER" || !(A.userId || A.handler && A.handler.includes("USER_ID=")))
|
|
2308
2721
|
continue;
|
|
2309
|
-
const
|
|
2310
|
-
if (
|
|
2722
|
+
const n = A.userId || (A.handler ? this.extractUserIdFromHandler(A.handler) : null);
|
|
2723
|
+
if (n && +n === s) {
|
|
2311
2724
|
l = !0;
|
|
2312
2725
|
break;
|
|
2313
2726
|
}
|
|
2314
2727
|
}
|
|
2315
|
-
return
|
|
2728
|
+
return i ? (console.log(
|
|
2316
2729
|
"BackgroundWorker: Индивидуальная встройка - разрешено"
|
|
2317
|
-
), !0) :
|
|
2730
|
+
), !0) : a && l ? (console.log(
|
|
2318
2731
|
"BackgroundWorker: Есть личная встройка, общую не запускаем"
|
|
2319
2732
|
), !1) : (console.log(
|
|
2320
2733
|
"BackgroundWorker: Проверка типа встройки пройдена, продолжаем"
|
|
@@ -2326,13 +2739,13 @@ class Mt {
|
|
|
2326
2739
|
), !0;
|
|
2327
2740
|
}
|
|
2328
2741
|
}
|
|
2329
|
-
isIndividualPlacement(
|
|
2330
|
-
return !
|
|
2742
|
+
isIndividualPlacement(t) {
|
|
2743
|
+
return !t || typeof t != "string" ? !1 : t.includes("USER_ID=");
|
|
2331
2744
|
}
|
|
2332
|
-
extractUserIdFromHandler(
|
|
2333
|
-
if (!
|
|
2745
|
+
extractUserIdFromHandler(t) {
|
|
2746
|
+
if (!t || typeof t != "string")
|
|
2334
2747
|
return null;
|
|
2335
|
-
const e =
|
|
2748
|
+
const e = t.match(/USER_ID=(\d+)/);
|
|
2336
2749
|
return e ? +e[1] : null;
|
|
2337
2750
|
}
|
|
2338
2751
|
async continueBackground() {
|
|
@@ -2341,198 +2754,231 @@ class Mt {
|
|
|
2341
2754
|
this.continueCondition(this)
|
|
2342
2755
|
);
|
|
2343
2756
|
return console.log(e ? "BackgroundWorker: Условие продолжения выполнено" : "BackgroundWorker: continueBackground вернул false"), e;
|
|
2344
|
-
} catch (
|
|
2757
|
+
} catch (t) {
|
|
2345
2758
|
return console.error(
|
|
2346
2759
|
"BackgroundWorker: Ошибка в continueCondition",
|
|
2347
|
-
|
|
2760
|
+
t
|
|
2348
2761
|
), !1;
|
|
2349
2762
|
}
|
|
2350
2763
|
}
|
|
2351
|
-
async refreshTabs(
|
|
2352
|
-
const
|
|
2353
|
-
for (const
|
|
2354
|
-
if (!(
|
|
2355
|
-
|
|
2764
|
+
async refreshTabs(t = !1, e = this.activeMaxPause) {
|
|
2765
|
+
const s = [], i = [], a = Date.now(), l = await this.getTabs();
|
|
2766
|
+
for (const A of l) {
|
|
2767
|
+
if (!(A != null && A.data)) {
|
|
2768
|
+
s.push(A);
|
|
2356
2769
|
continue;
|
|
2357
2770
|
}
|
|
2358
|
-
if (
|
|
2359
|
-
|
|
2771
|
+
if (a - new Date(A.data.lastActive || 0).getTime() > e) {
|
|
2772
|
+
s.push(A);
|
|
2360
2773
|
continue;
|
|
2361
2774
|
}
|
|
2362
|
-
|
|
2775
|
+
i.push(A);
|
|
2363
2776
|
}
|
|
2364
|
-
return
|
|
2777
|
+
return t && s.length && await this.deleteTabs(s), this.tabList = i, i;
|
|
2365
2778
|
}
|
|
2366
2779
|
selectLeaderId() {
|
|
2367
2780
|
var e;
|
|
2368
|
-
return this.tabList.length && +((e = [...this.tabList].sort((
|
|
2369
|
-
var
|
|
2370
|
-
const
|
|
2371
|
-
((
|
|
2781
|
+
return this.tabList.length && +((e = [...this.tabList].sort((s, i) => {
|
|
2782
|
+
var A, h, n, u;
|
|
2783
|
+
const a = new Date(
|
|
2784
|
+
((A = s.data) == null ? void 0 : A.createdAt) || ((h = s.data) == null ? void 0 : h.lastActive) || 0
|
|
2372
2785
|
).getTime(), l = new Date(
|
|
2373
|
-
((
|
|
2786
|
+
((n = i.data) == null ? void 0 : n.createdAt) || ((u = i.data) == null ? void 0 : u.lastActive) || 0
|
|
2374
2787
|
).getTime();
|
|
2375
|
-
return
|
|
2788
|
+
return a === l ? (+s.id || 0) - (+i.id || 0) : a - l;
|
|
2376
2789
|
})[0]) == null ? void 0 : e.id) || 0;
|
|
2377
2790
|
}
|
|
2378
2791
|
async runAsLeader() {
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2792
|
+
var i, a;
|
|
2793
|
+
const t = String(((a = (i = this.bx) == null ? void 0 : i.userInfo) == null ? void 0 : a.ID) ?? "0"), e = `background-worker:${this.entityName}:${t}`;
|
|
2794
|
+
(await me(
|
|
2795
|
+
e,
|
|
2796
|
+
async () => {
|
|
2797
|
+
this.hasStarted = !0;
|
|
2798
|
+
const l = Math.min(
|
|
2799
|
+
this.activeMaxPause - 1500,
|
|
2800
|
+
Math.max(2500, Math.floor(this.pollInterval / 2))
|
|
2386
2801
|
);
|
|
2802
|
+
this.runHeartbeat = setInterval(
|
|
2803
|
+
() => {
|
|
2804
|
+
this.updateTabState(!0).catch(
|
|
2805
|
+
(A) => console.error(
|
|
2806
|
+
"BackgroundWorker: heartbeat update failed",
|
|
2807
|
+
A
|
|
2808
|
+
)
|
|
2809
|
+
);
|
|
2810
|
+
},
|
|
2811
|
+
l
|
|
2812
|
+
);
|
|
2813
|
+
try {
|
|
2814
|
+
await this.appInit();
|
|
2815
|
+
} catch (A) {
|
|
2816
|
+
console.error("BackgroundWorker: appInit failed", A);
|
|
2817
|
+
}
|
|
2818
|
+
this.stopTimers(), this.id && (await this.deleteTabs([{ id: this.id }]), this.id = 0);
|
|
2387
2819
|
},
|
|
2388
|
-
|
|
2820
|
+
{ ifAvailable: !0 }
|
|
2821
|
+
)).skipped && console.log(
|
|
2822
|
+
"BackgroundWorker: runAsLeader пропущен — Web Lock у другой вкладки (тот же фоновый воркер)"
|
|
2389
2823
|
);
|
|
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);
|
|
2396
2824
|
}
|
|
2397
2825
|
async setBackgroundWorkerAll() {
|
|
2398
|
-
var
|
|
2399
|
-
if (!((
|
|
2826
|
+
var T, _, R, N;
|
|
2827
|
+
if (!((T = this.bx) != null && T.isAdmin)) {
|
|
2400
2828
|
console.log(
|
|
2401
2829
|
"BackgroundWorker: setBackgroundWorkerAll доступен только админам"
|
|
2402
2830
|
);
|
|
2403
2831
|
return;
|
|
2404
2832
|
}
|
|
2405
|
-
(
|
|
2406
|
-
const
|
|
2833
|
+
(_ = this.users) != null && _.length || await this.getEntityData(), Gt(this.bx);
|
|
2834
|
+
const t = E(this, mt, xt).call(this, ((N = (R = this.bx) == null ? void 0 : R.appConst) == null ? void 0 : N.pathApp) ?? "");
|
|
2835
|
+
if (!t) {
|
|
2836
|
+
console.error(
|
|
2837
|
+
"BackgroundWorker: setBackgroundWorkerAll — нет валидного pathApp, привязка PAGE_BACKGROUND_WORKER пропущена"
|
|
2838
|
+
);
|
|
2839
|
+
return;
|
|
2840
|
+
}
|
|
2841
|
+
const e = await this.safeCall(
|
|
2407
2842
|
() => this.bx.getPlacement()
|
|
2408
|
-
),
|
|
2843
|
+
), s = /* @__PURE__ */ new Map();
|
|
2409
2844
|
let i = null;
|
|
2410
|
-
(
|
|
2411
|
-
if (
|
|
2845
|
+
(e || []).forEach((y) => {
|
|
2846
|
+
if (y.placement !== "PAGE_BACKGROUND_WORKER")
|
|
2412
2847
|
return;
|
|
2413
|
-
if (
|
|
2414
|
-
const
|
|
2415
|
-
|
|
2848
|
+
if (y.userId || y.handler && y.handler.includes("USER_ID=")) {
|
|
2849
|
+
const I = y.userId || (y.handler ? this.extractUserIdFromHandler(y.handler) : null);
|
|
2850
|
+
I && s.set(+I, y);
|
|
2416
2851
|
} else
|
|
2417
|
-
i =
|
|
2852
|
+
i = y;
|
|
2418
2853
|
});
|
|
2419
|
-
const
|
|
2420
|
-
|
|
2421
|
-
const
|
|
2422
|
-
return (
|
|
2854
|
+
const a = await this.resolveAdmins(), l = await this.getEligibleUsersForBackgroundWorker(a);
|
|
2855
|
+
l.sort((y, L) => {
|
|
2856
|
+
const I = y.LAST_LOGIN ? new Date(y.LAST_LOGIN) : /* @__PURE__ */ new Date(0);
|
|
2857
|
+
return (L.LAST_LOGIN ? new Date(L.LAST_LOGIN) : /* @__PURE__ */ new Date(0)) - I;
|
|
2423
2858
|
});
|
|
2424
|
-
const
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
const
|
|
2429
|
-
|
|
2859
|
+
const A = 10, h = l.slice(0, A), n = h.filter((y) => {
|
|
2860
|
+
const L = s.get(+y.ID);
|
|
2861
|
+
if (!L)
|
|
2862
|
+
return !0;
|
|
2863
|
+
const I = `${t}?USER_ID=${y.ID}/`;
|
|
2864
|
+
return L.handler !== I;
|
|
2865
|
+
}), u = [];
|
|
2866
|
+
for (const [y] of s) {
|
|
2867
|
+
const L = +y || 0;
|
|
2868
|
+
l.find((H) => +H.ID === L) || u.push(L);
|
|
2430
2869
|
}
|
|
2431
|
-
const
|
|
2432
|
-
|
|
2433
|
-
|
|
2870
|
+
for (const y of h) {
|
|
2871
|
+
const L = s.get(+y.ID);
|
|
2872
|
+
if (!L)
|
|
2873
|
+
continue;
|
|
2874
|
+
const I = `${t}?USER_ID=${y.ID}/`;
|
|
2875
|
+
L.handler !== I && u.push(+y.ID);
|
|
2876
|
+
}
|
|
2877
|
+
const m = [];
|
|
2878
|
+
for (const y of u)
|
|
2879
|
+
m.push({
|
|
2434
2880
|
method: "placement.unbind",
|
|
2435
2881
|
params: {
|
|
2436
2882
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2437
|
-
HANDLER: `${
|
|
2883
|
+
HANDLER: `${t}?USER_ID=${y}/`
|
|
2438
2884
|
}
|
|
2439
2885
|
});
|
|
2440
|
-
const
|
|
2441
|
-
|
|
2886
|
+
const c = i && (n.length > 0 || i.handler !== `${t}`);
|
|
2887
|
+
c && m.push({
|
|
2442
2888
|
method: "placement.unbind",
|
|
2443
2889
|
params: {
|
|
2444
2890
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2445
|
-
HANDLER: i.handler || `${
|
|
2891
|
+
HANDLER: i.handler || `${t}`
|
|
2446
2892
|
}
|
|
2447
2893
|
});
|
|
2448
|
-
for (const
|
|
2449
|
-
|
|
2894
|
+
for (const y of n)
|
|
2895
|
+
m.push({
|
|
2450
2896
|
method: "placement.bind",
|
|
2451
2897
|
params: {
|
|
2452
2898
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2453
|
-
HANDLER: `${
|
|
2899
|
+
HANDLER: `${t}?USER_ID=${y.ID}/`,
|
|
2454
2900
|
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
2455
2901
|
OPTIONS: {
|
|
2456
|
-
errorHandlerUrl: `${
|
|
2902
|
+
errorHandlerUrl: `${t}?USER_ID=${y.ID}/`
|
|
2457
2903
|
},
|
|
2458
|
-
USER_ID:
|
|
2904
|
+
USER_ID: y.ID
|
|
2459
2905
|
}
|
|
2460
2906
|
});
|
|
2461
|
-
(!i ||
|
|
2907
|
+
(!i || c) && m.push({
|
|
2462
2908
|
method: "placement.bind",
|
|
2463
2909
|
params: {
|
|
2464
2910
|
PLACEMENT: "PAGE_BACKGROUND_WORKER",
|
|
2465
|
-
HANDLER: `${
|
|
2911
|
+
HANDLER: `${t}`,
|
|
2466
2912
|
LANG_ALL: { ru: { TITLE: this.appName } },
|
|
2467
|
-
OPTIONS: { errorHandlerUrl: `${
|
|
2913
|
+
OPTIONS: { errorHandlerUrl: `${t}` }
|
|
2468
2914
|
}
|
|
2469
2915
|
});
|
|
2470
|
-
const
|
|
2471
|
-
(
|
|
2472
|
-
),
|
|
2473
|
-
(
|
|
2916
|
+
const f = m.filter(
|
|
2917
|
+
(y) => y.method === "placement.unbind"
|
|
2918
|
+
), O = m.filter(
|
|
2919
|
+
(y) => y.method === "placement.bind"
|
|
2474
2920
|
);
|
|
2475
|
-
|
|
2921
|
+
f.length && await this.safeCall(
|
|
2476
2922
|
() => this.bx.batch(
|
|
2477
2923
|
Object.fromEntries(
|
|
2478
|
-
|
|
2924
|
+
f.map((y, L) => [`unbind_${L}`, y])
|
|
2479
2925
|
)
|
|
2480
2926
|
)
|
|
2481
|
-
),
|
|
2927
|
+
), O.length && await this.safeCall(
|
|
2482
2928
|
() => this.bx.batch(
|
|
2483
2929
|
Object.fromEntries(
|
|
2484
|
-
|
|
2930
|
+
O.map((y, L) => [`bind_${L}`, y])
|
|
2485
2931
|
)
|
|
2486
2932
|
)
|
|
2487
|
-
),
|
|
2933
|
+
), m.length || console.log("setBackgroundWorkerAll: Нет операций");
|
|
2488
2934
|
}
|
|
2489
2935
|
async resolveAdmins() {
|
|
2490
|
-
var
|
|
2936
|
+
var t, e;
|
|
2491
2937
|
try {
|
|
2492
|
-
const
|
|
2493
|
-
if (!
|
|
2494
|
-
if (
|
|
2495
|
-
const h =
|
|
2496
|
-
(
|
|
2938
|
+
const s = +(((t = this.bx.userInfo) == null ? void 0 : t.ID) ?? 0), i = !!((e = this.bx) != null && e.isAdmin), a = await this.getAdminsList() || [];
|
|
2939
|
+
if (!i) {
|
|
2940
|
+
if (s && a.includes(+s)) {
|
|
2941
|
+
const h = a.filter(
|
|
2942
|
+
(n) => +n != +s
|
|
2497
2943
|
);
|
|
2498
2944
|
return await this.saveAdminsList(h), h;
|
|
2499
2945
|
}
|
|
2500
|
-
return
|
|
2946
|
+
return a;
|
|
2501
2947
|
}
|
|
2502
|
-
const l = /* @__PURE__ */ new Set([...
|
|
2503
|
-
|
|
2504
|
-
const
|
|
2505
|
-
return await this.saveAdminsList(
|
|
2506
|
-
} catch (
|
|
2507
|
-
return console.error("BackgroundWorker: resolveAdmins error",
|
|
2948
|
+
const l = /* @__PURE__ */ new Set([...a || []]);
|
|
2949
|
+
s && l.add(+s);
|
|
2950
|
+
const A = [...l].filter(Boolean);
|
|
2951
|
+
return await this.saveAdminsList(A), A;
|
|
2952
|
+
} catch (s) {
|
|
2953
|
+
return console.error("BackgroundWorker: resolveAdmins error", s), [];
|
|
2508
2954
|
}
|
|
2509
2955
|
}
|
|
2510
|
-
async getEligibleUsersForBackgroundWorker(
|
|
2956
|
+
async getEligibleUsersForBackgroundWorker(t = []) {
|
|
2511
2957
|
const e = (this.users ?? []).filter(
|
|
2512
|
-
(
|
|
2513
|
-
),
|
|
2514
|
-
return e.filter((
|
|
2958
|
+
(i) => i.ACTIVE === "Y" || i.ACTIVE === !0
|
|
2959
|
+
), s = t.map((i) => +i || 0).filter(Boolean);
|
|
2960
|
+
return e.filter((i) => s.includes(+i.ID || 0));
|
|
2515
2961
|
}
|
|
2516
|
-
async saveAdminsList(
|
|
2962
|
+
async saveAdminsList(t = []) {
|
|
2517
2963
|
try {
|
|
2518
|
-
BX24.appOption.set("adminsList", JSON.stringify(
|
|
2964
|
+
BX24.appOption.set("adminsList", JSON.stringify(t));
|
|
2519
2965
|
} catch (e) {
|
|
2520
2966
|
console.error("BackgroundWorker: saveAdminsList error", e);
|
|
2521
2967
|
}
|
|
2522
2968
|
}
|
|
2523
2969
|
async getAdminsList() {
|
|
2524
2970
|
try {
|
|
2525
|
-
const
|
|
2526
|
-
return Array.isArray(e) ? e.map((
|
|
2527
|
-
} catch (
|
|
2528
|
-
return console.error("BackgroundWorker: getAdminsList error",
|
|
2971
|
+
const t = BX24.appOption.get("adminsList"), e = t ? JSON.parse(t) : [];
|
|
2972
|
+
return Array.isArray(e) ? e.map((s) => +s || 0).filter(Boolean) : [];
|
|
2973
|
+
} catch (t) {
|
|
2974
|
+
return console.error("BackgroundWorker: getAdminsList error", t), [];
|
|
2529
2975
|
}
|
|
2530
2976
|
}
|
|
2531
2977
|
async getEntityData() {
|
|
2532
|
-
const
|
|
2978
|
+
const t = {
|
|
2533
2979
|
users: { method: "user.get", params: { filter: { ACTIVE: "Y" } } }
|
|
2534
2980
|
}, { users: e } = await this.safeCall(
|
|
2535
|
-
() => this.bx.batch(
|
|
2981
|
+
() => this.bx.batch(t).then((s) => s ? (Array.isArray(s.users) || (s.users = []), s) : { users: [] })
|
|
2536
2982
|
);
|
|
2537
2983
|
this.users = e;
|
|
2538
2984
|
}
|
|
@@ -2541,30 +2987,38 @@ class Mt {
|
|
|
2541
2987
|
* (общая и индивидуальные) и что список пользователей подгружен.
|
|
2542
2988
|
*/
|
|
2543
2989
|
async ensureAdminPlacements() {
|
|
2544
|
-
var
|
|
2545
|
-
(
|
|
2990
|
+
var t, e;
|
|
2991
|
+
(t = this.bx) != null && t.isAdmin && ((e = this.users) != null && e.length || await this.getEntityData(), await this.setBackgroundWorkerAll());
|
|
2546
2992
|
}
|
|
2547
|
-
pause(
|
|
2548
|
-
return new Promise((
|
|
2993
|
+
pause(t = 500, e) {
|
|
2994
|
+
return new Promise((s) => {
|
|
2549
2995
|
setTimeout(() => {
|
|
2550
|
-
e && e(),
|
|
2551
|
-
},
|
|
2996
|
+
e && e(), s(!0);
|
|
2997
|
+
}, t);
|
|
2552
2998
|
});
|
|
2553
2999
|
}
|
|
2554
|
-
async safeCall(
|
|
3000
|
+
async safeCall(t) {
|
|
2555
3001
|
try {
|
|
2556
|
-
return await
|
|
3002
|
+
return await t();
|
|
2557
3003
|
} catch (e) {
|
|
2558
3004
|
console.error("BackgroundWorker: safeCall error", e);
|
|
2559
3005
|
return;
|
|
2560
3006
|
}
|
|
2561
3007
|
}
|
|
2562
3008
|
}
|
|
3009
|
+
mt = new WeakSet(), xt = function(t) {
|
|
3010
|
+
if (!t || typeof t != "string")
|
|
3011
|
+
return "";
|
|
3012
|
+
const e = Ft(t).replace(/\/+$/, "");
|
|
3013
|
+
return e ? $t(e) ? (console.error(
|
|
3014
|
+
"BackgroundWorker: pathApp не должен указывать на /marketplace/app/… Откройте приложение во встроенном iframe (entry CDN), не в оболочке маркетплейса."
|
|
3015
|
+
), "") : e : "";
|
|
3016
|
+
};
|
|
2563
3017
|
export {
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
3018
|
+
ye as BackgroundWorker,
|
|
3019
|
+
v as Batch,
|
|
3020
|
+
ge as BxBoot,
|
|
3021
|
+
zt as BxHelper,
|
|
3022
|
+
ce as BxLogger,
|
|
3023
|
+
dt as tempus
|
|
2570
3024
|
};
|