{"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 = 0;\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 = 0;\n    let rem = 0;\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 = ''; // 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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"}