szdl-utils-kit 0.2.30 → 0.3.5

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