@igo2/utils 21.0.0-next.1 → 21.0.0-next.3

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.
@@ -1,4 +1,4 @@
1
- import { Observable, Subject } from 'rxjs';
1
+ import { of, Observable, Subject } from 'rxjs';
2
2
  import { distinctUntilChanged } from 'rxjs/operators';
3
3
 
4
4
  /* eslint-disable */
@@ -132,13 +132,13 @@ class Compression {
132
132
  }
133
133
  compressBlob(blob) {
134
134
  if (!blob) {
135
- return;
135
+ return of(null);
136
136
  }
137
137
  const observable = new Observable((observer) => {
138
138
  const reader = new FileReader();
139
139
  reader.readAsDataURL(blob);
140
140
  reader.onload = () => {
141
- const base64 = reader.result.valueOf();
141
+ const base64 = reader.result?.valueOf();
142
142
  const text64 = base64.substr(base64.indexOf(',') + 1);
143
143
  const compressed = this.compressStringBase64(text64);
144
144
  const compressedData = {
@@ -171,6 +171,9 @@ class Compression {
171
171
  let rem;
172
172
  for (const c of s) {
173
173
  const value = this.base64Index.get(c);
174
+ if (value === undefined) {
175
+ continue;
176
+ }
174
177
  if (bits > 6) {
175
178
  bits -= 6;
176
179
  chr += value << bits;
@@ -189,9 +192,6 @@ class Compression {
189
192
  return String.fromCharCode(9731) + out;
190
193
  }
191
194
  decompressStringBase64(c, length) {
192
- if (!c) {
193
- return;
194
- }
195
195
  if (c.charCodeAt(0) !== 9731) {
196
196
  return c;
197
197
  }
@@ -279,38 +279,41 @@ class StringUtils {
279
279
  }
280
280
  static getChanges(s1, s2, m, p) {
281
281
  const isThisLonger = s1.length >= s1.length ? true : false;
282
- let [longer, shorter] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring
282
+ const [longer, shorter_init] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring
283
+ let shorter = shorter_init;
283
284
  let bi = 0; // base index designating the index of first mismacthing character in both strings
284
285
  while (shorter[bi] === longer[bi] && bi < shorter.length) {
285
286
  ++bi;
286
287
  } // make bi the index of first mismatching character
287
- longer = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array
288
+ const longerArr = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array
288
289
  shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character
289
- const len = longer.length; // length of the longer string
290
+ const len = longerArr.length; // length of the longer string
290
291
  let cd = {
291
292
  fis: shorter.length, // the index of matching string in the shorter string
292
293
  fil: len, // the index of matching string in the longer string
293
294
  sbs: '', // the matching substring itself
294
- mtc: m + s2.slice(0, bi)
295
+ mtc: m + s2.slice(0, bi),
296
+ del: '',
297
+ ins: ''
295
298
  }; // if exists mtc holds the matching string at the front
296
- let sub = { sbs: '' }; // returned substring per 1 character rotation of the longer string
299
+ let sub = { fis: cd.fis, fil: cd.fil, sbs: '', mtc: cd.mtc }; // returned substring per 1 character rotation of the longer string
297
300
  if (shorter !== '') {
298
301
  for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {
299
302
  // rc -> rotate count, p -> precision factor
300
- sub = StringUtils.getMatchingSubstring(shorter, StringUtils.rotateArray(longer, rc), cd.mtc); // rotate longer string 1 char and get substring
303
+ sub = StringUtils.getMatchingSubstring(shorter, StringUtils.rotateArray(longerArr, rc), cd.mtc); // rotate longer string 1 char and get substring
301
304
  sub.fil =
302
305
  rc < len - sub.fis
303
306
  ? sub.fis + rc // mismatch is longer than the mismatch in short
304
307
  : sub.fis - len + rc; // mismatch is shorter than the mismatch in short
305
308
  if (sub.sbs.length > cd.sbs.length) {
306
- cd = sub; // only keep the one with the longest substring.
309
+ cd = { ...cd, ...sub }; // only keep the one with the longest substring.
307
310
  }
308
311
  }
309
312
  }
310
313
  // insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring
311
314
  [cd.del, cd.ins] = isThisLonger
312
- ? [longer.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]
313
- : [shorter.slice(0, cd.fis), longer.slice(0, cd.fil).join('')];
315
+ ? [longerArr.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]
316
+ : [shorter.slice(0, cd.fis), longerArr.slice(0, cd.fil).join('')];
314
317
  return cd.del.indexOf(' ') === -1 ||
315
318
  cd.ins.indexOf(' ') === -1 ||
316
319
  cd.del === '' ||
@@ -342,6 +345,7 @@ class StringUtils {
342
345
  }
343
346
  }
344
347
 
348
+ /* eslint-disable @typescript-eslint/no-explicit-any */
345
349
  class ChangeUtils {
346
350
  static findChanges(obj1, obj2, ignoreKeys = []) {
347
351
  const items = {
@@ -445,13 +449,14 @@ function resolveDate(input) {
445
449
  if (isTimeFrame(input)) {
446
450
  return new Date();
447
451
  }
448
- return input instanceof Date ? input : undefined;
452
+ return input instanceof Date ? input : null;
449
453
  }
450
454
 
451
455
  class DomUtils {
452
456
  static create(doc, tagName, options) {
453
457
  const el = doc.createElement(tagName);
454
458
  for (const key in options) {
459
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
455
460
  el[key] = options[key];
456
461
  }
457
462
  return el;
@@ -470,10 +475,11 @@ async function createExcelWorkBook(workSheet, workSheetName) {
470
475
  }
471
476
  async function addExcelSheetToWorkBook(title, rows, workBook, opts) {
472
477
  const { utils } = await import('xlsx');
473
- const worksheet = utils.json_to_sheet(rows, opts?.json2SheetOpts);
478
+ const values = typeof rows === 'string' ? JSON.parse(rows) : rows;
479
+ const worksheet = utils.json_to_sheet(values, opts?.json2SheetOpts);
474
480
  /* calculate column width */
475
481
  if (rows?.length) {
476
- worksheet['!cols'] = getColumnsInfo(rows);
482
+ worksheet['!cols'] = getColumnsInfo(values);
477
483
  }
478
484
  const SHEET_NAME_MAX_LENGTH = 31;
479
485
  let sheetName = title.length >= SHEET_NAME_MAX_LENGTH
@@ -549,24 +555,32 @@ function isValidJSON(jsonString) {
549
555
  /* eslint-disable no-prototype-builtins */
550
556
  class ObjectUtils {
551
557
  static resolve(obj, key) {
552
- const keysArray = key.replace(/\[/g, '.').replace(/\]/g, '').split('.');
558
+ const keysArray = String(key)
559
+ .replace(/\[/g, '.')
560
+ .replace(/\]/g, '')
561
+ .split('.');
553
562
  let current = obj;
563
+ let value = undefined;
554
564
  while (keysArray.length) {
555
- if (typeof current !== 'object') {
565
+ if (typeof current !== 'object' || current === null) {
556
566
  return undefined;
557
567
  }
558
- current = current[keysArray.shift()];
568
+ const k = keysArray.shift();
569
+ value = current = current[k];
559
570
  }
560
- return current;
571
+ return value;
561
572
  }
562
573
  static isObject(item) {
563
- return (item &&
574
+ return (!!item &&
564
575
  typeof item === 'object' &&
565
576
  !Array.isArray(item) &&
566
577
  item !== null &&
567
578
  !(item instanceof Date));
568
579
  }
569
- static mergeDeep(target, source, ignoreUndefined = false) {
580
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
581
+ static mergeDeep(target,
582
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
583
+ source, ignoreUndefined = false) {
570
584
  const output = Object.assign({}, target);
571
585
  if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {
572
586
  Object.keys(source)
@@ -587,21 +601,29 @@ class ObjectUtils {
587
601
  }
588
602
  return output;
589
603
  }
604
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
590
605
  static copyDeep(src) {
591
- const target = Array.isArray(src) ? [] : {};
592
- for (const prop in src) {
593
- if (src.hasOwnProperty(prop)) {
594
- const value = src[prop];
595
- if (value && typeof value === 'object') {
596
- target[prop] = this.copyDeep(value);
597
- }
598
- else {
599
- target[prop] = value;
606
+ if (Array.isArray(src)) {
607
+ return src.map((item) => typeof item === 'object' && item !== null
608
+ ? this.copyDeep(item)
609
+ : item);
610
+ }
611
+ else if (this.isObject(src)) {
612
+ const target = {};
613
+ for (const prop in src) {
614
+ if (src.hasOwnProperty(prop)) {
615
+ const value = src[prop];
616
+ target[prop] =
617
+ value && typeof value === 'object'
618
+ ? this.copyDeep(value)
619
+ : value;
600
620
  }
601
621
  }
622
+ return target;
602
623
  }
603
- return target;
624
+ return src;
604
625
  }
626
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
605
627
  static removeDuplicateCaseInsensitive(obj) {
606
628
  const summaryCapitalizeObject = {};
607
629
  const capitalizeObject = {};
@@ -619,7 +641,7 @@ class ObjectUtils {
619
641
  [property]: obj[property]
620
642
  });
621
643
  }
622
- // counting the number of uppercase lettersMna
644
+ // counting the number of uppercase letters
623
645
  upperCaseCount.push({
624
646
  key: property,
625
647
  count: property.replace(/[^A-Z]/g, '').length
@@ -628,24 +650,22 @@ class ObjectUtils {
628
650
  }
629
651
  for (const capitalizedProperty in summaryCapitalizeObject) {
630
652
  if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {
631
- if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {
632
- const capitalizedPropertyObject = summaryCapitalizeObject[capitalizedProperty];
633
- if (capitalizedPropertyObject.length === 1) {
634
- // for single params (no duplicates)
635
- const singlePossibility = capitalizedPropertyObject[0];
636
- capitalizeObject[capitalizedProperty] =
637
- singlePossibility[Object.keys(singlePossibility)[0]];
638
- }
639
- else if (capitalizedPropertyObject.length > 1) {
640
- // defining the closest to lowercase property
641
- const paramClosestToLowercase = upperCaseCount
642
- .filter((f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase())
643
- .reduce((prev, current) => {
644
- return prev.y < current.y ? prev : current;
645
- });
646
- capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =
647
- obj[paramClosestToLowercase.key];
648
- }
653
+ const capitalizedPropertyObject = summaryCapitalizeObject[capitalizedProperty];
654
+ if (capitalizedPropertyObject.length === 1) {
655
+ // for single params (no duplicates)
656
+ const singlePossibility = capitalizedPropertyObject[0];
657
+ capitalizeObject[capitalizedProperty] =
658
+ singlePossibility[Object.keys(singlePossibility)[0]];
659
+ }
660
+ else if (capitalizedPropertyObject.length > 1) {
661
+ // defining the closest to lowercase property
662
+ const paramClosestToLowercase = upperCaseCount
663
+ .filter((f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase())
664
+ .reduce((prev, current) => {
665
+ return prev.count < current.count ? prev : current;
666
+ });
667
+ capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =
668
+ obj[paramClosestToLowercase.key];
649
669
  }
650
670
  }
651
671
  }
@@ -660,29 +680,40 @@ class ObjectUtils {
660
680
  }
661
681
  }
662
682
  }
683
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
663
684
  static removeUndefined(obj) {
664
- const output = {};
685
+ if (Array.isArray(obj)) {
686
+ return obj
687
+ .filter((item) => item !== undefined)
688
+ .map((item) => typeof item === 'object'
689
+ ? ObjectUtils.removeUndefined(item)
690
+ : item);
691
+ }
665
692
  if (ObjectUtils.isObject(obj)) {
693
+ const output = {};
666
694
  Object.keys(obj)
667
695
  .filter((key) => obj[key] !== undefined)
668
696
  .forEach((key) => {
669
- if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {
670
- output[key] = ObjectUtils.removeUndefined(obj[key]);
671
- }
672
- else {
673
- output[key] = obj[key];
674
- }
697
+ output[key] =
698
+ typeof obj[key] === 'object'
699
+ ? ObjectUtils.removeUndefined(obj[key])
700
+ : obj[key];
675
701
  });
676
702
  return output;
677
703
  }
678
- if (Array.isArray(obj)) {
679
- return obj.map((o) => ObjectUtils.removeUndefined(o));
680
- }
681
704
  return obj;
682
705
  }
706
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
683
707
  static removeNull(obj) {
684
- const output = {};
708
+ if (Array.isArray(obj)) {
709
+ return obj
710
+ .filter((item) => item !== null)
711
+ .map((item) => typeof item === 'object'
712
+ ? ObjectUtils.removeNull(item)
713
+ : item);
714
+ }
685
715
  if (ObjectUtils.isObject(obj)) {
716
+ const output = {};
686
717
  Object.keys(obj)
687
718
  .filter((key) => obj[key] !== null)
688
719
  .forEach((key) => {
@@ -695,14 +726,11 @@ class ObjectUtils {
695
726
  });
696
727
  return output;
697
728
  }
698
- if (Array.isArray(obj)) {
699
- return obj.map((o) => ObjectUtils.removeNull(o));
700
- }
701
729
  return obj;
702
730
  }
703
731
  static naturalCompare(a, b, direction = 'asc', nullsFirst) {
704
732
  if (direction === 'desc') {
705
- b = [a, (a = b)][0];
733
+ [a, b] = [b, a];
706
734
  }
707
735
  // nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'
708
736
  // nullsFirst = true : always first
@@ -733,13 +761,15 @@ class ObjectUtils {
733
761
  }
734
762
  const ax = [];
735
763
  const bx = [];
736
- a = '' + a;
737
- b = '' + b;
738
- a.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
739
- ax.push([$1 || Infinity, $2 || '']);
764
+ const aStr = '' + a;
765
+ const bStr = '' + b;
766
+ aStr.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
767
+ ax.push([$1 ? Number($1) : Infinity, $2 ?? '']);
768
+ return '';
740
769
  });
741
- b.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
742
- bx.push([$1 || Infinity, $2 || '']);
770
+ bStr.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
771
+ bx.push([$1 ? Number($1) : Infinity, $2 ?? '']);
772
+ return '';
743
773
  });
744
774
  while (ax.length && bx.length) {
745
775
  const an = ax.shift();
@@ -757,7 +787,7 @@ class ObjectUtils {
757
787
  * if all of their properties (first-level only) share the same value.
758
788
  * @param obj1 First object
759
789
  * @param obj2 Second object
760
- * @returns Whether two objects arer equivalent
790
+ * @returns Whether two objects are equivalent
761
791
  */
762
792
  static objectsAreEquivalent(obj1, obj2) {
763
793
  if (obj1 === obj2) {
@@ -782,13 +812,12 @@ class ObjectUtils {
782
812
  * @returns A new object
783
813
  */
784
814
  static removeKeys(obj, keys) {
785
- const newObj = Object.keys(obj)
815
+ return Object.keys(obj)
786
816
  .filter((key) => keys.indexOf(key) < 0)
787
817
  .reduce((_obj, key) => {
788
818
  _obj[key] = obj[key];
789
819
  return _obj;
790
820
  }, {});
791
- return newObj;
792
821
  }
793
822
  static isEmpty(obj) {
794
823
  return Object.keys(obj).length === 0;
@@ -880,8 +909,11 @@ class Tree {
880
909
  const clonedBeforeTo = [...beforeTo];
881
910
  const lastIndex = clonedBeforeTo.pop();
882
911
  const recipient = this.getAncestorAtPosition(clonedBeforeTo);
912
+ if (!recipient) {
913
+ return;
914
+ }
883
915
  const beforeId = lastIndex === -1 || lastIndex >= recipient.length
884
- ? null
916
+ ? undefined
885
917
  : this.getId(recipient[lastIndex]);
886
918
  const nodesToMove = nodes.filter((node) => beforeId !== this.getId(node));
887
919
  return this.move(beforeId, recipient, ...nodesToMove);
@@ -903,11 +935,11 @@ class Tree {
903
935
  return nodes.reduce((acc, node) => {
904
936
  const ancestor = this.getNodeAncestor(node);
905
937
  if (!ancestor) {
906
- return;
938
+ return acc;
907
939
  }
908
940
  const index = this.getIndex(this.getId(node), ancestor);
909
941
  if (index === -1) {
910
- return;
942
+ return acc;
911
943
  }
912
944
  ancestor.splice(index, 1);
913
945
  return acc.concat(node);
@@ -947,6 +979,9 @@ class Tree {
947
979
  return this._data;
948
980
  }
949
981
  const node = this.getNodeByPosition(position);
982
+ if (!node) {
983
+ return;
984
+ }
950
985
  return this.getChildren(node);
951
986
  }
952
987
  /** Recursive */
@@ -988,8 +1023,8 @@ class Tree {
988
1023
  const ancestor = previousValue
989
1024
  ? this.getChildren(previousValue)
990
1025
  : this._data;
991
- return this._getByIndex(index, ancestor);
992
- }, null);
1026
+ return this._getByIndex(index, ancestor ?? undefined);
1027
+ }, undefined);
993
1028
  }
994
1029
  else {
995
1030
  return this._getByIndex(indexes[0]);
@@ -1075,10 +1110,7 @@ class Watcher {
1075
1110
  }
1076
1111
  unsubscribe() {
1077
1112
  this.unwatch();
1078
- if (this.status$$ !== undefined) {
1079
- this.status$$.unsubscribe();
1080
- this.status$$ = undefined;
1081
- }
1113
+ this.status$$?.unsubscribe();
1082
1114
  this.status = SubjectStatus.Waiting;
1083
1115
  }
1084
1116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-utils.mjs","sources":["../../../packages/utils/src/lib/base64.ts","../../../packages/utils/src/lib/cache.utils.ts","../../../packages/utils/src/lib/compression/compression.utils.ts","../../../packages/utils/src/lib/change.interface.ts","../../../packages/utils/src/lib/string-utils.ts","../../../packages/utils/src/lib/change.ts","../../../packages/utils/src/lib/date.utils.ts","../../../packages/utils/src/lib/dom.utils.ts","../../../packages/utils/src/lib/files/excel.ts","../../../packages/utils/src/lib/files/file.ts","../../../packages/utils/src/lib/object-utils.ts","../../../packages/utils/src/lib/number-utils.ts","../../../packages/utils/src/lib/strenum.ts","../../../packages/utils/src/lib/theme.utils.ts","../../../packages/utils/src/lib/tree/tree.ts","../../../packages/utils/src/lib/uuid.ts","../../../packages/utils/src/lib/watcher.ts","../../../packages/utils/src/public_api.ts","../../../packages/utils/src/igo2-utils.ts"],"sourcesContent":["/* eslint-disable */\n\nconst ALPHA =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nexport class Base64 {\n private static PADCHAR: string = '=';\n private static ALPHA: string = ALPHA;\n\n private static getByte(s: string, i: number): number {\n const x = s.charCodeAt(i);\n return x;\n }\n\n private static getByte64(s: string, i: number): number {\n const idx = this.ALPHA.indexOf(s.charAt(i));\n return idx;\n }\n\n public static decode(s: string): string {\n let pads = 0,\n i,\n b10,\n imax = s.length,\n x = [];\n\n s = String(s);\n\n if (imax === 0) {\n return s;\n }\n\n if (s.charAt(imax - 1) === this.PADCHAR) {\n pads = 1;\n if (s.charAt(imax - 2) === this.PADCHAR) {\n pads = 2;\n }\n imax -= 4;\n }\n\n for (i = 0; i < imax; i += 4) {\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6) |\n this.getByte64(s, i + 3);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255, b10 & 255));\n }\n\n switch (pads) {\n case 1:\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255));\n break;\n case 2:\n b10 = (this.getByte64(s, i) << 18) | (this.getByte64(s, i + 1) << 12);\n x.push(String.fromCharCode(b10 >> 16));\n break;\n }\n\n return x.join('');\n }\n\n public static encode(s: string): string {\n s = String(s);\n\n let i,\n b10,\n x = [],\n imax = s.length - (s.length % 3);\n\n if (s.length === 0) {\n return s;\n }\n\n for (i = 0; i < imax; i += 3) {\n b10 =\n (this.getByte(s, i) << 16) |\n (this.getByte(s, i + 1) << 8) |\n this.getByte(s, i + 2);\n x.push(this.ALPHA.charAt(b10 >> 18));\n x.push(this.ALPHA.charAt((b10 >> 12) & 63));\n x.push(this.ALPHA.charAt((b10 >> 6) & 63));\n x.push(this.ALPHA.charAt(b10 & 63));\n }\n\n switch (s.length - imax) {\n case 1:\n b10 = this.getByte(s, i) << 16;\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.PADCHAR +\n this.PADCHAR\n );\n break;\n case 2:\n b10 = (this.getByte(s, i) << 16) | (this.getByte(s, i + 1) << 8);\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.ALPHA.charAt((b10 >> 6) & 63) +\n this.PADCHAR\n );\n break;\n }\n\n return x.join('');\n }\n}\n","export function customCacheHasher(parameters: unknown[]): unknown[] {\n return parameters.map((param) => {\n if (\n typeof param === 'object' &&\n param != null &&\n typeof param.toString === 'function'\n ) {\n return param.toString();\n }\n return param !== undefined ? JSON.parse(JSON.stringify(param)) : param;\n });\n}\n","import { Observable, Observer } from 'rxjs';\n\nimport { CompressedData } from './compressedData.interface';\n\nfunction getNumber(v: number, endposition: number, length: number) {\n const mask = (1 << length) - 1;\n return (v >> endposition) & mask;\n}\n\nexport class Compression {\n private base64Index = new Map<string, number>();\n private indexBase64 = new Map<number, string>();\n\n constructor() {\n this.generateBase64Index();\n }\n\n private generateBase64Index() {\n // https://fr.wikipedia.org/wiki/Base64\n // A-Z => [0, 25]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('A'.charCodeAt(0) + i), i);\n this.indexBase64.set(i, String.fromCharCode('A'.charCodeAt(0) + i));\n }\n // a-z => [26, 51]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('a'.charCodeAt(0) + i), i + 26);\n this.indexBase64.set(i + 26, String.fromCharCode('a'.charCodeAt(0) + i));\n }\n // 0-9 => [52, 61]\n for (let i = 0; i < 10; i++) {\n this.base64Index.set(String.fromCharCode('0'.charCodeAt(0) + i), i + 52);\n this.indexBase64.set(i + 52, String.fromCharCode('0'.charCodeAt(0) + i));\n }\n // + / => [62, 63]\n this.base64Index.set('+', 62);\n this.base64Index.set('/', 63);\n this.indexBase64.set(62, '+');\n this.indexBase64.set(63, '/');\n }\n\n compressBlob(blob: Blob): Observable<CompressedData> {\n if (!blob) {\n return;\n }\n\n const observable = new Observable((observer: Observer<CompressedData>) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => {\n const base64 = reader.result.valueOf() as string;\n const text64 = base64.substr(base64.indexOf(',') + 1);\n const compressed = this.compressStringBase64(text64);\n const compressedData: CompressedData = {\n length: text64.length,\n type: blob.type,\n object: compressed\n };\n observer.next(compressedData);\n };\n });\n return observable;\n }\n\n decompressBlob(compressedData: CompressedData): Blob {\n const object = compressedData.object;\n const length = compressedData.length;\n const decompressed: string = this.decompressStringBase64(object, length);\n const byteCharacters = atob(decompressed);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: compressedData.type });\n return blob;\n }\n\n private compressStringBase64(s: string): string {\n let out = '';\n let bits = 16;\n let chr = 0;\n let rem: number;\n for (const c of s) {\n const value = this.base64Index.get(c);\n if (bits > 6) {\n bits -= 6;\n chr += value << bits;\n } else {\n rem = 6 - bits;\n chr += value >> rem;\n out += String.fromCharCode(chr);\n chr = value << (16 - rem);\n bits = 16 - rem;\n }\n }\n if (s.length % 8 !== 0) {\n out += String.fromCharCode(chr);\n }\n return String.fromCharCode(9731) + out;\n }\n\n private decompressStringBase64(c: string, length: number): string {\n if (!c) {\n return;\n }\n\n if (c.charCodeAt(0) !== 9731) {\n return c;\n }\n\n let chr: number;\n let rem: number;\n let bits = 16;\n let out = '';\n let j = 1;\n let value = c.charCodeAt(j);\n for (let i = 0; i < length; i++) {\n if (bits > 6) {\n bits -= 6;\n chr = getNumber(value, bits, 6);\n out += this.indexBase64.get(chr);\n } else {\n rem = 6 - bits;\n chr = getNumber(value, 0, bits) << rem;\n value = c.charCodeAt(++j);\n chr += getNumber(value, 16 - rem, rem);\n out += this.indexBase64.get(chr);\n bits = 16 - rem;\n }\n }\n return out;\n }\n}\n","export enum ChangeType {\n ADDED = 'added',\n DELETED = 'deleted',\n MODIFIED = 'modified'\n}\n\nexport interface Change {\n type: ChangeType;\n keysChanged?: {\n key: string;\n newValue: any;\n oldValue: any;\n }[];\n}\n\nexport interface GroupingChanges {\n added: ChangeItem[];\n deleted: ChangeItem[];\n modified: ChangeItem[];\n}\n\nexport interface ChangeItem {\n change: Change;\n value: any;\n oldValue?: any;\n newValue?: any;\n}\n","export class StringUtils {\n static diff(s1: string, s2: string, p = 4): string {\n if (!s1 && !s2) {\n return '';\n }\n if (!s1) {\n return '<span class=\"inserted\">' + s2 + '</span>';\n }\n if (!s2) {\n return '<span class=\"deleted\">' + s1 + '</span>';\n }\n s1 = s1.toString();\n s2 = s2.toString();\n const changeData = StringUtils.getChanges(s1, s2, '', p);\n const nextS = s2.slice(\n changeData.mtc.length + changeData.ins.length + changeData.sbs.length\n ); // remaining part of \"s\"\n const nextThis = s1.slice(\n changeData.mtc.length + changeData.del.length + changeData.sbs.length\n ); // remaining part of \"this\"\n let result: string; // the glorious result\n if (changeData.del.length > 0) {\n changeData.del = '<span class=\"deleted\">' + changeData.del + '</span>';\n }\n if (changeData.ins.length > 0) {\n changeData.ins = '<span class=\"inserted\">' + changeData.ins + '</span>';\n }\n result = changeData.mtc + changeData.del + changeData.ins + changeData.sbs;\n result +=\n nextThis !== '' || nextS !== ''\n ? StringUtils.diff(nextThis, nextS, p)\n : '';\n return result;\n }\n\n private static getMatchingSubstring(s, l, m) {\n // returns the first matching substring in-between the two strings\n let i = 0;\n let match = false;\n const slen = s.length;\n const o = { fis: slen, mtc: m, sbs: '' }; // temporary object used to construct the cd (change data) object\n\n while (i < slen) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n l[i] === s[i]\n ? match\n ? (o.sbs += s[i]) // o.sbs holds the matching substring itsef\n : ((match = true), (o.fis = i), (o.sbs = s[i]))\n : match\n ? (i = slen) // stop after the first found substring\n : // eslint-disable-next-line no-self-assign\n (i = i);\n ++i;\n }\n return o;\n }\n\n private static getChanges(s1, s2, m, p) {\n const isThisLonger = s1.length >= s1.length ? true : false;\n let [longer, shorter] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring\n let bi = 0; // base index designating the index of first mismacthing character in both strings\n\n while (shorter[bi] === longer[bi] && bi < shorter.length) {\n ++bi;\n } // make bi the index of first mismatching character\n longer = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array\n shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character\n\n const len = longer.length; // length of the longer string\n let cd: any = {\n fis: shorter.length, // the index of matching string in the shorter string\n fil: len, // the index of matching string in the longer string\n sbs: '', // the matching substring itself\n mtc: m + s2.slice(0, bi)\n }; // if exists mtc holds the matching string at the front\n let sub: any = { sbs: '' }; // returned substring per 1 character rotation of the longer string\n\n if (shorter !== '') {\n for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {\n // rc -> rotate count, p -> precision factor\n sub = StringUtils.getMatchingSubstring(\n shorter,\n StringUtils.rotateArray(longer, rc),\n cd.mtc\n ); // rotate longer string 1 char and get substring\n sub.fil =\n rc < len - sub.fis\n ? sub.fis + rc // mismatch is longer than the mismatch in short\n : sub.fis - len + rc; // mismatch is shorter than the mismatch in short\n if (sub.sbs.length > cd.sbs.length) {\n cd = sub; // only keep the one with the longest substring.\n }\n }\n }\n // insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring\n [cd.del, cd.ins] = isThisLonger\n ? [longer.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]\n : [shorter.slice(0, cd.fis), longer.slice(0, cd.fil).join('')];\n return cd.del.indexOf(' ') === -1 ||\n cd.ins.indexOf(' ') === -1 ||\n cd.del === '' ||\n cd.ins === '' ||\n cd.sbs === ''\n ? cd\n : StringUtils.getChanges(cd.del, cd.ins, cd.mtc, p);\n }\n\n private static rotateArray(array, n) {\n const len = array.length;\n const res = new Array(array.length);\n if (n % len === 0) {\n return array.slice();\n } else {\n for (let i = 0; i < len; i++) {\n res[i] = array[(i + (len + (n % len))) % len];\n }\n }\n return res;\n }\n\n static isValidNumber(value: string): boolean {\n return !isNaN(Number(value));\n }\n\n static isOctalNumber(value: string): boolean {\n return (\n StringUtils.isValidNumber(value) &&\n value.startsWith('0') &&\n value.length > 1\n );\n }\n}\n","import { ChangeType, GroupingChanges } from './change.interface';\nimport { StringUtils } from './string-utils';\n\nexport class ChangeUtils {\n static findChanges(\n obj1: any[],\n obj2: any[],\n ignoreKeys: string[] = []\n ): GroupingChanges {\n const items: GroupingChanges = {\n added: [],\n deleted: [],\n modified: []\n };\n\n if (!obj1 || !obj2) {\n return items;\n }\n\n const obj1Clone: any = [...obj1];\n const obj2Clone: any = [...obj2];\n\n for (const fromItem of obj1Clone) {\n const index = obj2Clone.findIndex((s) => s.id === fromItem.id);\n\n if (index === -1) {\n items.deleted.push({\n change: { type: ChangeType.DELETED },\n value: fromItem\n });\n continue;\n }\n\n const toItem = obj2Clone.splice(index, 1)[0];\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keysChanged = ChangeUtils.compareObject(\n fromItemClone,\n toItemClone,\n undefined,\n ignoreKeys\n );\n\n if (keysChanged.length) {\n items.modified.push({\n change: {\n type: ChangeType.MODIFIED,\n keysChanged\n },\n value: fromItemClone,\n oldValue: fromItem,\n newValue: toItem\n });\n }\n }\n\n items.added = obj2Clone.map((itemAdded) => {\n return {\n change: { type: ChangeType.ADDED },\n value: itemAdded\n };\n });\n\n return items;\n }\n\n private static compareObject(fromItem, toItem, baseKey?, ignoreKeys = []) {\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keys: any = new Set([\n ...Object.keys(fromItem),\n ...Object.keys(toItem)\n ]);\n let keysChanged = [];\n keys.forEach((key) => {\n const keyString = baseKey ? `${baseKey}.${key}` : key;\n if (ignoreKeys.indexOf(keyString) !== -1) {\n return;\n }\n\n if (Array.isArray(fromItem[key])) {\n fromItem[key] = fromItem[key].join(',<br>');\n }\n if (Array.isArray(toItem[key])) {\n toItem[key] = toItem[key].join(',<br>');\n }\n\n if (\n typeof fromItem[key] === 'object' &&\n typeof toItem[key] === 'object' &&\n fromItem[key] !== null &&\n toItem[key] !== null\n ) {\n keysChanged = keysChanged.concat(\n this.compareObject(fromItem[key], toItem[key], keyString)\n );\n } else {\n if (fromItem[key] !== toItem[key]) {\n keysChanged.push({\n key: keyString,\n oldValue: fromItemClone[key],\n newValue: toItemClone[key]\n });\n fromItem[key] = StringUtils.diff(fromItem[key], toItem[key]);\n }\n }\n });\n\n return keysChanged;\n }\n}\n","const ISO8601_REGEX = new RegExp(\n '(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d)'\n);\nconst ISO8601_UTCTIME_REGEX = new RegExp(\n '(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.[0-9]+)?(Z)?'\n);\n\nexport function isIsoDate(value: string): boolean {\n if (!ISO8601_REGEX.test(value) && !ISO8601_UTCTIME_REGEX.test(value)) {\n return false;\n }\n const d = new Date(value);\n return d instanceof Date && !isNaN(d.getTime());\n}\n\nexport const TimeFrame = ['now', 'today'] as const;\nexport type TimeFrame = (typeof TimeFrame)[number];\n\nexport function isTimeFrame(\n value: Date | TimeFrame | string | number\n): value is TimeFrame {\n return (\n typeof value === 'string' &&\n TimeFrame.includes(value.toLowerCase() as TimeFrame)\n );\n}\n\nexport function resolveDate(input?: Date | TimeFrame): Date | undefined {\n if (isTimeFrame(input)) {\n return new Date();\n }\n return input instanceof Date ? input : undefined;\n}\n","export class DomUtils {\n static create<K extends keyof HTMLElementTagNameMap>(\n doc: Document,\n tagName: K,\n options?: Partial<HTMLElementTagNameMap[K]>\n ): HTMLElementTagNameMap[K] {\n const el = doc.createElement(tagName);\n\n for (const key in options) {\n el[key] = options[key];\n }\n\n return el;\n }\n\n static remove(node: HTMLElement | SVGElement): void {\n if (!node.parentNode) {\n return;\n }\n node.parentNode.removeChild(node);\n }\n}\n","import type {\n ColInfo,\n JSON2SheetOpts,\n WorkBook,\n WorkSheet,\n WritingOptions\n} from 'xlsx';\n\nexport async function createExcelWorkBook(\n workSheet?: WorkSheet,\n workSheetName?: string\n): Promise<WorkBook> {\n const { utils } = await import('xlsx');\n\n return utils.book_new(workSheet, workSheetName);\n}\nexport async function addExcelSheetToWorkBook<T = Record<string, unknown>>(\n title: string,\n rows: T[],\n workBook: WorkBook,\n opts?: {\n json2SheetOpts?: JSON2SheetOpts;\n bookAppendSheetOpts?: { roll?: boolean };\n }\n): Promise<void> {\n const { utils } = await import('xlsx');\n\n const worksheet = utils.json_to_sheet(rows, opts?.json2SheetOpts);\n\n /* calculate column width */\n if (rows?.length) {\n worksheet['!cols'] = getColumnsInfo(rows);\n }\n\n const SHEET_NAME_MAX_LENGTH = 31;\n let sheetName =\n title.length >= SHEET_NAME_MAX_LENGTH\n ? title.substring(0, SHEET_NAME_MAX_LENGTH)\n : title;\n\n if (workBook.SheetNames.includes(sheetName)) {\n sheetName = `${sheetName.substring(0, SHEET_NAME_MAX_LENGTH - 3)}_${workBook.SheetNames.length}`;\n }\n\n utils.book_append_sheet(\n workBook,\n worksheet,\n sheetName,\n opts?.bookAppendSheetOpts?.roll\n );\n}\n\nexport async function writeExcelFile(\n workBook: WorkBook,\n filename: string,\n opts?: WritingOptions\n) {\n const cleanedFileName = filename.toLowerCase().endsWith('.xlsx')\n ? filename.slice(0, -5)\n : filename;\n const { writeFile } = await import('xlsx');\n writeFile(workBook, `${cleanedFileName}.xlsx`, opts);\n}\n\nfunction getColumnsInfo<T = Record<string, unknown>>(rows: T[]): ColInfo[] {\n const columns = Object.keys(rows[0]);\n return columns.map((column) => ({\n wch: getColumnMaxWidth(column, rows)\n }));\n}\n\nfunction getColumnMaxWidth<T = Record<string, unknown>>(\n column: string,\n rows: T[]\n): number {\n return rows.reduce(\n (width, row) => Math.max(width, row[column]?.toString().length ?? 0),\n column.length\n );\n}\n","/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadContent(\n content: string,\n mimeType: string,\n fileName: string\n) {\n const uri = `data:${mimeType},${encodeURIComponent(content)}`;\n downloadFromUri(uri, fileName);\n}\n\nexport function downloadBlob(blob: Blob, fileName: string) {\n const url = window.URL.createObjectURL(blob);\n downloadFromUri(url, fileName);\n}\n\n/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadFromUri(uri: string, fileName: string) {\n const element = document.createElement('a');\n element.setAttribute('href', uri);\n element.setAttribute('download', fileName);\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Validate if string is valid json object\n * @param jsonString\n * @return boolean\n */\nexport function isValidJSON(jsonString: string): boolean {\n try {\n return JSON.parse(jsonString) && !!jsonString;\n } catch {\n return false;\n }\n}\n","/* eslint-disable no-prototype-builtins */\nexport class ObjectUtils {\n static resolve(obj: object, key: string): any {\n const keysArray = key.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n let current = obj;\n while (keysArray.length) {\n if (typeof current !== 'object') {\n return undefined;\n }\n current = current[keysArray.shift()];\n }\n\n return current;\n }\n\n static isObject(item: object) {\n return (\n item &&\n typeof item === 'object' &&\n !Array.isArray(item) &&\n item !== null &&\n !(item instanceof Date)\n );\n }\n\n static mergeDeep(\n target: object,\n source: object,\n ignoreUndefined = false\n ): any {\n const output = Object.assign({}, target);\n if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {\n Object.keys(source)\n .filter((key) => !ignoreUndefined || source[key] !== undefined)\n .forEach((key) => {\n if (ObjectUtils.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] });\n } else {\n output[key] = ObjectUtils.mergeDeep(\n target[key],\n source[key],\n ignoreUndefined\n );\n }\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n }\n\n static copyDeep(src): any {\n const target = Array.isArray(src) ? [] : {};\n for (const prop in src) {\n if (src.hasOwnProperty(prop)) {\n const value = src[prop];\n if (value && typeof value === 'object') {\n target[prop] = this.copyDeep(value);\n } else {\n target[prop] = value;\n }\n }\n }\n return target;\n }\n\n static removeDuplicateCaseInsensitive(obj: object) {\n const summaryCapitalizeObject = {};\n const capitalizeObject = {};\n const upperCaseCount = [];\n\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n const upperCaseProperty = property.toUpperCase();\n if (!summaryCapitalizeObject.hasOwnProperty(upperCaseProperty)) {\n summaryCapitalizeObject[upperCaseProperty] = [\n { [property]: obj[property] }\n ];\n } else {\n summaryCapitalizeObject[upperCaseProperty].push({\n [property]: obj[property]\n });\n }\n // counting the number of uppercase lettersMna\n upperCaseCount.push({\n key: property,\n count: property.replace(/[^A-Z]/g, '').length\n });\n }\n }\n for (const capitalizedProperty in summaryCapitalizeObject) {\n if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {\n if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {\n const capitalizedPropertyObject =\n summaryCapitalizeObject[capitalizedProperty];\n if (capitalizedPropertyObject.length === 1) {\n // for single params (no duplicates)\n const singlePossibility = capitalizedPropertyObject[0];\n capitalizeObject[capitalizedProperty] =\n singlePossibility[Object.keys(singlePossibility)[0]];\n } else if (capitalizedPropertyObject.length > 1) {\n // defining the closest to lowercase property\n const paramClosestToLowercase = upperCaseCount\n .filter(\n (f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase()\n )\n .reduce((prev, current) => {\n return prev.y < current.y ? prev : current;\n });\n capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =\n obj[paramClosestToLowercase.key];\n }\n }\n }\n }\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n delete obj[property];\n }\n }\n\n for (const property in capitalizeObject) {\n if (capitalizeObject.hasOwnProperty(property)) {\n obj[property] = capitalizeObject[property];\n }\n }\n }\n\n static removeUndefined(obj: object): any {\n const output = {};\n if (ObjectUtils.isObject(obj)) {\n Object.keys(obj)\n .filter((key) => obj[key] !== undefined)\n .forEach((key) => {\n if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {\n output[key] = ObjectUtils.removeUndefined(obj[key]);\n } else {\n output[key] = obj[key];\n }\n });\n\n return output;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((o) => ObjectUtils.removeUndefined(o));\n }\n\n return obj;\n }\n\n static removeNull(obj: object): any {\n const output = {};\n if (ObjectUtils.isObject(obj)) {\n Object.keys(obj)\n .filter((key) => obj[key] !== null)\n .forEach((key) => {\n if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {\n output[key] = ObjectUtils.removeNull(obj[key]);\n } else {\n output[key] = obj[key];\n }\n });\n\n return output;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((o) => ObjectUtils.removeNull(o));\n }\n\n return obj;\n }\n\n static naturalCompare(a, b, direction = 'asc', nullsFirst?: boolean) {\n if (direction === 'desc') {\n b = [a, (a = b)][0];\n }\n\n // nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'\n // nullsFirst = true : always first\n // nullsFirst = false : always end\n if (\n a === null ||\n a === '' ||\n a === undefined ||\n b === null ||\n b === '' ||\n b === undefined\n ) {\n const nullScore =\n a === b\n ? 0\n : a === undefined\n ? 3\n : b === undefined\n ? -3\n : a === null\n ? 2\n : b === null\n ? -2\n : a === ''\n ? 1\n : -1;\n if (direction === 'desc') {\n return nullsFirst !== false ? nullScore : nullScore * -1;\n }\n return nullsFirst === true ? nullScore * -1 : nullScore;\n }\n\n const ax = [];\n const bx = [];\n a = '' + a;\n b = '' + b;\n\n a.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n ax.push([$1 || Infinity, $2 || '']);\n });\n\n b.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n bx.push([$1 || Infinity, $2 || '']);\n });\n\n while (ax.length && bx.length) {\n const an = ax.shift();\n const bn = bx.shift();\n const nn = an[0] - bn[0] || an[1].localeCompare(bn[1]);\n if (nn) {\n return nn;\n }\n }\n\n return ax.length - bx.length;\n }\n\n /**\n * Return true if two object are equivalent.\n * Objects are considered equivalent if they have the same properties and\n * if all of their properties (first-level only) share the same value.\n * @param obj1 First object\n * @param obj2 Second object\n * @returns Whether two objects arer equivalent\n */\n static objectsAreEquivalent(obj1: object, obj2: object): boolean {\n if (obj1 === obj2) {\n return true;\n }\n\n const obj1Props = Object.getOwnPropertyNames(obj1);\n const obj2Props = Object.getOwnPropertyNames(obj2);\n if (obj1Props.length !== obj2Props.length) {\n return false;\n }\n\n for (const prop of obj1Props) {\n if (obj1[prop] !== obj2[prop]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Return a new object with an array of keys removed\n * @param obj Source object\n * @param keys Keys to remove\n * @returns A new object\n */\n static removeKeys(obj: object, keys: string[]): object {\n const newObj = Object.keys(obj)\n .filter((key) => keys.indexOf(key) < 0)\n .reduce((_obj, key) => {\n _obj[key] = obj[key];\n return _obj;\n }, {});\n\n return newObj;\n }\n\n static isEmpty(obj: object): boolean {\n return Object.keys(obj).length === 0;\n }\n}\n","export class NumberUtils {\n static roundToNDecimal(num: number, decimal = 3): number {\n const roundFactor = Math.pow(10, decimal);\n return Math.round(num * roundFactor) / roundFactor;\n }\n}\n","/** Utility function to create a K:V from a list of strings */\nexport function strEnum<T extends string>(o: T[]): { [K in T]: K } {\n return o.reduce((res, key) => {\n res[key] = key;\n return res;\n }, Object.create(null));\n}\n","import { DomUtils } from './dom.utils';\n\nconst PATH_PREBUILT_THEMES = 'igo2/core/theming/prebuilt-themes';\nconst LINK_ID = 'theme-styles';\n\nexport function loadTheme(\n doc: Document,\n themeName: string,\n path: string = PATH_PREBUILT_THEMES\n): void {\n const src = `${path}/${themeName}.css`;\n const head = doc.getElementsByTagName('head')[0];\n\n const themeLink = doc.getElementById(LINK_ID) as HTMLLinkElement;\n\n if (themeLink) {\n themeLink.href = src;\n } else {\n createHtmlLink(doc, src, head);\n }\n}\n\nfunction createHtmlLink(doc: Document, src: string, parent: HTMLElement): void {\n const element = DomUtils.create(doc, 'link', {\n id: LINK_ID,\n rel: 'stylesheet',\n href: src\n });\n parent.appendChild(element);\n}\n","type TreeId = string | number;\nexport interface ITreeConfig<T> {\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n reverse?: boolean;\n}\n\nexport const TREE_SEPERATOR = '.';\n\nexport class Tree<T> {\n private _data: T[];\n\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n\n constructor(\n initialData: T[],\n private config: ITreeConfig<T>\n ) {\n this.getChildren = config.getChildren;\n this.getId = config.getId;\n this.getLevel = config.getLevel;\n\n this._data = this.sortDeep(initialData);\n }\n\n get data(): readonly T[] {\n return this._data;\n }\n\n get flattened(): readonly T[] {\n return this.flatten([...this.data]);\n }\n\n add(...nodes: T[]): T[] {\n this.sortDeep(nodes);\n this._data.unshift(...nodes);\n return nodes;\n }\n\n addBefore(beforeId: string | undefined, ...nodes: T[]): void {\n this.sortDeep(nodes);\n this._addBefore(beforeId, this._data, ...nodes);\n }\n\n remove(...nodes: T[]): T[] {\n return this._remove(...nodes);\n }\n\n clear(): void {\n this._data = [];\n }\n\n exist(node: T): boolean {\n const id = this.getId(node);\n return this.flattened.some((layer) => this.getId(layer) === id);\n }\n\n /**\n * Move a node to a different position\n * @param node\n * @param beforeTo The position of index into the tree. If -1 move at the end\n */\n moveTo(beforeTo: number[], ...nodes: T[]): T[] {\n const clonedBeforeTo = [...beforeTo];\n const lastIndex = clonedBeforeTo.pop();\n const recipient = this.getAncestorAtPosition(clonedBeforeTo);\n const beforeId =\n lastIndex === -1 || lastIndex >= recipient.length\n ? null\n : this.getId(recipient[lastIndex]);\n\n const nodesToMove = nodes.filter((node) => beforeId !== this.getId(node));\n return this.move(beforeId, recipient, ...nodesToMove);\n }\n\n getPosition(node: T): number[] {\n const id = this.getId(node);\n return this._getPosition(id);\n }\n\n private _addBefore(\n beforeId: TreeId | undefined,\n recipient = this._data,\n ...nodes: T[]\n ): T[] {\n if (!beforeId) {\n recipient.push(...nodes);\n return nodes;\n }\n\n const beforeIndex = this.getIndex(beforeId, recipient);\n recipient.splice(beforeIndex, 0, ...nodes);\n\n return nodes;\n }\n\n private _remove(...nodes: T[]): T[] {\n return nodes.reduce((acc: T[], node) => {\n const ancestor = this.getNodeAncestor(node);\n if (!ancestor) {\n return;\n }\n\n const index = this.getIndex(this.getId(node), ancestor);\n if (index === -1) {\n return;\n }\n ancestor.splice(index, 1);\n\n return acc.concat(node);\n }, []);\n }\n\n /**\n * Move an node before an id\n * @param node Node to be move\n * @param recipient\n * @param beforeId\n */\n private move(\n beforeId: TreeId | undefined,\n recipient: T[],\n ...nodes: T[]\n ): T[] {\n this._remove(...nodes);\n return this._addBefore(beforeId, recipient, ...nodes);\n }\n\n private _getPosition(\n id: TreeId,\n ancestorsIndex: number[] = [],\n values = this._data\n ) {\n let indexList: number[];\n values.some((value, index) => {\n if (this.getId(value) === id) {\n indexList = ancestorsIndex.concat(index);\n return true;\n }\n\n const children = this.getChildren(value);\n if (children) {\n const groupIndexList = this._getPosition(\n id,\n ancestorsIndex.concat(index),\n children\n );\n if (groupIndexList) {\n indexList = groupIndexList;\n return true;\n }\n }\n\n return false;\n });\n return indexList;\n }\n\n private getAncestorAtPosition(position: number[]) {\n if (!position.length) {\n return this._data;\n }\n const node = this.getNodeByPosition(position);\n return this.getChildren(node);\n }\n\n /** Recursive */\n private sortDeep(data = this._data): T[] {\n data.forEach((node) => {\n const children = this.getChildren(node);\n if (children) {\n this.sortDeep(children);\n }\n });\n return this.sort(data);\n }\n\n private sort(children: T[]): T[] {\n const sorted = children.sort((a, b) => this.getLevel(a) - this.getLevel(b));\n return this.config.reverse ? sorted.reverse() : sorted;\n }\n\n /** Recursive */\n private _getNodeById(id: string, data = this._data): T {\n let node: T;\n data.some((item) => {\n if (this.getId(item) === id) {\n node = item;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n node = this._getNodeById(id, children);\n if (node) {\n return true;\n }\n }\n\n return false;\n });\n return node;\n }\n\n getNodeByPosition(indexes: number[]): T {\n if (indexes.length > 1) {\n return indexes.reduce((previousValue: T, index) => {\n const ancestor = previousValue\n ? this.getChildren(previousValue)\n : this._data;\n return this._getByIndex(index, ancestor);\n }, null);\n } else {\n return this._getByIndex(indexes[0]);\n }\n }\n\n private _getByIndex(index: number, ancestor = this._data) {\n return ancestor[index];\n }\n\n private getNodeAncestor(node: T): T[] {\n const id = this.getId(node);\n return this.getAncestorById(id);\n }\n\n /** Recursive */\n private getAncestorById(id: TreeId, data = this._data): T[] | undefined {\n let ancestor: T[];\n data.some((item) => {\n if (this.getId(item) === id) {\n ancestor = data;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n ancestor = this.getAncestorById(id, children);\n if (ancestor) {\n return true;\n }\n }\n\n return false;\n });\n return ancestor;\n }\n\n /** Recursive */\n private flatten(nodes: T[]): T[] {\n return nodes.reduce((list, node) => {\n const children = this.getChildren(node);\n if (children) {\n const flattened = this.flatten(children);\n list.push(node, ...flattened);\n } else {\n list.push(node);\n }\n return list;\n }, [] as T[]);\n }\n\n private getIndex(id: TreeId, ancestor: T[]): number {\n return ancestor.findIndex((node) => this.getId(node) === id);\n }\n}\n","export function S4() {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n}\n\nexport function uuid() {\n const id = `${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;\n return id.toLowerCase();\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport enum SubjectStatus {\n Error = 0,\n Done = 1,\n Working = 2,\n Waiting = 3\n}\n\nexport abstract class Watcher {\n public status$ = new Subject<SubjectStatus>();\n protected status$$: Subscription;\n\n get status(): SubjectStatus {\n return this._status;\n }\n set status(value: SubjectStatus) {\n this._status = value;\n this.status$.next(value);\n }\n private _status: SubjectStatus;\n\n protected abstract watch();\n\n protected abstract unwatch();\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n subscribe(callback: Function, scope?: any) {\n this.watch();\n\n this.status$$ = this.status$.pipe(distinctUntilChanged()).subscribe(() => {\n callback.call(scope, this);\n });\n }\n\n unsubscribe() {\n this.unwatch();\n if (this.status$$ !== undefined) {\n this.status$$.unsubscribe();\n this.status$$ = undefined;\n }\n this.status = SubjectStatus.Waiting;\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igo2-utils.mjs","sources":["../../../packages/utils/src/lib/base64.ts","../../../packages/utils/src/lib/cache.utils.ts","../../../packages/utils/src/lib/compression/compression.utils.ts","../../../packages/utils/src/lib/change.interface.ts","../../../packages/utils/src/lib/string-utils.ts","../../../packages/utils/src/lib/change.ts","../../../packages/utils/src/lib/date.utils.ts","../../../packages/utils/src/lib/dom.utils.ts","../../../packages/utils/src/lib/files/excel.ts","../../../packages/utils/src/lib/files/file.ts","../../../packages/utils/src/lib/object-utils.ts","../../../packages/utils/src/lib/number-utils.ts","../../../packages/utils/src/lib/strenum.ts","../../../packages/utils/src/lib/theme.utils.ts","../../../packages/utils/src/lib/tree/tree.ts","../../../packages/utils/src/lib/uuid.ts","../../../packages/utils/src/lib/watcher.ts","../../../packages/utils/src/public_api.ts","../../../packages/utils/src/igo2-utils.ts"],"sourcesContent":["/* eslint-disable */\n\nconst ALPHA =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nexport class Base64 {\n private static PADCHAR: string = '=';\n private static ALPHA: string = ALPHA;\n\n private static getByte(s: string, i: number): number {\n const x = s.charCodeAt(i);\n return x;\n }\n\n private static getByte64(s: string, i: number): number {\n const idx = this.ALPHA.indexOf(s.charAt(i));\n return idx;\n }\n\n public static decode(s: string): string {\n let pads = 0,\n i,\n b10,\n imax = s.length,\n x = [];\n\n s = String(s);\n\n if (imax === 0) {\n return s;\n }\n\n if (s.charAt(imax - 1) === this.PADCHAR) {\n pads = 1;\n if (s.charAt(imax - 2) === this.PADCHAR) {\n pads = 2;\n }\n imax -= 4;\n }\n\n for (i = 0; i < imax; i += 4) {\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6) |\n this.getByte64(s, i + 3);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255, b10 & 255));\n }\n\n switch (pads) {\n case 1:\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255));\n break;\n case 2:\n b10 = (this.getByte64(s, i) << 18) | (this.getByte64(s, i + 1) << 12);\n x.push(String.fromCharCode(b10 >> 16));\n break;\n }\n\n return x.join('');\n }\n\n public static encode(s: string): string {\n s = String(s);\n\n let i,\n b10,\n x = [],\n imax = s.length - (s.length % 3);\n\n if (s.length === 0) {\n return s;\n }\n\n for (i = 0; i < imax; i += 3) {\n b10 =\n (this.getByte(s, i) << 16) |\n (this.getByte(s, i + 1) << 8) |\n this.getByte(s, i + 2);\n x.push(this.ALPHA.charAt(b10 >> 18));\n x.push(this.ALPHA.charAt((b10 >> 12) & 63));\n x.push(this.ALPHA.charAt((b10 >> 6) & 63));\n x.push(this.ALPHA.charAt(b10 & 63));\n }\n\n switch (s.length - imax) {\n case 1:\n b10 = this.getByte(s, i) << 16;\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.PADCHAR +\n this.PADCHAR\n );\n break;\n case 2:\n b10 = (this.getByte(s, i) << 16) | (this.getByte(s, i + 1) << 8);\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.ALPHA.charAt((b10 >> 6) & 63) +\n this.PADCHAR\n );\n break;\n }\n\n return x.join('');\n }\n}\n","export function customCacheHasher(parameters: unknown[]): unknown[] {\n return parameters.map((param) => {\n if (\n typeof param === 'object' &&\n param != null &&\n typeof param.toString === 'function'\n ) {\n return param.toString();\n }\n return param !== undefined ? JSON.parse(JSON.stringify(param)) : param;\n });\n}\n","import { Observable, Observer, of } from 'rxjs';\n\nimport { CompressedData } from './compressedData.interface';\n\nfunction getNumber(v: number, endposition: number, length: number) {\n const mask = (1 << length) - 1;\n return (v >> endposition) & mask;\n}\n\nexport class Compression {\n private base64Index = new Map<string, number>();\n private indexBase64 = new Map<number, string>();\n\n constructor() {\n this.generateBase64Index();\n }\n\n private generateBase64Index() {\n // https://fr.wikipedia.org/wiki/Base64\n // A-Z => [0, 25]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('A'.charCodeAt(0) + i), i);\n this.indexBase64.set(i, String.fromCharCode('A'.charCodeAt(0) + i));\n }\n // a-z => [26, 51]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('a'.charCodeAt(0) + i), i + 26);\n this.indexBase64.set(i + 26, String.fromCharCode('a'.charCodeAt(0) + i));\n }\n // 0-9 => [52, 61]\n for (let i = 0; i < 10; i++) {\n this.base64Index.set(String.fromCharCode('0'.charCodeAt(0) + i), i + 52);\n this.indexBase64.set(i + 52, String.fromCharCode('0'.charCodeAt(0) + i));\n }\n // + / => [62, 63]\n this.base64Index.set('+', 62);\n this.base64Index.set('/', 63);\n this.indexBase64.set(62, '+');\n this.indexBase64.set(63, '/');\n }\n\n compressBlob(blob: Blob): Observable<CompressedData | null> {\n if (!blob) {\n return of(null);\n }\n\n const observable = new Observable((observer: Observer<CompressedData>) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => {\n const base64 = reader.result?.valueOf() as string;\n const text64 = base64.substr(base64.indexOf(',') + 1);\n const compressed = this.compressStringBase64(text64);\n const compressedData: CompressedData = {\n length: text64.length,\n type: blob.type,\n object: compressed\n };\n observer.next(compressedData);\n };\n });\n return observable;\n }\n\n decompressBlob(compressedData: CompressedData): Blob {\n const object = compressedData.object;\n const length = compressedData.length;\n const decompressed: string = this.decompressStringBase64(object, length);\n const byteCharacters = atob(decompressed);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: compressedData.type });\n return blob;\n }\n\n private compressStringBase64(s: string): string {\n let out = '';\n let bits = 16;\n let chr = 0;\n let rem: number;\n for (const c of s) {\n const value = this.base64Index.get(c);\n if (value === undefined) {\n continue;\n }\n if (bits > 6) {\n bits -= 6;\n chr += value << bits;\n } else {\n rem = 6 - bits;\n chr += value >> rem;\n out += String.fromCharCode(chr);\n chr = value << (16 - rem);\n bits = 16 - rem;\n }\n }\n if (s.length % 8 !== 0) {\n out += String.fromCharCode(chr);\n }\n return String.fromCharCode(9731) + out;\n }\n\n private decompressStringBase64(c: string, length: number): string {\n if (c.charCodeAt(0) !== 9731) {\n return c;\n }\n\n let chr: number;\n let rem: number;\n let bits = 16;\n let out = '';\n let j = 1;\n let value = c.charCodeAt(j);\n for (let i = 0; i < length; i++) {\n if (bits > 6) {\n bits -= 6;\n chr = getNumber(value, bits, 6);\n out += this.indexBase64.get(chr);\n } else {\n rem = 6 - bits;\n chr = getNumber(value, 0, bits) << rem;\n value = c.charCodeAt(++j);\n chr += getNumber(value, 16 - rem, rem);\n out += this.indexBase64.get(chr);\n bits = 16 - rem;\n }\n }\n return out;\n }\n}\n","export enum ChangeType {\n ADDED = 'added',\n DELETED = 'deleted',\n MODIFIED = 'modified'\n}\n\nexport interface Change {\n type: ChangeType;\n keysChanged?: KeyChange[];\n}\n\nexport interface KeyChange {\n key: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface GroupingChanges {\n added: ChangeItem[];\n deleted: ChangeItem[];\n modified: ChangeItem[];\n}\n\nexport interface ChangeItem {\n change: Change;\n value: any;\n oldValue?: any;\n newValue?: any;\n}\n","interface ChangeData {\n fis: number;\n fil: number;\n sbs: string;\n mtc: string;\n del: string;\n ins: string;\n}\n\ninterface SubData {\n fis: number;\n fil?: number;\n sbs: string;\n mtc: string;\n}\n\nexport class StringUtils {\n static diff(s1: string, s2: string, p = 4): string {\n if (!s1 && !s2) {\n return '';\n }\n if (!s1) {\n return '<span class=\"inserted\">' + s2 + '</span>';\n }\n if (!s2) {\n return '<span class=\"deleted\">' + s1 + '</span>';\n }\n s1 = s1.toString();\n s2 = s2.toString();\n const changeData = StringUtils.getChanges(s1, s2, '', p);\n const nextS = s2.slice(\n changeData.mtc.length + changeData.ins.length + changeData.sbs.length\n ); // remaining part of \"s\"\n const nextThis = s1.slice(\n changeData.mtc.length + changeData.del.length + changeData.sbs.length\n ); // remaining part of \"this\"\n let result: string; // the glorious result\n if (changeData.del.length > 0) {\n changeData.del = '<span class=\"deleted\">' + changeData.del + '</span>';\n }\n if (changeData.ins.length > 0) {\n changeData.ins = '<span class=\"inserted\">' + changeData.ins + '</span>';\n }\n result = changeData.mtc + changeData.del + changeData.ins + changeData.sbs;\n result +=\n nextThis !== '' || nextS !== ''\n ? StringUtils.diff(nextThis, nextS, p)\n : '';\n return result;\n }\n\n private static getMatchingSubstring(s: string, l: string[], m: string) {\n // returns the first matching substring in-between the two strings\n let i = 0;\n let match = false;\n const slen = s.length;\n const o = { fis: slen, mtc: m, sbs: '' }; // temporary object used to construct the cd (change data) object\n\n while (i < slen) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n l[i] === s[i]\n ? match\n ? (o.sbs += s[i]) // o.sbs holds the matching substring itsef\n : ((match = true), (o.fis = i), (o.sbs = s[i]))\n : match\n ? (i = slen) // stop after the first found substring\n : // eslint-disable-next-line no-self-assign\n (i = i);\n ++i;\n }\n return o;\n }\n\n private static getChanges(\n s1: string,\n s2: string,\n m: string,\n p: number\n ): ChangeData {\n const isThisLonger = s1.length >= s1.length ? true : false;\n const [longer, shorter_init] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring\n let shorter = shorter_init;\n let bi = 0; // base index designating the index of first mismacthing character in both strings\n\n while (shorter[bi] === longer[bi] && bi < shorter.length) {\n ++bi;\n } // make bi the index of first mismatching character\n const longerArr = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array\n shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character\n\n const len = longerArr.length; // length of the longer string\n let cd: ChangeData = {\n fis: shorter.length, // the index of matching string in the shorter string\n fil: len, // the index of matching string in the longer string\n sbs: '', // the matching substring itself\n mtc: m + s2.slice(0, bi),\n del: '',\n ins: ''\n }; // if exists mtc holds the matching string at the front\n let sub: SubData = { fis: cd.fis, fil: cd.fil, sbs: '', mtc: cd.mtc }; // returned substring per 1 character rotation of the longer string\n\n if (shorter !== '') {\n for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {\n // rc -> rotate count, p -> precision factor\n sub = StringUtils.getMatchingSubstring(\n shorter,\n StringUtils.rotateArray(longerArr, rc),\n cd.mtc\n ); // rotate longer string 1 char and get substring\n sub.fil =\n rc < len - sub.fis\n ? sub.fis + rc // mismatch is longer than the mismatch in short\n : sub.fis - len + rc; // mismatch is shorter than the mismatch in short\n if (sub.sbs.length > cd.sbs.length) {\n cd = { ...cd, ...sub }; // only keep the one with the longest substring.\n }\n }\n }\n // insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring\n [cd.del, cd.ins] = isThisLonger\n ? [longerArr.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]\n : [shorter.slice(0, cd.fis), longerArr.slice(0, cd.fil).join('')];\n return cd.del.indexOf(' ') === -1 ||\n cd.ins.indexOf(' ') === -1 ||\n cd.del === '' ||\n cd.ins === '' ||\n cd.sbs === ''\n ? cd\n : StringUtils.getChanges(cd.del, cd.ins, cd.mtc, p);\n }\n\n private static rotateArray(array: string[], n: number) {\n const len = array.length;\n const res = new Array(array.length);\n if (n % len === 0) {\n return array.slice();\n } else {\n for (let i = 0; i < len; i++) {\n res[i] = array[(i + (len + (n % len))) % len];\n }\n }\n return res;\n }\n\n static isValidNumber(value: string): boolean {\n return !isNaN(Number(value));\n }\n\n static isOctalNumber(value: string): boolean {\n return (\n StringUtils.isValidNumber(value) &&\n value.startsWith('0') &&\n value.length > 1\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeType, GroupingChanges, KeyChange } from './change.interface';\nimport { StringUtils } from './string-utils';\n\nexport class ChangeUtils {\n static findChanges(\n obj1: any[],\n obj2: any[],\n ignoreKeys: string[] = []\n ): GroupingChanges {\n const items: GroupingChanges = {\n added: [],\n deleted: [],\n modified: []\n };\n\n if (!obj1 || !obj2) {\n return items;\n }\n\n const obj1Clone: Record<string, unknown>[] = [...obj1];\n const obj2Clone: Record<string, unknown>[] = [...obj2];\n\n for (const fromItem of obj1Clone) {\n const index = obj2Clone.findIndex((s) => s.id === fromItem.id);\n\n if (index === -1) {\n items.deleted.push({\n change: { type: ChangeType.DELETED },\n value: fromItem\n });\n continue;\n }\n\n const toItem = obj2Clone.splice(index, 1)[0];\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keysChanged = ChangeUtils.compareObject(\n fromItemClone,\n toItemClone,\n undefined,\n ignoreKeys\n );\n\n if (keysChanged.length) {\n items.modified.push({\n change: {\n type: ChangeType.MODIFIED,\n keysChanged\n },\n value: fromItemClone,\n oldValue: fromItem,\n newValue: toItem\n });\n }\n }\n\n items.added = obj2Clone.map((itemAdded) => {\n return {\n change: { type: ChangeType.ADDED },\n value: itemAdded\n };\n });\n\n return items;\n }\n\n private static compareObject(\n fromItem: any,\n toItem: any,\n baseKey?: string,\n ignoreKeys: string[] = []\n ): KeyChange[] {\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keys: Set<string> = new Set([\n ...Object.keys(fromItem),\n ...Object.keys(toItem)\n ]);\n let keysChanged: KeyChange[] = [];\n keys.forEach((key) => {\n const keyString = baseKey ? `${baseKey}.${key}` : key;\n if (ignoreKeys.indexOf(keyString) !== -1) {\n return;\n }\n\n if (Array.isArray(fromItem[key])) {\n fromItem[key] = fromItem[key].join(',<br>');\n }\n if (Array.isArray(toItem[key])) {\n toItem[key] = toItem[key].join(',<br>');\n }\n\n if (\n typeof fromItem[key] === 'object' &&\n typeof toItem[key] === 'object' &&\n fromItem[key] !== null &&\n toItem[key] !== null\n ) {\n keysChanged = keysChanged.concat(\n this.compareObject(fromItem[key], toItem[key], keyString)\n );\n } else {\n if (fromItem[key] !== toItem[key]) {\n keysChanged.push({\n key: keyString,\n oldValue: fromItemClone[key],\n newValue: toItemClone[key]\n });\n fromItem[key] = StringUtils.diff(fromItem[key], toItem[key]);\n }\n }\n });\n\n return keysChanged;\n }\n}\n","const ISO8601_REGEX = new RegExp(\n '(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d)'\n);\nconst ISO8601_UTCTIME_REGEX = new RegExp(\n '(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.[0-9]+)?(Z)?'\n);\n\nexport function isIsoDate(value: string): boolean {\n if (!ISO8601_REGEX.test(value) && !ISO8601_UTCTIME_REGEX.test(value)) {\n return false;\n }\n const d = new Date(value);\n return d instanceof Date && !isNaN(d.getTime());\n}\n\nexport const TimeFrame = ['now', 'today'] as const;\nexport type TimeFrame = (typeof TimeFrame)[number];\n\nexport function isTimeFrame(\n value: Date | TimeFrame | string | number\n): value is TimeFrame {\n return (\n typeof value === 'string' &&\n TimeFrame.includes(value.toLowerCase() as TimeFrame)\n );\n}\n\nexport function resolveDate(input: Date | TimeFrame): Date | null {\n if (isTimeFrame(input)) {\n return new Date();\n }\n return input instanceof Date ? input : null;\n}\n","export class DomUtils {\n static create<K extends keyof HTMLElementTagNameMap>(\n doc: Document,\n tagName: K,\n options?: Partial<HTMLElementTagNameMap[K]>\n ): HTMLElementTagNameMap[K] {\n const el = doc.createElement(tagName);\n\n for (const key in options) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (el as any)[key] = options[key as keyof typeof options];\n }\n\n return el;\n }\n\n static remove(node: HTMLElement | SVGElement): void {\n if (!node.parentNode) {\n return;\n }\n node.parentNode.removeChild(node);\n }\n}\n","import type {\n ColInfo,\n JSON2SheetOpts,\n WorkBook,\n WorkSheet,\n WritingOptions\n} from 'xlsx';\n\nexport async function createExcelWorkBook(\n workSheet?: WorkSheet,\n workSheetName?: string\n): Promise<WorkBook> {\n const { utils } = await import('xlsx');\n\n return utils.book_new(workSheet, workSheetName);\n}\nexport async function addExcelSheetToWorkBook<T = Record<string, unknown>>(\n title: string,\n rows: T[] | string,\n workBook: WorkBook,\n opts?: {\n json2SheetOpts?: JSON2SheetOpts;\n bookAppendSheetOpts?: { roll?: boolean };\n }\n): Promise<void> {\n const { utils } = await import('xlsx');\n\n const values = typeof rows === 'string' ? JSON.parse(rows) : rows;\n\n const worksheet = utils.json_to_sheet(values, opts?.json2SheetOpts);\n\n /* calculate column width */\n if (rows?.length) {\n worksheet['!cols'] = getColumnsInfo(values);\n }\n\n const SHEET_NAME_MAX_LENGTH = 31;\n let sheetName =\n title.length >= SHEET_NAME_MAX_LENGTH\n ? title.substring(0, SHEET_NAME_MAX_LENGTH)\n : title;\n\n if (workBook.SheetNames.includes(sheetName)) {\n sheetName = `${sheetName.substring(0, SHEET_NAME_MAX_LENGTH - 3)}_${workBook.SheetNames.length}`;\n }\n\n utils.book_append_sheet(\n workBook,\n worksheet,\n sheetName,\n opts?.bookAppendSheetOpts?.roll\n );\n}\n\nexport async function writeExcelFile(\n workBook: WorkBook,\n filename: string,\n opts?: WritingOptions\n) {\n const cleanedFileName = filename.toLowerCase().endsWith('.xlsx')\n ? filename.slice(0, -5)\n : filename;\n const { writeFile } = await import('xlsx');\n writeFile(workBook, `${cleanedFileName}.xlsx`, opts);\n}\n\nfunction getColumnsInfo<T extends Record<string, unknown>>(\n rows: T[]\n): ColInfo[] {\n const columns = Object.keys(rows[0]);\n return columns.map((column) => ({\n wch: getColumnMaxWidth(column, rows)\n }));\n}\n\nfunction getColumnMaxWidth<T extends Record<string, unknown>>(\n column: string,\n rows: T[]\n): number {\n return rows.reduce(\n (width, row) => Math.max(width, row[column]?.toString().length ?? 0),\n column.length\n );\n}\n","/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadContent(\n content: string,\n mimeType: string,\n fileName: string\n) {\n const uri = `data:${mimeType},${encodeURIComponent(content)}`;\n downloadFromUri(uri, fileName);\n}\n\nexport function downloadBlob(blob: Blob, fileName: string) {\n const url = window.URL.createObjectURL(blob);\n downloadFromUri(url, fileName);\n}\n\n/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadFromUri(uri: string, fileName: string) {\n const element = document.createElement('a');\n element.setAttribute('href', uri);\n element.setAttribute('download', fileName);\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Validate if string is valid json object\n * @param jsonString\n * @return boolean\n */\nexport function isValidJSON(jsonString: string): boolean {\n try {\n return JSON.parse(jsonString) && !!jsonString;\n } catch {\n return false;\n }\n}\n","/* eslint-disable no-prototype-builtins */\nexport class ObjectUtils {\n static resolve<T, K extends keyof T>(obj: T, key: K | string): unknown {\n const keysArray = String(key)\n .replace(/\\[/g, '.')\n .replace(/\\]/g, '')\n .split('.');\n let current: unknown = obj;\n let value: unknown = undefined;\n while (keysArray.length) {\n if (typeof current !== 'object' || current === null) {\n return undefined;\n }\n const k = keysArray.shift() as string;\n value = current = (current as Record<string, unknown>)[k];\n }\n\n return value;\n }\n\n static isObject(item: unknown): item is Record<string, unknown> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item) &&\n item !== null &&\n !(item instanceof Date)\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static mergeDeep<T = any>(\n target: T,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n source: any,\n ignoreUndefined = false\n ): T {\n const output = Object.assign({}, target);\n if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {\n Object.keys(source)\n .filter((key) => !ignoreUndefined || source[key] !== undefined)\n .forEach((key) => {\n if (ObjectUtils.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] });\n } else {\n (output as Record<string, unknown>)[key] = ObjectUtils.mergeDeep(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>,\n ignoreUndefined\n );\n }\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static copyDeep<T = any>(src: T): T {\n if (Array.isArray(src)) {\n return src.map((item) =>\n typeof item === 'object' && item !== null\n ? this.copyDeep(item as Record<string, unknown>)\n : item\n ) as T;\n } else if (this.isObject(src)) {\n const target = {} as T;\n for (const prop in src) {\n if (src.hasOwnProperty(prop)) {\n const value = (src as Record<string, unknown>)[prop];\n (target as Record<string, unknown>)[prop] =\n value && typeof value === 'object'\n ? this.copyDeep(value as Record<string, unknown>)\n : value;\n }\n }\n return target;\n }\n return src;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static removeDuplicateCaseInsensitive(obj: any) {\n const summaryCapitalizeObject: Record<string, { [k: string]: unknown }[]> =\n {};\n const capitalizeObject: Record<string, unknown> = {};\n const upperCaseCount: { key: string; count: number }[] = [];\n\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n const upperCaseProperty = property.toUpperCase();\n if (!summaryCapitalizeObject.hasOwnProperty(upperCaseProperty)) {\n summaryCapitalizeObject[upperCaseProperty] = [\n { [property]: obj[property] }\n ];\n } else {\n summaryCapitalizeObject[upperCaseProperty].push({\n [property]: obj[property]\n });\n }\n // counting the number of uppercase letters\n upperCaseCount.push({\n key: property,\n count: property.replace(/[^A-Z]/g, '').length\n });\n }\n }\n for (const capitalizedProperty in summaryCapitalizeObject) {\n if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {\n const capitalizedPropertyObject =\n summaryCapitalizeObject[capitalizedProperty];\n if (capitalizedPropertyObject.length === 1) {\n // for single params (no duplicates)\n const singlePossibility = capitalizedPropertyObject[0];\n capitalizeObject[capitalizedProperty] =\n singlePossibility[Object.keys(singlePossibility)[0]];\n } else if (capitalizedPropertyObject.length > 1) {\n // defining the closest to lowercase property\n const paramClosestToLowercase = upperCaseCount\n .filter(\n (f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase()\n )\n .reduce((prev, current) => {\n return prev.count < current.count ? prev : current;\n });\n capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =\n obj[paramClosestToLowercase.key];\n }\n }\n }\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n delete obj[property];\n }\n }\n\n for (const property in capitalizeObject) {\n if (capitalizeObject.hasOwnProperty(property)) {\n obj[property] = capitalizeObject[property];\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static removeUndefined<T = any>(obj: T): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => item !== undefined)\n .map((item) =>\n typeof item === 'object'\n ? ObjectUtils.removeUndefined(item as Record<string, unknown>)\n : item\n ) as T;\n }\n\n if (ObjectUtils.isObject(obj)) {\n const output: Record<string, unknown> = {};\n Object.keys(obj)\n .filter((key) => obj[key] !== undefined)\n .forEach((key) => {\n output[key] =\n typeof obj[key] === 'object'\n ? ObjectUtils.removeUndefined(obj[key] as Record<string, unknown>)\n : obj[key];\n });\n return output as T;\n }\n\n return obj;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static removeNull<T = any>(obj: T): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => item !== null)\n .map((item) =>\n typeof item === 'object'\n ? ObjectUtils.removeNull(item as Record<string, unknown>)\n : item\n ) as T;\n }\n\n if (ObjectUtils.isObject(obj)) {\n const output: Record<string, unknown> = {};\n Object.keys(obj)\n .filter((key) => obj[key] !== null)\n .forEach((key) => {\n if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {\n output[key] = ObjectUtils.removeNull(\n obj[key] as Record<string, unknown>\n );\n } else {\n output[key] = obj[key];\n }\n });\n\n return output as T;\n }\n\n return obj;\n }\n\n static naturalCompare(\n a: unknown,\n b: unknown,\n direction = 'asc',\n nullsFirst?: boolean\n ): number {\n if (direction === 'desc') {\n [a, b] = [b, a];\n }\n\n // nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'\n // nullsFirst = true : always first\n // nullsFirst = false : always end\n if (\n a === null ||\n a === '' ||\n a === undefined ||\n b === null ||\n b === '' ||\n b === undefined\n ) {\n const nullScore =\n a === b\n ? 0\n : a === undefined\n ? 3\n : b === undefined\n ? -3\n : a === null\n ? 2\n : b === null\n ? -2\n : a === ''\n ? 1\n : -1;\n if (direction === 'desc') {\n return nullsFirst !== false ? nullScore : nullScore * -1;\n }\n return nullsFirst === true ? nullScore * -1 : nullScore;\n }\n\n const ax: [number, string][] = [];\n const bx: [number, string][] = [];\n const aStr = '' + a;\n const bStr = '' + b;\n\n aStr.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n ax.push([$1 ? Number($1) : Infinity, $2 ?? '']);\n return '';\n });\n\n bStr.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n bx.push([$1 ? Number($1) : Infinity, $2 ?? '']);\n return '';\n });\n\n while (ax.length && bx.length) {\n const an = ax.shift()!;\n const bn = bx.shift()!;\n const nn = an[0] - bn[0] || an[1].localeCompare(bn[1]);\n if (nn) {\n return nn;\n }\n }\n\n return ax.length - bx.length;\n }\n\n /**\n * Return true if two object are equivalent.\n * Objects are considered equivalent if they have the same properties and\n * if all of their properties (first-level only) share the same value.\n * @param obj1 First object\n * @param obj2 Second object\n * @returns Whether two objects are equivalent\n */\n static objectsAreEquivalent(\n obj1: Record<string, unknown>,\n obj2: Record<string, unknown>\n ): boolean {\n if (obj1 === obj2) {\n return true;\n }\n\n const obj1Props = Object.getOwnPropertyNames(obj1);\n const obj2Props = Object.getOwnPropertyNames(obj2);\n if (obj1Props.length !== obj2Props.length) {\n return false;\n }\n\n for (const prop of obj1Props) {\n if (obj1[prop] !== obj2[prop]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Return a new object with an array of keys removed\n * @param obj Source object\n * @param keys Keys to remove\n * @returns A new object\n */\n static removeKeys(\n obj: Record<string, unknown>,\n keys: string[]\n ): Record<string, unknown> {\n return Object.keys(obj)\n .filter((key) => keys.indexOf(key) < 0)\n .reduce(\n (_obj, key) => {\n _obj[key] = obj[key];\n return _obj;\n },\n {} as Record<string, unknown>\n );\n }\n\n static isEmpty(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 0;\n }\n}\n","export class NumberUtils {\n static roundToNDecimal(num: number, decimal = 3): number {\n const roundFactor = Math.pow(10, decimal);\n return Math.round(num * roundFactor) / roundFactor;\n }\n}\n","/** Utility function to create a K:V from a list of strings */\nexport function strEnum<T extends string>(o: T[]): { [K in T]: K } {\n return o.reduce((res, key) => {\n res[key] = key;\n return res;\n }, Object.create(null));\n}\n","import { DomUtils } from './dom.utils';\n\nconst PATH_PREBUILT_THEMES = 'igo2/core/theming/prebuilt-themes';\nconst LINK_ID = 'theme-styles';\n\nexport function loadTheme(\n doc: Document,\n themeName: string,\n path: string = PATH_PREBUILT_THEMES\n): void {\n const src = `${path}/${themeName}.css`;\n const head = doc.getElementsByTagName('head')[0];\n\n const themeLink = doc.getElementById(LINK_ID) as HTMLLinkElement;\n\n if (themeLink) {\n themeLink.href = src;\n } else {\n createHtmlLink(doc, src, head);\n }\n}\n\nfunction createHtmlLink(doc: Document, src: string, parent: HTMLElement): void {\n const element = DomUtils.create(doc, 'link', {\n id: LINK_ID,\n rel: 'stylesheet',\n href: src\n });\n parent.appendChild(element);\n}\n","type TreeId = string | number;\nexport interface ITreeConfig<T> {\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n reverse?: boolean;\n}\n\nexport const TREE_SEPERATOR = '.';\n\nexport class Tree<T> {\n private _data: T[];\n\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n\n constructor(\n initialData: T[],\n private config: ITreeConfig<T>\n ) {\n this.getChildren = config.getChildren;\n this.getId = config.getId;\n this.getLevel = config.getLevel;\n\n this._data = this.sortDeep(initialData);\n }\n\n get data(): readonly T[] {\n return this._data;\n }\n\n get flattened(): readonly T[] {\n return this.flatten([...this.data]);\n }\n\n add(...nodes: T[]): T[] {\n this.sortDeep(nodes);\n this._data.unshift(...nodes);\n return nodes;\n }\n\n addBefore(beforeId: string | undefined, ...nodes: T[]): void {\n this.sortDeep(nodes);\n this._addBefore(beforeId, this._data, ...nodes);\n }\n\n remove(...nodes: T[]): T[] {\n return this._remove(...nodes);\n }\n\n clear(): void {\n this._data = [];\n }\n\n exist(node: T): boolean {\n const id = this.getId(node);\n return this.flattened.some((layer) => this.getId(layer) === id);\n }\n\n /**\n * Move a node to a different position\n * @param node\n * @param beforeTo The position of index into the tree. If -1 move at the end\n */\n moveTo(beforeTo: number[], ...nodes: T[]): T[] | undefined {\n const clonedBeforeTo = [...beforeTo];\n const lastIndex = clonedBeforeTo.pop()!;\n const recipient = this.getAncestorAtPosition(clonedBeforeTo);\n if (!recipient) {\n return;\n }\n\n const beforeId =\n lastIndex === -1 || lastIndex >= recipient.length\n ? undefined\n : this.getId(recipient[lastIndex]);\n\n const nodesToMove = nodes.filter((node) => beforeId !== this.getId(node));\n return this.move(beforeId, recipient, ...nodesToMove);\n }\n\n getPosition(node: T): number[] {\n const id = this.getId(node);\n return this._getPosition(id);\n }\n\n private _addBefore(\n beforeId: TreeId | undefined,\n recipient = this._data,\n ...nodes: T[]\n ): T[] {\n if (!beforeId) {\n recipient.push(...nodes);\n return nodes;\n }\n\n const beforeIndex = this.getIndex(beforeId, recipient);\n recipient.splice(beforeIndex, 0, ...nodes);\n\n return nodes;\n }\n\n private _remove(...nodes: T[]): T[] {\n return nodes.reduce((acc: T[], node) => {\n const ancestor = this.getNodeAncestor(node);\n if (!ancestor) {\n return acc;\n }\n\n const index = this.getIndex(this.getId(node), ancestor);\n if (index === -1) {\n return acc;\n }\n ancestor.splice(index, 1);\n\n return acc.concat(node);\n }, []);\n }\n\n /**\n * Move an node before an id\n * @param node Node to be move\n * @param recipient\n * @param beforeId\n */\n private move(\n beforeId: TreeId | undefined,\n recipient: T[],\n ...nodes: T[]\n ): T[] {\n this._remove(...nodes);\n return this._addBefore(beforeId, recipient, ...nodes);\n }\n\n private _getPosition(\n id: TreeId,\n ancestorsIndex: number[] = [],\n values = this._data\n ) {\n let indexList: number[];\n values.some((value, index) => {\n if (this.getId(value) === id) {\n indexList = ancestorsIndex.concat(index);\n return true;\n }\n\n const children = this.getChildren(value);\n if (children) {\n const groupIndexList = this._getPosition(\n id,\n ancestorsIndex.concat(index),\n children\n );\n if (groupIndexList) {\n indexList = groupIndexList;\n return true;\n }\n }\n\n return false;\n });\n return indexList!;\n }\n\n private getAncestorAtPosition(position: number[]) {\n if (!position.length) {\n return this._data;\n }\n const node = this.getNodeByPosition(position);\n if (!node) {\n return;\n }\n return this.getChildren(node);\n }\n\n /** Recursive */\n private sortDeep(data = this._data): T[] {\n data.forEach((node) => {\n const children = this.getChildren(node);\n if (children) {\n this.sortDeep(children);\n }\n });\n return this.sort(data);\n }\n\n private sort(children: T[]): T[] {\n const sorted = children.sort((a, b) => this.getLevel(a) - this.getLevel(b));\n return this.config.reverse ? sorted.reverse() : sorted;\n }\n\n /** Recursive */\n private _getNodeById(id: string, data = this._data): T | undefined {\n let node: T | undefined;\n data.some((item) => {\n if (this.getId(item) === id) {\n node = item;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n node = this._getNodeById(id, children);\n if (node) {\n return true;\n }\n }\n\n return false;\n });\n return node;\n }\n\n getNodeByPosition(indexes: number[]): T | undefined {\n if (indexes.length > 1) {\n return indexes.reduce((previousValue: T | undefined, index) => {\n const ancestor = previousValue\n ? this.getChildren(previousValue)\n : this._data;\n return this._getByIndex(index, ancestor ?? undefined);\n }, undefined);\n } else {\n return this._getByIndex(indexes[0]);\n }\n }\n\n private _getByIndex(index: number, ancestor = this._data) {\n return ancestor[index];\n }\n\n private getNodeAncestor(node: T): T[] | undefined {\n const id = this.getId(node);\n return this.getAncestorById(id);\n }\n\n /** Recursive */\n private getAncestorById(id: TreeId, data = this._data): T[] | undefined {\n let ancestor: T[] | undefined;\n data.some((item) => {\n if (this.getId(item) === id) {\n ancestor = data;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n ancestor = this.getAncestorById(id, children);\n if (ancestor) {\n return true;\n }\n }\n\n return false;\n });\n return ancestor;\n }\n\n /** Recursive */\n private flatten(nodes: T[]): T[] {\n return nodes.reduce((list, node) => {\n const children = this.getChildren(node);\n if (children) {\n const flattened = this.flatten(children);\n list.push(node, ...flattened);\n } else {\n list.push(node);\n }\n return list;\n }, [] as T[]);\n }\n\n private getIndex(id: TreeId, ancestor: T[]): number {\n return ancestor.findIndex((node) => this.getId(node) === id);\n }\n}\n","export function S4() {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n}\n\nexport function uuid() {\n const id = `${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;\n return id.toLowerCase();\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport enum SubjectStatus {\n Error = 0,\n Done = 1,\n Working = 2,\n Waiting = 3\n}\n\nexport abstract class Watcher {\n public status$ = new Subject<SubjectStatus>();\n protected status$$!: Subscription;\n\n get status(): SubjectStatus | undefined {\n return this._status;\n }\n set status(value: SubjectStatus) {\n this._status = value;\n this.status$.next(value);\n }\n private _status?: SubjectStatus;\n\n protected abstract watch(): void;\n\n protected abstract unwatch(): void;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n subscribe(callback: Function, scope?: unknown) {\n this.watch();\n\n this.status$$ = this.status$.pipe(distinctUntilChanged()).subscribe(() => {\n callback.call(scope, this);\n });\n }\n\n unsubscribe() {\n this.unwatch();\n this.status$$?.unsubscribe();\n this.status = SubjectStatus.Waiting;\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;AAAA;AAEA,MAAM,KAAK,GACT,kEAAkE;MAEvD,MAAM,CAAA;AACT,IAAA,OAAO,OAAO,GAAW,GAAG;AAC5B,IAAA,OAAO,KAAK,GAAW,KAAK;AAE5B,IAAA,OAAO,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzB,QAAA,OAAO,CAAC;IACV;AAEQ,IAAA,OAAO,SAAS,CAAC,CAAS,EAAE,CAAS,EAAA;AAC3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,OAAO,GAAG;IACZ;IAEO,OAAO,MAAM,CAAC,CAAS,EAAA;AAC5B,QAAA,IAAI,IAAI,GAAG,CAAC,EACV,CAAC,EACD,GAAG,EACH,IAAI,GAAG,CAAC,CAAC,MAAM,EACf,CAAC,GAAG,EAAE;AAER,QAAA,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAEb,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;AACd,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;YACvC,IAAI,GAAG,CAAC;AACR,YAAA,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;gBACvC,IAAI,GAAG,CAAC;YACV;YACA,IAAI,IAAI,CAAC;QACX;AAEA,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,GAAG;gBACD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3B,qBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,qBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACrE;QAEA,QAAQ,IAAI;AACV,YAAA,KAAK,CAAC;gBACJ,GAAG;oBACD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3B,yBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,yBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACxD;AACF,YAAA,KAAK,CAAC;AACJ,gBAAA,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,gBAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBACtC;;AAGJ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACnB;IAEO,OAAO,MAAM,CAAC,CAAS,EAAA;AAC5B,QAAA,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAEb,IAAI,CAAC,EACH,GAAG,EACH,CAAC,GAAG,EAAE,EACN,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAElC,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,GAAG;gBACD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AACzB,qBAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxB,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AACpC,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACrC;AAEA,QAAA,QAAQ,CAAC,CAAC,MAAM,GAAG,IAAI;AACrB,YAAA,KAAK,CAAC;gBACJ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAC9B,gBAAA,CAAC,CAAC,IAAI,CACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1B,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,oBAAA,IAAI,CAAC,OAAO;oBACZ,IAAI,CAAC,OAAO,CACf;gBACD;AACF,YAAA,KAAK,CAAC;AACJ,gBAAA,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,gBAAA,CAAC,CAAC,IAAI,CACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1B,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,CAAC,OAAO,CACf;gBACD;;AAGJ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACnB;;;AC/GI,SAAU,iBAAiB,CAAC,UAAqB,EAAA;AACrD,IAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;QAC9B,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,YAAA,KAAK,IAAI,IAAI;AACb,YAAA,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,EACpC;AACA,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;QACzB;QACA,OAAO,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;AACxE,IAAA,CAAC,CAAC;AACJ;;ACPA,SAAS,SAAS,CAAC,CAAS,EAAE,WAAmB,EAAE,MAAc,EAAA;IAC/D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC;AAC9B,IAAA,OAAO,CAAC,CAAC,IAAI,WAAW,IAAI,IAAI;AAClC;MAEa,WAAW,CAAA;AACd,IAAA,WAAW,GAAG,IAAI,GAAG,EAAkB;AACvC,IAAA,WAAW,GAAG,IAAI,GAAG,EAAkB;AAE/C,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEQ,mBAAmB,GAAA;;;AAGzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE;;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E;;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E;;QAEA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;QACrB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,QAAkC,KAAI;AACvE,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,CAAC,MAAM,GAAG,MAAK;gBACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAY;AACjD,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AACpD,gBAAA,MAAM,cAAc,GAAmB;oBACrC,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,MAAM,EAAE;iBACT;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/B,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,cAAc,CAAC,cAA8B,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;AACpC,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;QACpC,MAAM,YAAY,GAAW,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC;AACxE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;AACpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,WAAW,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/C;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;AACjE,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,oBAAoB,CAAC,CAAS,EAAA;QACpC,IAAI,GAAG,GAAG,EAAE;QACZ,IAAI,IAAI,GAAG,EAAE;QACb,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,IAAI,GAAW;AACf,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB;YACF;AACA,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,IAAI,IAAI,CAAC;AACT,gBAAA,GAAG,IAAI,KAAK,IAAI,IAAI;YACtB;iBAAO;AACL,gBAAA,GAAG,GAAG,CAAC,GAAG,IAAI;AACd,gBAAA,GAAG,IAAI,KAAK,IAAI,GAAG;AACnB,gBAAA,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;gBAC/B,GAAG,GAAG,KAAK,KAAK,EAAE,GAAG,GAAG,CAAC;AACzB,gBAAA,IAAI,GAAG,EAAE,GAAG,GAAG;YACjB;QACF;QACA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;QACjC;QACA,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG;IACxC;IAEQ,sBAAsB,CAAC,CAAS,EAAE,MAAc,EAAA;QACtD,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC5B,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,IAAI,GAAW;AACf,QAAA,IAAI,GAAW;QACf,IAAI,IAAI,GAAG,EAAE;QACb,IAAI,GAAG,GAAG,EAAE;QACZ,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,IAAI,IAAI,CAAC;gBACT,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/B,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAClC;iBAAO;AACL,gBAAA,GAAG,GAAG,CAAC,GAAG,IAAI;gBACd,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG;gBACtC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACzB,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;gBACtC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AAChC,gBAAA,IAAI,GAAG,EAAE,GAAG,GAAG;YACjB;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AACD;;ICpIW;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;MCgBT,WAAW,CAAA;IACtB,OAAO,IAAI,CAAC,EAAU,EAAE,EAAU,EAAE,CAAC,GAAG,CAAC,EAAA;AACvC,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;AACd,YAAA,OAAO,EAAE;QACX;QACA,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,OAAO,yBAAyB,GAAG,EAAE,GAAG,SAAS;QACnD;QACA,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,OAAO,wBAAwB,GAAG,EAAE,GAAG,SAAS;QAClD;AACA,QAAA,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;AAClB,QAAA,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;AAClB,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CACpB,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CACtE,CAAC;QACF,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CACvB,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CACtE,CAAC;QACF,IAAI,MAAc,CAAC;QACnB,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,UAAU,CAAC,GAAG,GAAG,wBAAwB,GAAG,UAAU,CAAC,GAAG,GAAG,SAAS;QACxE;QACA,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,UAAU,CAAC,GAAG,GAAG,yBAAyB,GAAG,UAAU,CAAC,GAAG,GAAG,SAAS;QACzE;AACA,QAAA,MAAM,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;QAC1E,MAAM;AACJ,YAAA,QAAQ,KAAK,EAAE,IAAI,KAAK,KAAK;kBACzB,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;kBACnC,EAAE;AACR,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,OAAO,oBAAoB,CAAC,CAAS,EAAE,CAAW,EAAE,CAAS,EAAA;;QAEnE,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM;AACrB,QAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAEzC,QAAA,OAAO,CAAC,GAAG,IAAI,EAAE;;AAEf,YAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACV,kBAAE;AACA,uBAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;uBACb,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,kBAAE;AACA,uBAAG,CAAC,GAAG,IAAI;AACX;AACE,yBAAC,CAAC,GAAG,CAAC,CAAC;AACb,YAAA,EAAE,CAAC;QACL;AACA,QAAA,OAAO,CAAC;IACV;IAEQ,OAAO,UAAU,CACvB,EAAU,EACV,EAAU,EACV,CAAS,EACT,CAAS,EAAA;AAET,QAAA,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK;QAC1D,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI,OAAO,GAAG,YAAY;AAC1B,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC;AAEX,QAAA,OAAO,OAAO,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE;AACxD,YAAA,EAAE,EAAE;AACN,QAAA,CAAC;AACD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE5B,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,EAAE,GAAe;AACnB,YAAA,GAAG,EAAE,OAAO,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,EAAE;YACP,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACxB,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE;AACN,SAAA,CAAC;QACF,IAAI,GAAG,GAAY,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAEtE,QAAA,IAAI,OAAO,KAAK,EAAE,EAAE;YAClB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;;gBAErD,GAAG,GAAG,WAAW,CAAC,oBAAoB,CACpC,OAAO,EACP,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,EACtC,EAAE,CAAC,GAAG,CACP,CAAC;AACF,gBAAA,GAAG,CAAC,GAAG;AACL,oBAAA,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AACb,0BAAE,GAAG,CAAC,GAAG,GAAG,EAAE;0BACZ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AACzB,gBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;oBAClC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;gBACzB;YACF;QACF;;QAEA,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG;AACjB,cAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AAChE,cAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,EAAE,CAAC,GAAG,KAAK,EAAE;YACb,EAAE,CAAC,GAAG,KAAK,EAAE;YACb,EAAE,CAAC,GAAG,KAAK;AACX,cAAE;AACF,cAAE,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD;AAEQ,IAAA,OAAO,WAAW,CAAC,KAAe,EAAE,CAAS,EAAA;AACnD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;QACxB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,KAAK,CAAC,KAAK,EAAE;QACtB;aAAO;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;YAC/C;QACF;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,aAAa,CAAC,KAAa,EAAA;QAChC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B;IAEA,OAAO,aAAa,CAAC,KAAa,EAAA;AAChC,QAAA,QACE,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;AAChC,YAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;AACrB,YAAA,KAAK,CAAC,MAAM,GAAG,CAAC;IAEpB;AACD;;AC3JD;MAIa,WAAW,CAAA;IACtB,OAAO,WAAW,CAChB,IAAW,EACX,IAAW,EACX,aAAuB,EAAE,EAAA;AAEzB,QAAA,MAAM,KAAK,GAAoB;AAC7B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,QAAQ,EAAE;SACX;AAED,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,SAAS,GAA8B,CAAC,GAAG,IAAI,CAAC;AACtD,QAAA,MAAM,SAAS,GAA8B,CAAC,GAAG,IAAI,CAAC;AAEtD,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;AAE9D,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACjB,oBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE;AACpC,oBAAA,KAAK,EAAE;AACR,iBAAA,CAAC;gBACF;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1D,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEtD,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAC3C,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,CACX;AAED,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClB,oBAAA,MAAM,EAAE;wBACN,IAAI,EAAE,UAAU,CAAC,QAAQ;wBACzB;AACD,qBAAA;AACD,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;QACF;QAEA,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;YACxC,OAAO;AACL,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE;AAClC,gBAAA,KAAK,EAAE;aACR;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd;IAEQ,OAAO,aAAa,CAC1B,QAAa,EACb,MAAW,EACX,OAAgB,EAChB,UAAA,GAAuB,EAAE,EAAA;AAEzB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEtD,QAAA,MAAM,IAAI,GAAgB,IAAI,GAAG,CAAC;AAChC,YAAA,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxB,YAAA,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM;AACtB,SAAA,CAAC;QACF,IAAI,WAAW,GAAgB,EAAE;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,YAAA,MAAM,SAAS,GAAG,OAAO,GAAG,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG;YACrD,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;gBACxC;YACF;YAEA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAChC,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7C;YACA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC9B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACzC;AAEA,YAAA,IACE,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ;AACjC,gBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;AAC/B,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI;AACtB,gBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EACpB;gBACA,WAAW,GAAG,WAAW,CAAC,MAAM,CAC9B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAC1D;YACH;iBAAO;gBACL,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE;oBACjC,WAAW,CAAC,IAAI,CAAC;AACf,wBAAA,GAAG,EAAE,SAAS;AACd,wBAAA,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC;AAC5B,wBAAA,QAAQ,EAAE,WAAW,CAAC,GAAG;AAC1B,qBAAA,CAAC;AACF,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9D;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,WAAW;IACpB;AACD;;ACtHD,MAAM,aAAa,GAAG,IAAI,MAAM,CAC9B,wHAAwH,CACzH;AACD,MAAM,qBAAqB,GAAG,IAAI,MAAM,CACtC,oIAAoI,CACrI;AAEK,SAAU,SAAS,CAAC,KAAa,EAAA;AACrC,IAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpE,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AACzB,IAAA,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACjD;MAEa,SAAS,GAAG,CAAC,KAAK,EAAE,OAAO;AAGlC,SAAU,WAAW,CACzB,KAAyC,EAAA;AAEzC,IAAA,QACE,OAAO,KAAK,KAAK,QAAQ;QACzB,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAe,CAAC;AAExD;AAEM,SAAU,WAAW,CAAC,KAAuB,EAAA;AACjD,IAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QACtB,OAAO,IAAI,IAAI,EAAE;IACnB;IACA,OAAO,KAAK,YAAY,IAAI,GAAG,KAAK,GAAG,IAAI;AAC7C;;MChCa,QAAQ,CAAA;AACnB,IAAA,OAAO,MAAM,CACX,GAAa,EACb,OAAU,EACV,OAA2C,EAAA;QAE3C,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;AAErC,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;;YAExB,EAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAA2B,CAAC;QACzD;AAEA,QAAA,OAAO,EAAE;IACX;IAEA,OAAO,MAAM,CAAC,IAA8B,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;IACnC;AACD;;ACdM,eAAe,mBAAmB,CACvC,SAAqB,EACrB,aAAsB,EAAA;IAEtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC;IAEtC,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;AACjD;AACO,eAAe,uBAAuB,CAC3C,KAAa,EACb,IAAkB,EAClB,QAAkB,EAClB,IAGC,EAAA;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC;AAEtC,IAAA,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;AAEjE,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC;;AAGnE,IAAA,IAAI,IAAI,EAAE,MAAM,EAAE;QAChB,SAAS,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;IAC7C;IAEA,MAAM,qBAAqB,GAAG,EAAE;AAChC,IAAA,IAAI,SAAS,GACX,KAAK,CAAC,MAAM,IAAI;UACZ,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,qBAAqB;UACxC,KAAK;IAEX,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC3C,QAAA,SAAS,GAAG,CAAA,EAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,qBAAqB,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;IAClG;AAEA,IAAA,KAAK,CAAC,iBAAiB,CACrB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAChC;AACH;AAEO,eAAe,cAAc,CAClC,QAAkB,EAClB,QAAgB,EAChB,IAAqB,EAAA;IAErB,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO;UAC3D,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;UACpB,QAAQ;IACZ,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,EAAE,CAAA,EAAG,eAAe,CAAA,KAAA,CAAO,EAAE,IAAI,CAAC;AACtD;AAEA,SAAS,cAAc,CACrB,IAAS,EAAA;IAET,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AAC9B,QAAA,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI;AACpC,KAAA,CAAC,CAAC;AACL;AAEA,SAAS,iBAAiB,CACxB,MAAc,EACd,IAAS,EAAA;AAET,IAAA,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EACpE,MAAM,CAAC,MAAM,CACd;AACH;;ACnFA;;;;;;AAMG;SACa,eAAe,CAC7B,OAAe,EACf,QAAgB,EAChB,QAAgB,EAAA;IAEhB,MAAM,GAAG,GAAG,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,EAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA,CAAE;AAC7D,IAAA,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChC;AAEM,SAAU,YAAY,CAAC,IAAU,EAAE,QAAgB,EAAA;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AAC5C,IAAA,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChC;AAEA;;;;;;AAMG;AACG,SAAU,eAAe,CAAC,GAAW,EAAE,QAAgB,EAAA;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,IAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;AACjC,IAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC1C,IAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAElC,OAAO,CAAC,KAAK,EAAE;AAEf,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC;AAEA;;;;AAIG;AACG,SAAU,WAAW,CAAC,UAAkB,EAAA;AAC5C,IAAA,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU;IAC/C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;;ACnDA;MACa,WAAW,CAAA;AACtB,IAAA,OAAO,OAAO,CAAuB,GAAM,EAAE,GAAe,EAAA;AAC1D,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG;AACzB,aAAA,OAAO,CAAC,KAAK,EAAE,GAAG;AAClB,aAAA,OAAO,CAAC,KAAK,EAAE,EAAE;aACjB,KAAK,CAAC,GAAG,CAAC;QACb,IAAI,OAAO,GAAY,GAAG;QAC1B,IAAI,KAAK,GAAY,SAAS;AAC9B,QAAA,OAAO,SAAS,CAAC,MAAM,EAAE;YACvB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE;AACnD,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAY;AACrC,YAAA,KAAK,GAAG,OAAO,GAAI,OAAmC,CAAC,CAAC,CAAC;QAC3D;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,OAAO,QAAQ,CAAC,IAAa,EAAA;QAC3B,QACE,CAAC,CAAC,IAAI;YACN,OAAO,IAAI,KAAK,QAAQ;AACxB,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,KAAK,IAAI;AACb,YAAA,EAAE,IAAI,YAAY,IAAI,CAAC;IAE3B;;IAGA,OAAO,SAAS,CACd,MAAS;;IAET,MAAW,EACX,eAAe,GAAG,KAAK,EAAA;QAEvB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACxC,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAChE,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM;AACf,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS;AAC7D,iBAAA,OAAO,CAAC,CAAC,GAAG,KAAI;gBACf,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AACrC,oBAAA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE;AACpB,wBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C;yBAAO;wBACJ,MAAkC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAC9D,MAAM,CAAC,GAAG,CAA4B,EACtC,MAAM,CAAC,GAAG,CAA4B,EACtC,eAAe,CAChB;oBACH;gBACF;qBAAO;AACL,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C;AACF,YAAA,CAAC,CAAC;QACN;AACA,QAAA,OAAO,MAAM;IACf;;IAGA,OAAO,QAAQ,CAAU,GAAM,EAAA;AAC7B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAClB,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK;AACnC,kBAAE,IAAI,CAAC,QAAQ,CAAC,IAA+B;kBAC7C,IAAI,CACJ;QACR;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC7B,MAAM,MAAM,GAAG,EAAO;AACtB,YAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;AACtB,gBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC5B,oBAAA,MAAM,KAAK,GAAI,GAA+B,CAAC,IAAI,CAAC;oBACnD,MAAkC,CAAC,IAAI,CAAC;AACvC,wBAAA,KAAK,IAAI,OAAO,KAAK,KAAK;AACxB,8BAAE,IAAI,CAAC,QAAQ,CAAC,KAAgC;8BAC9C,KAAK;gBACb;YACF;AACA,YAAA,OAAO,MAAM;QACf;AACA,QAAA,OAAO,GAAG;IACZ;;IAGA,OAAO,8BAA8B,CAAC,GAAQ,EAAA;QAC5C,MAAM,uBAAuB,GAC3B,EAAE;QACJ,MAAM,gBAAgB,GAA4B,EAAE;QACpD,MAAM,cAAc,GAAqC,EAAE;AAE3D,QAAA,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE;AAC1B,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AAChC,gBAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW,EAAE;gBAChD,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;oBAC9D,uBAAuB,CAAC,iBAAiB,CAAC,GAAG;wBAC3C,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;qBAC5B;gBACH;qBAAO;AACL,oBAAA,uBAAuB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC;AAC9C,wBAAA,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AACzB,qBAAA,CAAC;gBACJ;;gBAEA,cAAc,CAAC,IAAI,CAAC;AAClB,oBAAA,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACxC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,KAAK,MAAM,mBAAmB,IAAI,uBAAuB,EAAE;AACzD,YAAA,IAAI,uBAAuB,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE;AAC/D,gBAAA,MAAM,yBAAyB,GAC7B,uBAAuB,CAAC,mBAAmB,CAAC;AAC9C,gBAAA,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE1C,oBAAA,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,CAAC,CAAC;oBACtD,gBAAgB,CAAC,mBAAmB,CAAC;wBACnC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD;AAAO,qBAAA,IAAI,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE;;oBAE/C,MAAM,uBAAuB,GAAG;AAC7B,yBAAA,MAAM,CACL,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,mBAAmB,CAAC,WAAW,EAAE;AAEjE,yBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,KAAI;AACxB,wBAAA,OAAO,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,OAAO;AACpD,oBAAA,CAAC,CAAC;AACJ,oBAAA,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AACzD,wBAAA,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBACpC;YACF;QACF;AACA,QAAA,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE;AAC1B,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AAChC,gBAAA,OAAO,GAAG,CAAC,QAAQ,CAAC;YACtB;QACF;AAEA,QAAA,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE;AACvC,YAAA,IAAI,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;gBAC7C,GAAG,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAC5C;QACF;IACF;;IAGA,OAAO,eAAe,CAAU,GAAM,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO;iBACJ,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,SAAS;iBACnC,GAAG,CAAC,CAAC,IAAI,KACR,OAAO,IAAI,KAAK;AACd,kBAAE,WAAW,CAAC,eAAe,CAAC,IAA+B;kBAC3D,IAAI,CACJ;QACV;AAEA,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC7B,MAAM,MAAM,GAA4B,EAAE;AAC1C,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG;AACZ,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;AACtC,iBAAA,OAAO,CAAC,CAAC,GAAG,KAAI;gBACf,MAAM,CAAC,GAAG,CAAC;AACT,oBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK;0BAChB,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAA4B;AACjE,0BAAE,GAAG,CAAC,GAAG,CAAC;AAChB,YAAA,CAAC,CAAC;AACJ,YAAA,OAAO,MAAW;QACpB;AAEA,QAAA,OAAO,GAAG;IACZ;;IAGA,OAAO,UAAU,CAAU,GAAM,EAAA;AAC/B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO;iBACJ,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI;iBAC9B,GAAG,CAAC,CAAC,IAAI,KACR,OAAO,IAAI,KAAK;AACd,kBAAE,WAAW,CAAC,UAAU,CAAC,IAA+B;kBACtD,IAAI,CACJ;QACV;AAEA,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC7B,MAAM,MAAM,GAA4B,EAAE;AAC1C,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG;AACZ,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;AACjC,iBAAA,OAAO,CAAC,CAAC,GAAG,KAAI;gBACf,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7D,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,UAAU,CAClC,GAAG,CAAC,GAAG,CAA4B,CACpC;gBACH;qBAAO;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;gBACxB;AACF,YAAA,CAAC,CAAC;AAEJ,YAAA,OAAO,MAAW;QACpB;AAEA,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,cAAc,CACnB,CAAU,EACV,CAAU,EACV,SAAS,GAAG,KAAK,EACjB,UAAoB,EAAA;AAEpB,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB;;;;QAKA,IACE,CAAC,KAAK,IAAI;AACV,YAAA,CAAC,KAAK,EAAE;AACR,YAAA,CAAC,KAAK,SAAS;AACf,YAAA,CAAC,KAAK,IAAI;AACV,YAAA,CAAC,KAAK,EAAE;YACR,CAAC,KAAK,SAAS,EACf;AACA,YAAA,MAAM,SAAS,GACb,CAAC,KAAK;AACJ,kBAAE;kBACA,CAAC,KAAK;AACN,sBAAE;sBACA,CAAC,KAAK;0BACJ,CAAC;0BACD,CAAC,KAAK;AACN,8BAAE;8BACA,CAAC,KAAK;kCACJ,CAAC;kCACD,CAAC,KAAK;AACN,sCAAE;sCACA,CAAC,CAAC;AAClB,YAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,gBAAA,OAAO,UAAU,KAAK,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;YAC1D;AACA,YAAA,OAAO,UAAU,KAAK,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,SAAS;QACzD;QAEA,MAAM,EAAE,GAAuB,EAAE;QACjC,MAAM,EAAE,GAAuB,EAAE;AACjC,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC;AACnB,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC;AAEnB,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAI;YACzC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAI;YACzC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE;AAC7B,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAG;AACtB,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAG;YACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,EAAE,EAAE;AACN,gBAAA,OAAO,EAAE;YACX;QACF;AAEA,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;IAC9B;AAEA;;;;;;;AAOG;AACH,IAAA,OAAO,oBAAoB,CACzB,IAA6B,EAC7B,IAA6B,EAAA;AAE7B,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAClD,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAClD,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;AAC7B,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACH,IAAA,OAAO,UAAU,CACf,GAA4B,EAC5B,IAAc,EAAA;AAEd,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG;AACnB,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACrC,aAAA,MAAM,CACL,CAAC,IAAI,EAAE,GAAG,KAAI;YACZ,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACpB,YAAA,OAAO,IAAI;QACb,CAAC,EACD,EAA6B,CAC9B;IACL;IAEA,OAAO,OAAO,CAAC,GAA4B,EAAA;QACzC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;IACtC;AACD;;MCzUY,WAAW,CAAA;AACtB,IAAA,OAAO,eAAe,CAAC,GAAW,EAAE,OAAO,GAAG,CAAC,EAAA;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,WAAW;IACpD;AACD;;ACLD;AACM,SAAU,OAAO,CAAmB,CAAM,EAAA;IAC9C,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AAC3B,QAAA,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;AACd,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB;;ACJA,MAAM,oBAAoB,GAAG,mCAAmC;AAChE,MAAM,OAAO,GAAG,cAAc;AAExB,SAAU,SAAS,CACvB,GAAa,EACb,SAAiB,EACjB,OAAe,oBAAoB,EAAA;AAEnC,IAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,MAAM;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAoB;IAEhE,IAAI,SAAS,EAAE;AACb,QAAA,SAAS,CAAC,IAAI,GAAG,GAAG;IACtB;SAAO;AACL,QAAA,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;IAChC;AACF;AAEA,SAAS,cAAc,CAAC,GAAa,EAAE,GAAW,EAAE,MAAmB,EAAA;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;AAC3C,QAAA,EAAE,EAAE,OAAO;AACX,QAAA,GAAG,EAAE,YAAY;AACjB,QAAA,IAAI,EAAE;AACP,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;AAC7B;;ACrBO,MAAM,cAAc,GAAG;MAEjB,IAAI,CAAA;AASL,IAAA,MAAA;AARF,IAAA,KAAK;AAEb,IAAA,WAAW;AACX,IAAA,KAAK;AACL,IAAA,QAAQ;IAER,WAAA,CACE,WAAgB,EACR,MAAsB,EAAA;QAAtB,IAAA,CAAA,MAAM,GAAN,MAAM;AAEd,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;QAE/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC;IAEA,GAAG,CAAC,GAAG,KAAU,EAAA;AACf,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AAC5B,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,SAAS,CAAC,QAA4B,EAAE,GAAG,KAAU,EAAA;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC;IACjD;IAEA,MAAM,CAAC,GAAG,KAAU,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IAC/B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;IACjB;AAEA,IAAA,KAAK,CAAC,IAAO,EAAA;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACjE;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,QAAkB,EAAE,GAAG,KAAU,EAAA;AACtC,QAAA,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC;AACpC,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,EAAG;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC;QAC5D,IAAI,CAAC,SAAS,EAAE;YACd;QACF;QAEA,MAAM,QAAQ,GACZ,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,IAAI,SAAS,CAAC;AACzC,cAAE;cACA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEtC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IACvD;AAEA,IAAA,WAAW,CAAC,IAAO,EAAA;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B;IAEQ,UAAU,CAChB,QAA4B,EAC5B,SAAS,GAAG,IAAI,CAAC,KAAK,EACtB,GAAG,KAAU,EAAA;QAEb,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACxB,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;QACtD,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;AAE1C,QAAA,OAAO,KAAK;IACd;IAEQ,OAAO,CAAC,GAAG,KAAU,EAAA;QAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAI,KAAI;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,GAAG;YACZ;AAEA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;AACvD,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,OAAO,GAAG;YACZ;AACA,YAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAEzB,YAAA,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,CAAC,EAAE,EAAE,CAAC;IACR;AAEA;;;;;AAKG;AACK,IAAA,IAAI,CACV,QAA4B,EAC5B,SAAc,EACd,GAAG,KAAU,EAAA;AAEb,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACvD;IAEQ,YAAY,CAClB,EAAU,EACV,cAAA,GAA2B,EAAE,EAC7B,MAAM,GAAG,IAAI,CAAC,KAAK,EAAA;AAEnB,QAAA,IAAI,SAAmB;QACvB,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;YAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;AAC5B,gBAAA,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACxC,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CACtC,EAAE,EACF,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5B,QAAQ,CACT;gBACD,IAAI,cAAc,EAAE;oBAClB,SAAS,GAAG,cAAc;AAC1B,oBAAA,OAAO,IAAI;gBACb;YACF;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAU;IACnB;AAEQ,IAAA,qBAAqB,CAAC,QAAkB,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,OAAO,IAAI,CAAC,KAAK;QACnB;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B;;AAGQ,IAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEQ,IAAA,IAAI,CAAC,QAAa,EAAA;QACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM;IACxD;;AAGQ,IAAA,YAAY,CAAC,EAAU,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,EAAA;AAChD,QAAA,IAAI,IAAmB;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;YACjB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC3B,IAAI,GAAG,IAAI;AACX,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACZ,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC;gBACtC,IAAI,IAAI,EAAE;AACR,oBAAA,OAAO,IAAI;gBACb;YACF;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,iBAAiB,CAAC,OAAiB,EAAA;AACjC,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,aAA4B,EAAE,KAAK,KAAI;gBAC5D,MAAM,QAAQ,GAAG;AACf,sBAAE,IAAI,CAAC,WAAW,CAAC,aAAa;AAChC,sBAAE,IAAI,CAAC,KAAK;gBACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,IAAI,SAAS,CAAC;YACvD,CAAC,EAAE,SAAS,CAAC;QACf;aAAO;YACL,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC;IACF;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAA;AACtD,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB;AAEQ,IAAA,eAAe,CAAC,IAAO,EAAA;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IACjC;;AAGQ,IAAA,eAAe,CAAC,EAAU,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,EAAA;AACnD,QAAA,IAAI,QAAyB;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;YACjB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC3B,QAAQ,GAAG,IAAI;AACf,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACZ,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC;gBAC7C,IAAI,QAAQ,EAAE;AACZ,oBAAA,OAAO,IAAI;gBACb;YACF;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;;AAGQ,IAAA,OAAO,CAAC,KAAU,EAAA;QACxB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACZ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB;AACA,YAAA,OAAO,IAAI;QACb,CAAC,EAAE,EAAS,CAAC;IACf;IAEQ,QAAQ,CAAC,EAAU,EAAE,QAAa,EAAA;AACxC,QAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9D;AACD;;SCnRe,EAAE,GAAA;IAChB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE;SAEgB,IAAI,GAAA;IAClB,MAAM,EAAE,GAAG,CAAA,EAAG,EAAE,EAAE,CAAA,EAAG,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,EAAG,EAAE,EAAE,CAAA,EAAG,EAAE,EAAE,CAAA,CAAE;AACzE,IAAA,OAAO,EAAE,CAAC,WAAW,EAAE;AACzB;;ICJY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACb,CAAC,EALW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;MAOH,OAAO,CAAA;AACpB,IAAA,OAAO,GAAG,IAAI,OAAO,EAAiB;AACnC,IAAA,QAAQ;AAElB,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IACA,IAAI,MAAM,CAAC,KAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AACQ,IAAA,OAAO;;IAOf,SAAS,CAAC,QAAkB,EAAE,KAAe,EAAA;QAC3C,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;AACvE,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO;IACrC;AACD;;ACzCD;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@igo2/utils",
3
- "version": "21.0.0-next.1",
3
+ "version": "21.0.0-next.3",
4
4
  "description": "IGO Library",
5
5
  "author": "IGO Community",
6
6
  "keywords": [
@@ -23,7 +23,7 @@ declare class Compression {
23
23
  private indexBase64;
24
24
  constructor();
25
25
  private generateBase64Index;
26
- compressBlob(blob: Blob): Observable<CompressedData>;
26
+ compressBlob(blob: Blob): Observable<CompressedData | null>;
27
27
  decompressBlob(compressedData: CompressedData): Blob;
28
28
  private compressStringBase64;
29
29
  private decompressStringBase64;
@@ -36,11 +36,12 @@ declare enum ChangeType {
36
36
  }
37
37
  interface Change {
38
38
  type: ChangeType;
39
- keysChanged?: {
40
- key: string;
41
- newValue: any;
42
- oldValue: any;
43
- }[];
39
+ keysChanged?: KeyChange[];
40
+ }
41
+ interface KeyChange {
42
+ key: string;
43
+ oldValue: unknown;
44
+ newValue: unknown;
44
45
  }
45
46
  interface GroupingChanges {
46
47
  added: ChangeItem[];
@@ -63,7 +64,7 @@ declare function isIsoDate(value: string): boolean;
63
64
  declare const TimeFrame: readonly ["now", "today"];
64
65
  type TimeFrame = (typeof TimeFrame)[number];
65
66
  declare function isTimeFrame(value: Date | TimeFrame | string | number): value is TimeFrame;
66
- declare function resolveDate(input?: Date | TimeFrame): Date | undefined;
67
+ declare function resolveDate(input: Date | TimeFrame): Date | null;
67
68
 
68
69
  declare class DomUtils {
69
70
  static create<K extends keyof HTMLElementTagNameMap>(doc: Document, tagName: K, options?: Partial<HTMLElementTagNameMap[K]>): HTMLElementTagNameMap[K];
@@ -71,7 +72,7 @@ declare class DomUtils {
71
72
  }
72
73
 
73
74
  declare function createExcelWorkBook(workSheet?: WorkSheet, workSheetName?: string): Promise<WorkBook>;
74
- declare function addExcelSheetToWorkBook<T = Record<string, unknown>>(title: string, rows: T[], workBook: WorkBook, opts?: {
75
+ declare function addExcelSheetToWorkBook<T = Record<string, unknown>>(title: string, rows: T[] | string, workBook: WorkBook, opts?: {
75
76
  json2SheetOpts?: JSON2SheetOpts;
76
77
  bookAppendSheetOpts?: {
77
78
  roll?: boolean;
@@ -104,31 +105,31 @@ declare function downloadFromUri(uri: string, fileName: string): void;
104
105
  declare function isValidJSON(jsonString: string): boolean;
105
106
 
106
107
  declare class ObjectUtils {
107
- static resolve(obj: object, key: string): any;
108
- static isObject(item: object): boolean;
109
- static mergeDeep(target: object, source: object, ignoreUndefined?: boolean): any;
110
- static copyDeep(src: any): any;
111
- static removeDuplicateCaseInsensitive(obj: object): void;
112
- static removeUndefined(obj: object): any;
113
- static removeNull(obj: object): any;
114
- static naturalCompare(a: any, b: any, direction?: string, nullsFirst?: boolean): any;
108
+ static resolve<T, K extends keyof T>(obj: T, key: K | string): unknown;
109
+ static isObject(item: unknown): item is Record<string, unknown>;
110
+ static mergeDeep<T = any>(target: T, source: any, ignoreUndefined?: boolean): T;
111
+ static copyDeep<T = any>(src: T): T;
112
+ static removeDuplicateCaseInsensitive(obj: any): void;
113
+ static removeUndefined<T = any>(obj: T): T;
114
+ static removeNull<T = any>(obj: T): T;
115
+ static naturalCompare(a: unknown, b: unknown, direction?: string, nullsFirst?: boolean): number;
115
116
  /**
116
117
  * Return true if two object are equivalent.
117
118
  * Objects are considered equivalent if they have the same properties and
118
119
  * if all of their properties (first-level only) share the same value.
119
120
  * @param obj1 First object
120
121
  * @param obj2 Second object
121
- * @returns Whether two objects arer equivalent
122
+ * @returns Whether two objects are equivalent
122
123
  */
123
- static objectsAreEquivalent(obj1: object, obj2: object): boolean;
124
+ static objectsAreEquivalent(obj1: Record<string, unknown>, obj2: Record<string, unknown>): boolean;
124
125
  /**
125
126
  * Return a new object with an array of keys removed
126
127
  * @param obj Source object
127
128
  * @param keys Keys to remove
128
129
  * @returns A new object
129
130
  */
130
- static removeKeys(obj: object, keys: string[]): object;
131
- static isEmpty(obj: object): boolean;
131
+ static removeKeys(obj: Record<string, unknown>, keys: string[]): Record<string, unknown>;
132
+ static isEmpty(obj: Record<string, unknown>): boolean;
132
133
  }
133
134
 
134
135
  declare class NumberUtils {
@@ -178,7 +179,7 @@ declare class Tree<T> {
178
179
  * @param node
179
180
  * @param beforeTo The position of index into the tree. If -1 move at the end
180
181
  */
181
- moveTo(beforeTo: number[], ...nodes: T[]): T[];
182
+ moveTo(beforeTo: number[], ...nodes: T[]): T[] | undefined;
182
183
  getPosition(node: T): number[];
183
184
  private _addBefore;
184
185
  private _remove;
@@ -196,7 +197,7 @@ declare class Tree<T> {
196
197
  private sort;
197
198
  /** Recursive */
198
199
  private _getNodeById;
199
- getNodeByPosition(indexes: number[]): T;
200
+ getNodeByPosition(indexes: number[]): T | undefined;
200
201
  private _getByIndex;
201
202
  private getNodeAncestor;
202
203
  /** Recursive */
@@ -222,14 +223,14 @@ declare enum SubjectStatus {
222
223
  declare abstract class Watcher {
223
224
  status$: Subject<SubjectStatus>;
224
225
  protected status$$: Subscription;
225
- get status(): SubjectStatus;
226
+ get status(): SubjectStatus | undefined;
226
227
  set status(value: SubjectStatus);
227
- private _status;
228
- protected abstract watch(): any;
229
- protected abstract unwatch(): any;
230
- subscribe(callback: Function, scope?: any): void;
228
+ private _status?;
229
+ protected abstract watch(): void;
230
+ protected abstract unwatch(): void;
231
+ subscribe(callback: Function, scope?: unknown): void;
231
232
  unsubscribe(): void;
232
233
  }
233
234
 
234
235
  export { Base64, ChangeType, ChangeUtils, Compression, DomUtils, NumberUtils, ObjectUtils, S4, StringUtils, SubjectStatus, TREE_SEPERATOR, TimeFrame, Tree, Watcher, addExcelSheetToWorkBook, createExcelWorkBook, customCacheHasher, downloadBlob, downloadContent, downloadFromUri, isIsoDate, isTimeFrame, isValidJSON, loadTheme, resolveDate, strEnum, uuid, writeExcelFile };
235
- export type { Change, ChangeItem, CompressedData, GroupingChanges, ITreeConfig, OptionalRequired };
236
+ export type { Change, ChangeItem, CompressedData, GroupingChanges, ITreeConfig, KeyChange, OptionalRequired };