{"version":3,"file":"execute-query-uQ2s1ZNz.cjs","sources":["../../../node_modules/i18next/dist/esm/i18next.js","../../sdk-common/dist/i18n/resources/en.js","../../sdk-common/dist/i18n/resources/uk.js","../../sdk-common/dist/i18n/resources/index.js","../../sdk-common/dist/i18n/i18next.js","../../sdk-common/dist/i18n/abstract-translatable-error.js","../../sdk-common/dist/utils/escapeSingleQuotes.js","../../../node_modules/react-i18next/dist/es/unescape.js","../../../node_modules/react-i18next/dist/es/defaults.js","../../../node_modules/react-i18next/dist/es/i18nInstance.js","../../../node_modules/react-i18next/dist/es/initReactI18next.js","../src/translation/resources/en.ts","../src/translation/resources/uk.ts","../src/translation/resources/index.ts","../src/translation/initialize-i18n.ts","../../sdk-data/dist/translation/resources/en.js","../../sdk-data/dist/translation/resources/uk.js","../../sdk-data/dist/translation/resources/index.js","../../sdk-data/dist/translation/initialize-i18n.js","../../../node_modules/lodash-es/_listCacheClear.js","../../../node_modules/lodash-es/eq.js","../../../node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/lodash-es/_listCacheGet.js","../../../node_modules/lodash-es/_listCacheHas.js","../../../node_modules/lodash-es/_listCacheSet.js","../../../node_modules/lodash-es/_ListCache.js","../../../node_modules/lodash-es/_stackClear.js","../../../node_modules/lodash-es/_stackDelete.js","../../../node_modules/lodash-es/_stackGet.js","../../../node_modules/lodash-es/_stackHas.js","../../../node_modules/lodash-es/_freeGlobal.js","../../../node_modules/lodash-es/_root.js","../../../node_modules/lodash-es/_Symbol.js","../../../node_modules/lodash-es/_getRawTag.js","../../../node_modules/lodash-es/_objectToString.js","../../../node_modules/lodash-es/_baseGetTag.js","../../../node_modules/lodash-es/isObject.js","../../../node_modules/lodash-es/isFunction.js","../../../node_modules/lodash-es/_coreJsData.js","../../../node_modules/lodash-es/_isMasked.js","../../../node_modules/lodash-es/_toSource.js","../../../node_modules/lodash-es/_baseIsNative.js","../../../node_modules/lodash-es/_getValue.js","../../../node_modules/lodash-es/_getNative.js","../../../node_modules/lodash-es/_Map.js","../../../node_modules/lodash-es/_nativeCreate.js","../../../node_modules/lodash-es/_hashClear.js","../../../node_modules/lodash-es/_hashDelete.js","../../../node_modules/lodash-es/_hashGet.js","../../../node_modules/lodash-es/_hashHas.js","../../../node_modules/lodash-es/_hashSet.js","../../../node_modules/lodash-es/_Hash.js","../../../node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/lodash-es/_isKeyable.js","../../../node_modules/lodash-es/_getMapData.js","../../../node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/lodash-es/_MapCache.js","../../../node_modules/lodash-es/_stackSet.js","../../../node_modules/lodash-es/_Stack.js","../../../node_modules/lodash-es/_arrayEach.js","../../../node_modules/lodash-es/_defineProperty.js","../../../node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/lodash-es/_assignValue.js","../../../node_modules/lodash-es/_copyObject.js","../../../node_modules/lodash-es/_baseTimes.js","../../../node_modules/lodash-es/isObjectLike.js","../../../node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/lodash-es/isArguments.js","../../../node_modules/lodash-es/isArray.js","../../../node_modules/lodash-es/stubFalse.js","../../../node_modules/lodash-es/isBuffer.js","../../../node_modules/lodash-es/_isIndex.js","../../../node_modules/lodash-es/isLength.js","../../../node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/lodash-es/_baseUnary.js","../../../node_modules/lodash-es/_nodeUtil.js","../../../node_modules/lodash-es/isTypedArray.js","../../../node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/lodash-es/_isPrototype.js","../../../node_modules/lodash-es/_overArg.js","../../../node_modules/lodash-es/_nativeKeys.js","../../../node_modules/lodash-es/_baseKeys.js","../../../node_modules/lodash-es/isArrayLike.js","../../../node_modules/lodash-es/keys.js","../../../node_modules/lodash-es/_baseAssign.js","../../../node_modules/lodash-es/_nativeKeysIn.js","../../../node_modules/lodash-es/_baseKeysIn.js","../../../node_modules/lodash-es/keysIn.js","../../../node_modules/lodash-es/_baseAssignIn.js","../../../node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/lodash-es/_copyArray.js","../../../node_modules/lodash-es/_arrayFilter.js","../../../node_modules/lodash-es/stubArray.js","../../../node_modules/lodash-es/_getSymbols.js","../../../node_modules/lodash-es/_copySymbols.js","../../../node_modules/lodash-es/_arrayPush.js","../../../node_modules/lodash-es/_getPrototype.js","../../../node_modules/lodash-es/_getSymbolsIn.js","../../../node_modules/lodash-es/_copySymbolsIn.js","../../../node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/lodash-es/_getAllKeys.js","../../../node_modules/lodash-es/_getAllKeysIn.js","../../../node_modules/lodash-es/_DataView.js","../../../node_modules/lodash-es/_Promise.js","../../../node_modules/lodash-es/_Set.js","../../../node_modules/lodash-es/_WeakMap.js","../../../node_modules/lodash-es/_getTag.js","../../../node_modules/lodash-es/_initCloneArray.js","../../../node_modules/lodash-es/_Uint8Array.js","../../../node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/lodash-es/_cloneDataView.js","../../../node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/lodash-es/_baseCreate.js","../../../node_modules/lodash-es/_initCloneObject.js","../../../node_modules/lodash-es/_baseIsMap.js","../../../node_modules/lodash-es/isMap.js","../../../node_modules/lodash-es/_baseIsSet.js","../../../node_modules/lodash-es/isSet.js","../../../node_modules/lodash-es/_baseClone.js","../../../node_modules/lodash-es/cloneDeep.js","../../../node_modules/lodash-es/_createBaseFor.js","../../../node_modules/lodash-es/_baseFor.js","../../../node_modules/lodash-es/_baseForOwn.js","../../../node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/lodash-es/_setCacheHas.js","../../../node_modules/lodash-es/_SetCache.js","../../../node_modules/lodash-es/_arraySome.js","../../../node_modules/lodash-es/_cacheHas.js","../../../node_modules/lodash-es/_equalArrays.js","../../../node_modules/lodash-es/_mapToArray.js","../../../node_modules/lodash-es/_setToArray.js","../../../node_modules/lodash-es/_equalByTag.js","../../../node_modules/lodash-es/_equalObjects.js","../../../node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/lodash-es/_baseIsMatch.js","../../../node_modules/lodash-es/_isStrictComparable.js","../../../node_modules/lodash-es/_getMatchData.js","../../../node_modules/lodash-es/_matchesStrictComparable.js","../../../node_modules/lodash-es/_baseMatches.js","../../../node_modules/lodash-es/isSymbol.js","../../../node_modules/lodash-es/_isKey.js","../../../node_modules/lodash-es/memoize.js","../../../node_modules/lodash-es/_memoizeCapped.js","../../../node_modules/lodash-es/_stringToPath.js","../../../node_modules/lodash-es/_arrayMap.js","../../../node_modules/lodash-es/_baseToString.js","../../../node_modules/lodash-es/toString.js","../../../node_modules/lodash-es/_castPath.js","../../../node_modules/lodash-es/_toKey.js","../../../node_modules/lodash-es/_baseGet.js","../../../node_modules/lodash-es/get.js","../../../node_modules/lodash-es/_baseHasIn.js","../../../node_modules/lodash-es/_hasPath.js","../../../node_modules/lodash-es/hasIn.js","../../../node_modules/lodash-es/_baseMatchesProperty.js","../../../node_modules/lodash-es/identity.js","../../../node_modules/lodash-es/_baseProperty.js","../../../node_modules/lodash-es/_basePropertyDeep.js","../../../node_modules/lodash-es/property.js","../../../node_modules/lodash-es/_baseIteratee.js","../../../node_modules/lodash-es/mapValues.js","../../../node_modules/hash-it/dist/esm/index.mjs","../../../node_modules/lodash-es/_assignMergeValue.js","../../../node_modules/lodash-es/isArrayLikeObject.js","../../../node_modules/lodash-es/isPlainObject.js","../../../node_modules/lodash-es/_safeGet.js","../../../node_modules/lodash-es/toPlainObject.js","../../../node_modules/lodash-es/_baseMergeDeep.js","../../../node_modules/lodash-es/_baseMerge.js","../../../node_modules/lodash-es/_apply.js","../../../node_modules/lodash-es/_overRest.js","../../../node_modules/lodash-es/constant.js","../../../node_modules/lodash-es/_baseSetToString.js","../../../node_modules/lodash-es/_shortOut.js","../../../node_modules/lodash-es/_setToString.js","../../../node_modules/lodash-es/_baseRest.js","../../../node_modules/lodash-es/_isIterateeCall.js","../../../node_modules/lodash-es/_createAssigner.js","../../../node_modules/lodash-es/merge.js","../../../node_modules/lodash-es/last.js","../../../node_modules/lodash-es/_baseSlice.js","../../../node_modules/lodash-es/_parent.js","../../../node_modules/lodash-es/_baseUnset.js","../../../node_modules/lodash-es/_customOmitClone.js","../../../node_modules/lodash-es/_isFlattenable.js","../../../node_modules/lodash-es/_baseFlatten.js","../../../node_modules/lodash-es/flatten.js","../../../node_modules/lodash-es/_flatRest.js","../../../node_modules/lodash-es/omit.js","../../sdk-data/dist/translation/translatable-error.js","../../sdk-data/dist/dimensional-model/base.js","../../sdk-data/dist/dimensional-model/consts.js","../../sdk-data/dist/dimensional-model/types.js","../../sdk-data/dist/dimensional-model/compose-code-utils.js","../../sdk-data/dist/dimensional-model/measures/factory.js","../../sdk-data/dist/dimensional-model/measures/measures.js","../../../node_modules/lodash-es/isEqual.js","../../sdk-data/dist/dimensional-model/filters/filter-config-utils.js","../../sdk-data/dist/dimensional-model/filters/filters.js","../../sdk-data/dist/dimensional-model/filters/factory.js","../../sdk-data/dist/dimensional-model/filters/utils/attribute-measure-util.js","../../sdk-data/dist/dimensional-model/filters/utils/types.js","../../sdk-data/dist/dimensional-model/filters/utils/condition-filter-util.js","../../sdk-data/dist/dimensional-model/filters/utils/date-time-filter-util.js","../../sdk-data/dist/dimensional-model/filters/utils/filter-types-util.js","../../sdk-data/dist/dimensional-model/filters/utils/filter-from-jaql-util.js","../../sdk-data/dist/dimensional-model/simple-column-types.js","../../sdk-data/dist/utils.js","../../sdk-data/dist/dimensional-model/attributes.js","../../sdk-data/dist/dimensional-model/interfaces.js","../../sdk-data/dist/dimensional-model/filters/filter-relations.js","../../../node_modules/ts-deepmerge/esm/index.js","../../../node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/uuid/dist/esm-browser/native.js","../../../node_modules/uuid/dist/esm-browser/v4.js","../../sdk-query-client/dist/jaql/metadata/highlights.js","../../sdk-query-client/dist/jaql/pivot/pivot-query-utils.js","../../sdk-query-client/dist/jaql/get-jaql-query-payload.js","../src/translation/translatable-error.ts","../src/utils/create-cache.ts","../src/query/execute-query.ts"],"sourcesContent":["const consoleLogger = {\n  type: 'logger',\n  log(args) {\n    this.output('log', args);\n  },\n  warn(args) {\n    this.output('warn', args);\n  },\n  error(args) {\n    this.output('error', args);\n  },\n  output(type, args) {\n    if (console && console[type]) console[type].apply(console, args);\n  }\n};\nclass Logger {\n  constructor(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.init(concreteLogger, options);\n  }\n  init(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.prefix = options.prefix || 'i18next:';\n    this.logger = concreteLogger || consoleLogger;\n    this.options = options;\n    this.debug = options.debug;\n  }\n  log() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return this.forward(args, 'log', '', true);\n  }\n  warn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return this.forward(args, 'warn', '', true);\n  }\n  error() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return this.forward(args, 'error', '');\n  }\n  deprecate() {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n  }\n  forward(args, lvl, prefix, debugOnly) {\n    if (debugOnly && !this.debug) return null;\n    if (typeof args[0] === 'string') args[0] = `${prefix}${this.prefix} ${args[0]}`;\n    return this.logger[lvl](args);\n  }\n  create(moduleName) {\n    return new Logger(this.logger, {\n      ...{\n        prefix: `${this.prefix}:${moduleName}:`\n      },\n      ...this.options\n    });\n  }\n  clone(options) {\n    options = options || this.options;\n    options.prefix = options.prefix || this.prefix;\n    return new Logger(this.logger, options);\n  }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n  constructor() {\n    this.observers = {};\n  }\n  on(events, listener) {\n    events.split(' ').forEach(event => {\n      this.observers[event] = this.observers[event] || [];\n      this.observers[event].push(listener);\n    });\n    return this;\n  }\n  off(event, listener) {\n    if (!this.observers[event]) return;\n    if (!listener) {\n      delete this.observers[event];\n      return;\n    }\n    this.observers[event] = this.observers[event].filter(l => l !== listener);\n  }\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (this.observers[event]) {\n      const cloned = [].concat(this.observers[event]);\n      cloned.forEach(observer => {\n        observer(...args);\n      });\n    }\n    if (this.observers['*']) {\n      const cloned = [].concat(this.observers['*']);\n      cloned.forEach(observer => {\n        observer.apply(observer, [event, ...args]);\n      });\n    }\n  }\n}\n\nfunction defer() {\n  let res;\n  let rej;\n  const promise = new Promise((resolve, reject) => {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(m => {\n    if (s[m]) t[m] = s[m];\n  });\n}\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n  const stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n    const key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      object = object[key];\n    } else {\n      object = {};\n    }\n  }\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\nfunction setPath(object, path, newValue) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path);\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n  const value = getPath(data, key);\n  if (value !== undefined) {\n    return value;\n  }\n  return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n  for (const prop in source) {\n    if (prop !== '__proto__' && prop !== 'constructor') {\n      if (prop in target) {\n        if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n          if (overwrite) target[prop] = source[prop];\n        } else {\n          deepExtend(target[prop], source[prop], overwrite);\n        }\n      } else {\n        target[prop] = source[prop];\n      }\n    }\n  }\n  return target;\n}\nfunction regexEscape(str) {\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n  }\n  return data;\n}\nconst chars = [' ', ',', '?', '!', ';'];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n  nsSeparator = nsSeparator || '';\n  keySeparator = keySeparator || '';\n  const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n  if (possibleChars.length === 0) return true;\n  const r = new RegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n  let matched = !r.test(key);\n  if (!matched) {\n    const ki = key.indexOf(keySeparator);\n    if (ki > 0 && !r.test(key.substring(0, ki))) {\n      matched = true;\n    }\n  }\n  return matched;\n}\nfunction deepFind(obj, path) {\n  let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  if (!obj) return undefined;\n  if (obj[path]) return obj[path];\n  const paths = path.split(keySeparator);\n  let current = obj;\n  for (let i = 0; i < paths.length; ++i) {\n    if (!current) return undefined;\n    if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) {\n      return undefined;\n    }\n    if (current[paths[i]] === undefined) {\n      let j = 2;\n      let p = paths.slice(i, i + j).join(keySeparator);\n      let mix = current[p];\n      while (mix === undefined && paths.length > i + j) {\n        j++;\n        p = paths.slice(i, i + j).join(keySeparator);\n        mix = current[p];\n      }\n      if (mix === undefined) return undefined;\n      if (mix === null) return null;\n      if (path.endsWith(p)) {\n        if (typeof mix === 'string') return mix;\n        if (p && typeof mix[p] === 'string') return mix[p];\n      }\n      const joinedPath = paths.slice(i + j).join(keySeparator);\n      if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n      return undefined;\n    }\n    current = current[paths[i]];\n  }\n  return current;\n}\nfunction getCleanedCode(code) {\n  if (code && code.indexOf('_') > 0) return code.replace('_', '-');\n  return code;\n}\n\nclass ResourceStore extends EventEmitter {\n  constructor(data) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n    super();\n    this.data = data || {};\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    if (this.options.ignoreJSONStructure === undefined) {\n      this.options.ignoreJSONStructure = true;\n    }\n  }\n  addNamespaces(ns) {\n    if (this.options.ns.indexOf(ns) < 0) {\n      this.options.ns.push(ns);\n    }\n  }\n  removeNamespaces(ns) {\n    const index = this.options.ns.indexOf(ns);\n    if (index > -1) {\n      this.options.ns.splice(index, 1);\n    }\n  }\n  getResource(lng, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n    let path = [lng, ns];\n    if (key && typeof key !== 'string') path = path.concat(key);\n    if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n    }\n    const result = getPath(this.data, path);\n    if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n    return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n  }\n  addResource(lng, ns, key, value) {\n    let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      silent: false\n    };\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let path = [lng, ns];\n    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      value = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    setPath(this.data, path, value);\n    if (!options.silent) this.emit('added', lng, ns, key, value);\n  }\n  addResources(lng, ns, resources) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n      silent: false\n    };\n    for (const m in resources) {\n      if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n        silent: true\n      });\n    }\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  addResourceBundle(lng, ns, resources, deep, overwrite) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n      silent: false\n    };\n    let path = [lng, ns];\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      deep = resources;\n      resources = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    let pack = getPath(this.data, path) || {};\n    if (deep) {\n      deepExtend(pack, resources, overwrite);\n    } else {\n      pack = {\n        ...pack,\n        ...resources\n      };\n    }\n    setPath(this.data, path, pack);\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  removeResourceBundle(lng, ns) {\n    if (this.hasResourceBundle(lng, ns)) {\n      delete this.data[lng][ns];\n    }\n    this.removeNamespaces(ns);\n    this.emit('removed', lng, ns);\n  }\n  hasResourceBundle(lng, ns) {\n    return this.getResource(lng, ns) !== undefined;\n  }\n  getResourceBundle(lng, ns) {\n    if (!ns) ns = this.options.defaultNS;\n    if (this.options.compatibilityAPI === 'v1') return {\n      ...{},\n      ...this.getResource(lng, ns)\n    };\n    return this.getResource(lng, ns);\n  }\n  getDataByLanguage(lng) {\n    return this.data[lng];\n  }\n  hasLanguageSomeTranslations(lng) {\n    const data = this.getDataByLanguage(lng);\n    const n = data && Object.keys(data) || [];\n    return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n  }\n  toJSON() {\n    return this.data;\n  }\n}\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle(processors, value, key, options, translator) {\n    processors.forEach(processor => {\n      if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n  constructor(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    this.logger = baseLogger.create('translator');\n  }\n  changeLanguage(lng) {\n    if (lng) this.language = lng;\n  }\n  exists(key) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    if (key === undefined || key === null) {\n      return false;\n    }\n    const resolved = this.resolve(key, options);\n    return resolved && resolved.res !== undefined;\n  }\n  extractFromKey(key, options) {\n    let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n    if (nsSeparator === undefined) nsSeparator = ':';\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let namespaces = options.ns || this.options.defaultNS || [];\n    const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n    const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n    if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n      const m = key.match(this.interpolator.nestingRegexp);\n      if (m && m.length > 0) {\n        return {\n          key,\n          namespaces\n        };\n      }\n      const parts = key.split(nsSeparator);\n      if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n      key = parts.join(keySeparator);\n    }\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    return {\n      key,\n      namespaces\n    };\n  }\n  translate(keys, options, lastKey) {\n    if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n      options = this.options.overloadTranslationOptionHandler(arguments);\n    }\n    if (typeof options === 'object') options = {\n      ...options\n    };\n    if (!options) options = {};\n    if (keys === undefined || keys === null) return '';\n    if (!Array.isArray(keys)) keys = [String(keys)];\n    const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const {\n      key,\n      namespaces\n    } = this.extractFromKey(keys[keys.length - 1], options);\n    const namespace = namespaces[namespaces.length - 1];\n    const lng = options.lng || this.language;\n    const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n    if (lng && lng.toLowerCase() === 'cimode') {\n      if (appendNamespaceToCIMode) {\n        const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n        if (returnDetails) {\n          return {\n            res: `${namespace}${nsSeparator}${key}`,\n            usedKey: key,\n            exactUsedKey: key,\n            usedLng: lng,\n            usedNS: namespace\n          };\n        }\n        return `${namespace}${nsSeparator}${key}`;\n      }\n      if (returnDetails) {\n        return {\n          res: key,\n          usedKey: key,\n          exactUsedKey: key,\n          usedLng: lng,\n          usedNS: namespace\n        };\n      }\n      return key;\n    }\n    const resolved = this.resolve(keys, options);\n    let res = resolved && resolved.res;\n    const resUsedKey = resolved && resolved.usedKey || key;\n    const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n    const resType = Object.prototype.toString.apply(res);\n    const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n    const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n    const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n    const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n    if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n      if (!options.returnObjects && !this.options.returnObjects) {\n        if (!this.options.returnedObjectHandler) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n        }\n        const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n          ...options,\n          ns: namespaces\n        }) : `key '${key} (${this.language})' returned an object instead of string.`;\n        if (returnDetails) {\n          resolved.res = r;\n          return resolved;\n        }\n        return r;\n      }\n      if (keySeparator) {\n        const resTypeIsArray = resType === '[object Array]';\n        const copy = resTypeIsArray ? [] : {};\n        const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n        for (const m in res) {\n          if (Object.prototype.hasOwnProperty.call(res, m)) {\n            const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n            copy[m] = this.translate(deepKey, {\n              ...options,\n              ...{\n                joinArrays: false,\n                ns: namespaces\n              }\n            });\n            if (copy[m] === deepKey) copy[m] = res[m];\n          }\n        }\n        res = copy;\n      }\n    } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n      res = res.join(joinArrays);\n      if (res) res = this.extendTranslation(res, keys, options, lastKey);\n    } else {\n      let usedDefault = false;\n      let usedKey = false;\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const hasDefaultValue = Translator.hasDefaultValue(options);\n      const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n      const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n        ordinal: false\n      }) : '';\n      const defaultValue = options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n      if (!this.isValidLookup(res) && hasDefaultValue) {\n        usedDefault = true;\n        res = defaultValue;\n      }\n      if (!this.isValidLookup(res)) {\n        usedKey = true;\n        res = key;\n      }\n      const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n      const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n      const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n      if (usedKey || usedDefault || updateMissing) {\n        this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n        if (keySeparator) {\n          const fk = this.resolve(key, {\n            ...options,\n            keySeparator: false\n          });\n          if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n        }\n        let lngs = [];\n        const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n        if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n          for (let i = 0; i < fallbackLngs.length; i++) {\n            lngs.push(fallbackLngs[i]);\n          }\n        } else if (this.options.saveMissingTo === 'all') {\n          lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n        } else {\n          lngs.push(options.lng || this.language);\n        }\n        const send = (l, k, specificDefaultValue) => {\n          const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n          if (this.options.missingKeyHandler) {\n            this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n          } else if (this.backendConnector && this.backendConnector.saveMissing) {\n            this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n          }\n          this.emit('missingKey', l, namespace, k, res);\n        };\n        if (this.options.saveMissing) {\n          if (this.options.saveMissingPlurals && needsPluralHandling) {\n            lngs.forEach(language => {\n              this.pluralResolver.getSuffixes(language, options).forEach(suffix => {\n                send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n              });\n            });\n          } else {\n            send(lngs, key, defaultValue);\n          }\n        }\n      }\n      res = this.extendTranslation(res, keys, options, resolved, lastKey);\n      if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n      if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n        if (this.options.compatibilityAPI !== 'v1') {\n          res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n        } else {\n          res = this.options.parseMissingKeyHandler(res);\n        }\n      }\n    }\n    if (returnDetails) {\n      resolved.res = res;\n      return resolved;\n    }\n    return res;\n  }\n  extendTranslation(res, key, options, resolved, lastKey) {\n    var _this = this;\n    if (this.i18nFormat && this.i18nFormat.parse) {\n      res = this.i18nFormat.parse(res, {\n        ...this.options.interpolation.defaultVariables,\n        ...options\n      }, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n        resolved\n      });\n    } else if (!options.skipInterpolation) {\n      if (options.interpolation) this.interpolator.init({\n        ...options,\n        ...{\n          interpolation: {\n            ...this.options.interpolation,\n            ...options.interpolation\n          }\n        }\n      });\n      const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n      let nestBef;\n      if (skipOnVariables) {\n        const nb = res.match(this.interpolator.nestingRegexp);\n        nestBef = nb && nb.length;\n      }\n      let data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n      if (this.options.interpolation.defaultVariables) data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n      res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n      if (skipOnVariables) {\n        const na = res.match(this.interpolator.nestingRegexp);\n        const nestAft = na && na.length;\n        if (nestBef < nestAft) options.nest = false;\n      }\n      if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng;\n      if (options.nest !== false) res = this.interpolator.nest(res, function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        if (lastKey && lastKey[0] === args[0] && !options.context) {\n          _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n          return null;\n        }\n        return _this.translate(...args, key);\n      }, options);\n      if (options.interpolation) this.interpolator.reset();\n    }\n    const postProcess = options.postProcess || this.options.postProcess;\n    const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n    if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n      res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n        i18nResolved: resolved,\n        ...options\n      } : options, this);\n    }\n    return res;\n  }\n  resolve(keys) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let found;\n    let usedKey;\n    let exactUsedKey;\n    let usedLng;\n    let usedNS;\n    if (typeof keys === 'string') keys = [keys];\n    keys.forEach(k => {\n      if (this.isValidLookup(found)) return;\n      const extracted = this.extractFromKey(k, options);\n      const key = extracted.key;\n      usedKey = key;\n      let namespaces = extracted.namespaces;\n      if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n      const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n      namespaces.forEach(ns => {\n        if (this.isValidLookup(found)) return;\n        usedNS = ns;\n        if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n          checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n          this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n        }\n        codes.forEach(code => {\n          if (this.isValidLookup(found)) return;\n          usedLng = code;\n          const finalKeys = [key];\n          if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n            this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n          } else {\n            let pluralSuffix;\n            if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n            const zeroSuffix = `${this.options.pluralSeparator}zero`;\n            const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n            if (needsPluralHandling) {\n              finalKeys.push(key + pluralSuffix);\n              if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n              }\n              if (needsZeroSuffixLookup) {\n                finalKeys.push(key + zeroSuffix);\n              }\n            }\n            if (needsContextHandling) {\n              const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n              finalKeys.push(contextKey);\n              if (needsPluralHandling) {\n                finalKeys.push(contextKey + pluralSuffix);\n                if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                  finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n                }\n                if (needsZeroSuffixLookup) {\n                  finalKeys.push(contextKey + zeroSuffix);\n                }\n              }\n            }\n          }\n          let possibleKey;\n          while (possibleKey = finalKeys.pop()) {\n            if (!this.isValidLookup(found)) {\n              exactUsedKey = possibleKey;\n              found = this.getResource(code, ns, possibleKey, options);\n            }\n          }\n        });\n      });\n    });\n    return {\n      res: found,\n      usedKey,\n      exactUsedKey,\n      usedLng,\n      usedNS\n    };\n  }\n  isValidLookup(res) {\n    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n  }\n  getResource(code, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n    return this.resourceStore.getResource(code, ns, key, options);\n  }\n  static hasDefaultValue(options) {\n    const prefix = 'defaultValue';\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\nclass LanguageUtil {\n  constructor(options) {\n    this.options = options;\n    this.supportedLngs = this.options.supportedLngs || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n  getScriptPartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return null;\n    const p = code.split('-');\n    if (p.length === 2) return null;\n    p.pop();\n    if (p[p.length - 1].toLowerCase() === 'x') return null;\n    return this.formatLanguageCode(p.join('-'));\n  }\n  getLanguagePartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return code;\n    const p = code.split('-');\n    return this.formatLanguageCode(p[0]);\n  }\n  formatLanguageCode(code) {\n    if (typeof code === 'string' && code.indexOf('-') > -1) {\n      const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n      let p = code.split('-');\n      if (this.options.lowerCaseLng) {\n        p = p.map(part => part.toLowerCase());\n      } else if (p.length === 2) {\n        p[0] = p[0].toLowerCase();\n        p[1] = p[1].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n      } else if (p.length === 3) {\n        p[0] = p[0].toLowerCase();\n        if (p[1].length === 2) p[1] = p[1].toUpperCase();\n        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n      }\n      return p.join('-');\n    }\n    return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n  }\n  isSupportedCode(code) {\n    if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n      code = this.getLanguagePartFromCode(code);\n    }\n    return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n  }\n  getBestMatchFromCodes(codes) {\n    if (!codes) return null;\n    let found;\n    codes.forEach(code => {\n      if (found) return;\n      const cleanedLng = this.formatLanguageCode(code);\n      if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n    });\n    if (!found && this.options.supportedLngs) {\n      codes.forEach(code => {\n        if (found) return;\n        const lngOnly = this.getLanguagePartFromCode(code);\n        if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n        found = this.options.supportedLngs.find(supportedLng => {\n          if (supportedLng === lngOnly) return supportedLng;\n          if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n          if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n        });\n      });\n    }\n    if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n    return found;\n  }\n  getFallbackCodes(fallbacks, code) {\n    if (!fallbacks) return [];\n    if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n    if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n    if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n    if (!code) return fallbacks.default || [];\n    let found = fallbacks[code];\n    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n    if (!found) found = fallbacks[this.formatLanguageCode(code)];\n    if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n    if (!found) found = fallbacks.default;\n    return found || [];\n  }\n  toResolveHierarchy(code, fallbackCode) {\n    const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n    const codes = [];\n    const addCode = c => {\n      if (!c) return;\n      if (this.isSupportedCode(c)) {\n        codes.push(c);\n      } else {\n        this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n      }\n    };\n    if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n    } else if (typeof code === 'string') {\n      addCode(this.formatLanguageCode(code));\n    }\n    fallbackCodes.forEach(fc => {\n      if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n    });\n    return codes;\n  }\n}\n\nlet sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he', 'iw'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nlet _rulesPluralsTypes = {\n  1: function (n) {\n    return Number(n > 1);\n  },\n  2: function (n) {\n    return Number(n != 1);\n  },\n  3: function (n) {\n    return 0;\n  },\n  4: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function (n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function (n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function (n) {\n    return Number(n >= 2);\n  },\n  10: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function (n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function (n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function (n) {\n    return Number(n !== 0);\n  },\n  14: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function (n) {\n    return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n  },\n  18: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function (n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n  zero: 0,\n  one: 1,\n  two: 2,\n  few: 3,\n  many: 4,\n  other: 5\n};\nfunction createRules() {\n  const rules = {};\n  sets.forEach(set => {\n    set.lngs.forEach(l => {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\nclass PluralResolver {\n  constructor(languageUtils) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n      this.options.compatibilityJSON = 'v3';\n      this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n    }\n    this.rules = createRules();\n  }\n  addRule(lng, obj) {\n    this.rules[lng] = obj;\n  }\n  getRule(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (this.shouldUseIntlApi()) {\n      try {\n        return new Intl.PluralRules(getCleanedCode(code), {\n          type: options.ordinal ? 'ordinal' : 'cardinal'\n        });\n      } catch {\n        return;\n      }\n    }\n    return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n  }\n  needsPlural(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (this.shouldUseIntlApi()) {\n      return rule && rule.resolvedOptions().pluralCategories.length > 1;\n    }\n    return rule && rule.numbers.length > 1;\n  }\n  getPluralFormsOfKey(code, key) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n  }\n  getSuffixes(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (!rule) {\n      return [];\n    }\n    if (this.shouldUseIntlApi()) {\n      return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n    }\n    return rule.numbers.map(number => this.getSuffix(code, number, options));\n  }\n  getSuffix(code, count) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const rule = this.getRule(code, options);\n    if (rule) {\n      if (this.shouldUseIntlApi()) {\n        return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n      }\n      return this.getSuffixRetroCompatible(rule, count);\n    }\n    this.logger.warn(`no plural rule found for: ${code}`);\n    return '';\n  }\n  getSuffixRetroCompatible(rule, count) {\n    const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n    let suffix = rule.numbers[idx];\n    if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      if (suffix === 2) {\n        suffix = 'plural';\n      } else if (suffix === 1) {\n        suffix = '';\n      }\n    }\n    const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n    if (this.options.compatibilityJSON === 'v1') {\n      if (suffix === 1) return '';\n      if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n      return returnSuffix();\n    } else if (this.options.compatibilityJSON === 'v2') {\n      return returnSuffix();\n    } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      return returnSuffix();\n    }\n    return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n  }\n  shouldUseIntlApi() {\n    return !nonIntlVersions.includes(this.options.compatibilityJSON);\n  }\n}\n\nfunction deepFindWithDefaults(data, defaultData, key) {\n  let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n  let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  let path = getPathWithDefaults(data, defaultData, key);\n  if (!path && ignoreJSONStructure && typeof key === 'string') {\n    path = deepFind(data, key, keySeparator);\n    if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n  }\n  return path;\n}\nclass Interpolator {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('interpolator');\n    this.options = options;\n    this.format = options.interpolation && options.interpolation.format || (value => value);\n    this.init(options);\n  }\n  init() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!options.interpolation) options.interpolation = {\n      escapeValue: true\n    };\n    const iOpts = options.interpolation;\n    this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n    this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n    this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n    this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n    this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n    this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n    this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n    this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n    this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n    this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n    this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n    this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n    this.resetRegExp();\n  }\n  reset() {\n    if (this.options) this.init(this.options);\n  }\n  resetRegExp() {\n    const regexpStr = `${this.prefix}(.+?)${this.suffix}`;\n    this.regexp = new RegExp(regexpStr, 'g');\n    const regexpUnescapeStr = `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;\n    this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n    const nestingRegexpStr = `${this.nestingPrefix}(.+?)${this.nestingSuffix}`;\n    this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n  }\n  interpolate(str, data, lng, options) {\n    let match;\n    let value;\n    let replaces;\n    const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n    function regexSafe(val) {\n      return val.replace(/\\$/g, '$$$$');\n    }\n    const handleFormat = key => {\n      if (key.indexOf(this.formatSeparator) < 0) {\n        const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n        return this.alwaysFormat ? this.format(path, undefined, lng, {\n          ...options,\n          ...data,\n          interpolationkey: key\n        }) : path;\n      }\n      const p = key.split(this.formatSeparator);\n      const k = p.shift().trim();\n      const f = p.join(this.formatSeparator).trim();\n      return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n        ...options,\n        ...data,\n        interpolationkey: k\n      });\n    };\n    this.resetRegExp();\n    const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n    const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n    const todos = [{\n      regex: this.regexpUnescape,\n      safeValue: val => regexSafe(val)\n    }, {\n      regex: this.regexp,\n      safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n    }];\n    todos.forEach(todo => {\n      replaces = 0;\n      while (match = todo.regex.exec(str)) {\n        const matchedVar = match[1].trim();\n        value = handleFormat(matchedVar);\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            const temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n            value = '';\n          } else if (skipOnVariables) {\n            value = match[0];\n            continue;\n          } else {\n            this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n        const safeValue = todo.safeValue(value);\n        str = str.replace(match[0], safeValue);\n        if (skipOnVariables) {\n          todo.regex.lastIndex += value.length;\n          todo.regex.lastIndex -= match[0].length;\n        } else {\n          todo.regex.lastIndex = 0;\n        }\n        replaces++;\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n    });\n    return str;\n  }\n  nest(str, fc) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let match;\n    let value;\n    let clonedOptions;\n    function handleHasOptions(key, inheritedOptions) {\n      const sep = this.nestingOptionsSeparator;\n      if (key.indexOf(sep) < 0) return key;\n      const c = key.split(new RegExp(`${sep}[ ]*{`));\n      let optionsString = `{${c[1]}`;\n      key = c[0];\n      optionsString = this.interpolate(optionsString, clonedOptions);\n      const matchedSingleQuotes = optionsString.match(/'/g);\n      const matchedDoubleQuotes = optionsString.match(/\"/g);\n      if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n        optionsString = optionsString.replace(/'/g, '\"');\n      }\n      try {\n        clonedOptions = JSON.parse(optionsString);\n        if (inheritedOptions) clonedOptions = {\n          ...inheritedOptions,\n          ...clonedOptions\n        };\n      } catch (e) {\n        this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n        return `${key}${sep}${optionsString}`;\n      }\n      delete clonedOptions.defaultValue;\n      return key;\n    }\n    while (match = this.nestingRegexp.exec(str)) {\n      let formatters = [];\n      clonedOptions = {\n        ...options\n      };\n      clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions;\n      clonedOptions.applyPostProcessor = false;\n      delete clonedOptions.defaultValue;\n      let doReduce = false;\n      if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n        const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n        match[1] = r.shift();\n        formatters = r;\n        doReduce = true;\n      }\n      value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n      if (value && match[0] === str && typeof value !== 'string') return value;\n      if (typeof value !== 'string') value = makeString(value);\n      if (!value) {\n        this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n        value = '';\n      }\n      if (doReduce) {\n        value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n          ...options,\n          interpolationkey: match[1].trim()\n        }), value.trim());\n      }\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n    }\n    return str;\n  }\n}\n\nfunction parseFormatStr(formatStr) {\n  let formatName = formatStr.toLowerCase().trim();\n  const formatOptions = {};\n  if (formatStr.indexOf('(') > -1) {\n    const p = formatStr.split('(');\n    formatName = p[0].toLowerCase().trim();\n    const optStr = p[1].substring(0, p[1].length - 1);\n    if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n    } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.range) formatOptions.range = optStr.trim();\n    } else {\n      const opts = optStr.split(';');\n      opts.forEach(opt => {\n        if (!opt) return;\n        const [key, ...rest] = opt.split(':');\n        const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n        if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n        if (val === 'false') formatOptions[key.trim()] = false;\n        if (val === 'true') formatOptions[key.trim()] = true;\n        if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n      });\n    }\n  }\n  return {\n    formatName,\n    formatOptions\n  };\n}\nfunction createCachedFormatter(fn) {\n  const cache = {};\n  return function invokeFormatter(val, lng, options) {\n    const key = lng + JSON.stringify(options);\n    let formatter = cache[key];\n    if (!formatter) {\n      formatter = fn(getCleanedCode(lng), options);\n      cache[key] = formatter;\n    }\n    return formatter(val);\n  };\n}\nclass Formatter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('formatter');\n    this.options = options;\n    this.formats = {\n      number: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      currency: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt,\n          style: 'currency'\n        });\n        return val => formatter.format(val);\n      }),\n      datetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.DateTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      relativetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.RelativeTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val, opt.range || 'day');\n      }),\n      list: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.ListFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      })\n    };\n    this.init(options);\n  }\n  init(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    const iOpts = options.interpolation;\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n  }\n  add(name, fc) {\n    this.formats[name.toLowerCase().trim()] = fc;\n  }\n  addCached(name, fc) {\n    this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n  }\n  format(value, format, lng) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const formats = format.split(this.formatSeparator);\n    const result = formats.reduce((mem, f) => {\n      const {\n        formatName,\n        formatOptions\n      } = parseFormatStr(f);\n      if (this.formats[formatName]) {\n        let formatted = mem;\n        try {\n          const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n          const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n          formatted = this.formats[formatName](mem, l, {\n            ...formatOptions,\n            ...options,\n            ...valOptions\n          });\n        } catch (error) {\n          this.logger.warn(error);\n        }\n        return formatted;\n      } else {\n        this.logger.warn(`there was no format function for ${formatName}`);\n      }\n      return mem;\n    }, value);\n    return result;\n  }\n}\n\nfunction removePending(q, name) {\n  if (q.pending[name] !== undefined) {\n    delete q.pending[name];\n    q.pendingCount--;\n  }\n}\nclass Connector extends EventEmitter {\n  constructor(backend, store, services) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    super();\n    this.backend = backend;\n    this.store = store;\n    this.services = services;\n    this.languageUtils = services.languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('backendConnector');\n    this.waitingReads = [];\n    this.maxParallelReads = options.maxParallelReads || 10;\n    this.readingCalls = 0;\n    this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n    this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n    this.state = {};\n    this.queue = [];\n    if (this.backend && this.backend.init) {\n      this.backend.init(services, options.backend, options);\n    }\n  }\n  queueLoad(languages, namespaces, options, callback) {\n    const toLoad = {};\n    const pending = {};\n    const toLoadLanguages = {};\n    const toLoadNamespaces = {};\n    languages.forEach(lng => {\n      let hasAllNamespaces = true;\n      namespaces.forEach(ns => {\n        const name = `${lng}|${ns}`;\n        if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n          this.state[name] = 2;\n        } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n          if (pending[name] === undefined) pending[name] = true;\n        } else {\n          this.state[name] = 1;\n          hasAllNamespaces = false;\n          if (pending[name] === undefined) pending[name] = true;\n          if (toLoad[name] === undefined) toLoad[name] = true;\n          if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n        }\n      });\n      if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n    });\n    if (Object.keys(toLoad).length || Object.keys(pending).length) {\n      this.queue.push({\n        pending,\n        pendingCount: Object.keys(pending).length,\n        loaded: {},\n        errors: [],\n        callback\n      });\n    }\n    return {\n      toLoad: Object.keys(toLoad),\n      pending: Object.keys(pending),\n      toLoadLanguages: Object.keys(toLoadLanguages),\n      toLoadNamespaces: Object.keys(toLoadNamespaces)\n    };\n  }\n  loaded(name, err, data) {\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    if (err) this.emit('failedLoading', lng, ns, err);\n    if (data) {\n      this.store.addResourceBundle(lng, ns, data);\n    }\n    this.state[name] = err ? -1 : 2;\n    const loaded = {};\n    this.queue.forEach(q => {\n      pushPath(q.loaded, [lng], ns);\n      removePending(q, name);\n      if (err) q.errors.push(err);\n      if (q.pendingCount === 0 && !q.done) {\n        Object.keys(q.loaded).forEach(l => {\n          if (!loaded[l]) loaded[l] = {};\n          const loadedKeys = q.loaded[l];\n          if (loadedKeys.length) {\n            loadedKeys.forEach(n => {\n              if (loaded[l][n] === undefined) loaded[l][n] = true;\n            });\n          }\n        });\n        q.done = true;\n        if (q.errors.length) {\n          q.callback(q.errors);\n        } else {\n          q.callback();\n        }\n      }\n    });\n    this.emit('loaded', loaded);\n    this.queue = this.queue.filter(q => !q.done);\n  }\n  read(lng, ns, fcName) {\n    let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n    let callback = arguments.length > 5 ? arguments[5] : undefined;\n    if (!lng.length) return callback(null, {});\n    if (this.readingCalls >= this.maxParallelReads) {\n      this.waitingReads.push({\n        lng,\n        ns,\n        fcName,\n        tried,\n        wait,\n        callback\n      });\n      return;\n    }\n    this.readingCalls++;\n    const resolver = (err, data) => {\n      this.readingCalls--;\n      if (this.waitingReads.length > 0) {\n        const next = this.waitingReads.shift();\n        this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n      }\n      if (err && data && tried < this.maxRetries) {\n        setTimeout(() => {\n          this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n        }, wait);\n        return;\n      }\n      callback(err, data);\n    };\n    const fc = this.backend[fcName].bind(this.backend);\n    if (fc.length === 2) {\n      try {\n        const r = fc(lng, ns);\n        if (r && typeof r.then === 'function') {\n          r.then(data => resolver(null, data)).catch(resolver);\n        } else {\n          resolver(null, r);\n        }\n      } catch (err) {\n        resolver(err);\n      }\n      return;\n    }\n    return fc(lng, ns, resolver);\n  }\n  prepareLoading(languages, namespaces) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let callback = arguments.length > 3 ? arguments[3] : undefined;\n    if (!this.backend) {\n      this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n      return callback && callback();\n    }\n    if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    const toLoad = this.queueLoad(languages, namespaces, options, callback);\n    if (!toLoad.toLoad.length) {\n      if (!toLoad.pending.length) callback();\n      return null;\n    }\n    toLoad.toLoad.forEach(name => {\n      this.loadOne(name);\n    });\n  }\n  load(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {}, callback);\n  }\n  reload(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {\n      reload: true\n    }, callback);\n  }\n  loadOne(name) {\n    let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n      if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n      if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n      this.loaded(name, err, data);\n    });\n  }\n  saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n    if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n      this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n      return;\n    }\n    if (key === undefined || key === null || key === '') return;\n    if (this.backend && this.backend.create) {\n      const opts = {\n        ...options,\n        isUpdate\n      };\n      const fc = this.backend.create.bind(this.backend);\n      if (fc.length < 6) {\n        try {\n          let r;\n          if (fc.length === 5) {\n            r = fc(languages, namespace, key, fallbackValue, opts);\n          } else {\n            r = fc(languages, namespace, key, fallbackValue);\n          }\n          if (r && typeof r.then === 'function') {\n            r.then(data => clb(null, data)).catch(clb);\n          } else {\n            clb(null, r);\n          }\n        } catch (err) {\n          clb(err);\n        }\n      } else {\n        fc(languages, namespace, key, fallbackValue, clb, opts);\n      }\n    }\n    if (!languages || !languages[0]) return;\n    this.store.addResource(languages[0], namespace, key, fallbackValue);\n  }\n}\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    supportedLngs: false,\n    nonExplicitSupportedLngs: false,\n    load: 'all',\n    preload: false,\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    saveMissing: false,\n    updateMissing: false,\n    saveMissingTo: 'fallback',\n    saveMissingPlurals: true,\n    missingKeyHandler: false,\n    missingInterpolationHandler: false,\n    postProcess: false,\n    postProcessPassResolved: false,\n    returnNull: false,\n    returnEmptyString: true,\n    returnObjects: false,\n    joinArrays: false,\n    returnedObjectHandler: false,\n    parseMissingKeyHandler: false,\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      let ret = {};\n      if (typeof args[1] === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n      if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n        const options = args[3] || args[2];\n        Object.keys(options).forEach(key => {\n          ret[key] = options[key];\n        });\n      }\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: (value, format, lng, options) => value,\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      nestingOptionsSeparator: ',',\n      maxReplaces: 1000,\n      skipOnVariables: true\n    }\n  };\n}\nfunction transformOptions(options) {\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n  if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n    options.supportedLngs = options.supportedLngs.concat(['cimode']);\n  }\n  return options;\n}\n\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n  const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n  mems.forEach(mem => {\n    if (typeof inst[mem] === 'function') {\n      inst[mem] = inst[mem].bind(inst);\n    }\n  });\n}\nclass I18n extends EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    super();\n    this.options = transformOptions(options);\n    this.services = {};\n    this.logger = baseLogger;\n    this.modules = {\n      external: []\n    };\n    bindMemberFunctions(this);\n    if (callback && !this.isInitialized && !options.isClone) {\n      if (!this.options.initImmediate) {\n        this.init(options, callback);\n        return this;\n      }\n      setTimeout(() => {\n        this.init(options, callback);\n      }, 0);\n    }\n  }\n  init() {\n    var _this = this;\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n      if (typeof options.ns === 'string') {\n        options.defaultNS = options.ns;\n      } else if (options.ns.indexOf('translation') < 0) {\n        options.defaultNS = options.ns[0];\n      }\n    }\n    const defOpts = get();\n    this.options = {\n      ...defOpts,\n      ...this.options,\n      ...transformOptions(options)\n    };\n    if (this.options.compatibilityAPI !== 'v1') {\n      this.options.interpolation = {\n        ...defOpts.interpolation,\n        ...this.options.interpolation\n      };\n    }\n    if (options.keySeparator !== undefined) {\n      this.options.userDefinedKeySeparator = options.keySeparator;\n    }\n    if (options.nsSeparator !== undefined) {\n      this.options.userDefinedNsSeparator = options.nsSeparator;\n    }\n    function createClassOnDemand(ClassOrObject) {\n      if (!ClassOrObject) return null;\n      if (typeof ClassOrObject === 'function') return new ClassOrObject();\n      return ClassOrObject;\n    }\n    if (!this.options.isClone) {\n      if (this.modules.logger) {\n        baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n      } else {\n        baseLogger.init(null, this.options);\n      }\n      let formatter;\n      if (this.modules.formatter) {\n        formatter = this.modules.formatter;\n      } else if (typeof Intl !== 'undefined') {\n        formatter = Formatter;\n      }\n      const lu = new LanguageUtil(this.options);\n      this.store = new ResourceStore(this.options.resources, this.options);\n      const s = this.services;\n      s.logger = baseLogger;\n      s.resourceStore = this.store;\n      s.languageUtils = lu;\n      s.pluralResolver = new PluralResolver(lu, {\n        prepend: this.options.pluralSeparator,\n        compatibilityJSON: this.options.compatibilityJSON,\n        simplifyPluralSuffix: this.options.simplifyPluralSuffix\n      });\n      if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n        s.formatter = createClassOnDemand(formatter);\n        s.formatter.init(s, this.options);\n        this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n      }\n      s.interpolator = new Interpolator(this.options);\n      s.utils = {\n        hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n      };\n      s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n      s.backendConnector.on('*', function (event) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        _this.emit(event, ...args);\n      });\n      if (this.modules.languageDetector) {\n        s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n        if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n      }\n      if (this.modules.i18nFormat) {\n        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n        if (s.i18nFormat.init) s.i18nFormat.init(this);\n      }\n      this.translator = new Translator(this.services, this.options);\n      this.translator.on('*', function (event) {\n        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n        _this.emit(event, ...args);\n      });\n      this.modules.external.forEach(m => {\n        if (m.init) m.init(this);\n      });\n    }\n    this.format = this.options.interpolation.format;\n    if (!callback) callback = noop;\n    if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n      const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n      if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n    }\n    if (!this.services.languageDetector && !this.options.lng) {\n      this.logger.warn('init: no languageDetector is used and no lng is defined');\n    }\n    const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n    storeApi.forEach(fcName => {\n      this[fcName] = function () {\n        return _this.store[fcName](...arguments);\n      };\n    });\n    const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n    storeApiChained.forEach(fcName => {\n      this[fcName] = function () {\n        _this.store[fcName](...arguments);\n        return _this;\n      };\n    });\n    const deferred = defer();\n    const load = () => {\n      const finish = (err, t) => {\n        if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n        this.isInitialized = true;\n        if (!this.options.isClone) this.logger.log('initialized', this.options);\n        this.emit('initialized', this.options);\n        deferred.resolve(t);\n        callback(err, t);\n      };\n      if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n      this.changeLanguage(this.options.lng, finish);\n    };\n    if (this.options.resources || !this.options.initImmediate) {\n      load();\n    } else {\n      setTimeout(load, 0);\n    }\n    return deferred;\n  }\n  loadResources(language) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    let usedCallback = callback;\n    const usedLng = typeof language === 'string' ? language : this.language;\n    if (typeof language === 'function') usedCallback = language;\n    if (!this.options.resources || this.options.partialBundledLanguages) {\n      if (usedLng && usedLng.toLowerCase() === 'cimode') return usedCallback();\n      const toLoad = [];\n      const append = lng => {\n        if (!lng) return;\n        const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n        lngs.forEach(l => {\n          if (toLoad.indexOf(l) < 0) toLoad.push(l);\n        });\n      };\n      if (!usedLng) {\n        const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        fallbacks.forEach(l => append(l));\n      } else {\n        append(usedLng);\n      }\n      if (this.options.preload) {\n        this.options.preload.forEach(l => append(l));\n      }\n      this.services.backendConnector.load(toLoad, this.options.ns, e => {\n        if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n        usedCallback(e);\n      });\n    } else {\n      usedCallback(null);\n    }\n  }\n  reloadResources(lngs, ns, callback) {\n    const deferred = defer();\n    if (!lngs) lngs = this.languages;\n    if (!ns) ns = this.options.ns;\n    if (!callback) callback = noop;\n    this.services.backendConnector.reload(lngs, ns, err => {\n      deferred.resolve();\n      callback(err);\n    });\n    return deferred;\n  }\n  use(module) {\n    if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n    if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n    if (module.type === 'backend') {\n      this.modules.backend = module;\n    }\n    if (module.type === 'logger' || module.log && module.warn && module.error) {\n      this.modules.logger = module;\n    }\n    if (module.type === 'languageDetector') {\n      this.modules.languageDetector = module;\n    }\n    if (module.type === 'i18nFormat') {\n      this.modules.i18nFormat = module;\n    }\n    if (module.type === 'postProcessor') {\n      postProcessor.addPostProcessor(module);\n    }\n    if (module.type === 'formatter') {\n      this.modules.formatter = module;\n    }\n    if (module.type === '3rdParty') {\n      this.modules.external.push(module);\n    }\n    return this;\n  }\n  setResolvedLanguage(l) {\n    if (!l || !this.languages) return;\n    if (['cimode', 'dev'].indexOf(l) > -1) return;\n    for (let li = 0; li < this.languages.length; li++) {\n      const lngInLngs = this.languages[li];\n      if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n      if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n        this.resolvedLanguage = lngInLngs;\n        break;\n      }\n    }\n  }\n  changeLanguage(lng, callback) {\n    var _this2 = this;\n    this.isLanguageChangingTo = lng;\n    const deferred = defer();\n    this.emit('languageChanging', lng);\n    const setLngProps = l => {\n      this.language = l;\n      this.languages = this.services.languageUtils.toResolveHierarchy(l);\n      this.resolvedLanguage = undefined;\n      this.setResolvedLanguage(l);\n    };\n    const done = (err, l) => {\n      if (l) {\n        setLngProps(l);\n        this.translator.changeLanguage(l);\n        this.isLanguageChangingTo = undefined;\n        this.emit('languageChanged', l);\n        this.logger.log('languageChanged', l);\n      } else {\n        this.isLanguageChangingTo = undefined;\n      }\n      deferred.resolve(function () {\n        return _this2.t(...arguments);\n      });\n      if (callback) callback(err, function () {\n        return _this2.t(...arguments);\n      });\n    };\n    const setLng = lngs => {\n      if (!lng && !lngs && this.services.languageDetector) lngs = [];\n      const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n      if (l) {\n        if (!this.language) {\n          setLngProps(l);\n        }\n        if (!this.translator.language) this.translator.changeLanguage(l);\n        if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n      }\n      this.loadResources(l, err => {\n        done(err, l);\n      });\n    };\n    if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n      setLng(this.services.languageDetector.detect());\n    } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n      if (this.services.languageDetector.detect.length === 0) {\n        this.services.languageDetector.detect().then(setLng);\n      } else {\n        this.services.languageDetector.detect(setLng);\n      }\n    } else {\n      setLng(lng);\n    }\n    return deferred;\n  }\n  getFixedT(lng, ns, keyPrefix) {\n    var _this3 = this;\n    const fixedT = function (key, opts) {\n      let options;\n      if (typeof opts !== 'object') {\n        for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n          rest[_key3 - 2] = arguments[_key3];\n        }\n        options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n      } else {\n        options = {\n          ...opts\n        };\n      }\n      options.lng = options.lng || fixedT.lng;\n      options.lngs = options.lngs || fixedT.lngs;\n      options.ns = options.ns || fixedT.ns;\n      options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n      const keySeparator = _this3.options.keySeparator || '.';\n      let resultKey;\n      if (options.keyPrefix && Array.isArray(key)) {\n        resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n      } else {\n        resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n      }\n      return _this3.t(resultKey, options);\n    };\n    if (typeof lng === 'string') {\n      fixedT.lng = lng;\n    } else {\n      fixedT.lngs = lng;\n    }\n    fixedT.ns = ns;\n    fixedT.keyPrefix = keyPrefix;\n    return fixedT;\n  }\n  t() {\n    return this.translator && this.translator.translate(...arguments);\n  }\n  exists() {\n    return this.translator && this.translator.exists(...arguments);\n  }\n  setDefaultNamespace(ns) {\n    this.options.defaultNS = ns;\n  }\n  hasLoadedNamespace(ns) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (!this.isInitialized) {\n      this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n      return false;\n    }\n    if (!this.languages || !this.languages.length) {\n      this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n      return false;\n    }\n    const lng = options.lng || this.resolvedLanguage || this.languages[0];\n    const fallbackLng = this.options ? this.options.fallbackLng : false;\n    const lastLng = this.languages[this.languages.length - 1];\n    if (lng.toLowerCase() === 'cimode') return true;\n    const loadNotPending = (l, n) => {\n      const loadState = this.services.backendConnector.state[`${l}|${n}`];\n      return loadState === -1 || loadState === 2;\n    };\n    if (options.precheck) {\n      const preResult = options.precheck(this, loadNotPending);\n      if (preResult !== undefined) return preResult;\n    }\n    if (this.hasResourceBundle(lng, ns)) return true;\n    if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n    if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n    return false;\n  }\n  loadNamespaces(ns, callback) {\n    const deferred = defer();\n    if (!this.options.ns) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    if (typeof ns === 'string') ns = [ns];\n    ns.forEach(n => {\n      if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n    });\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  loadLanguages(lngs, callback) {\n    const deferred = defer();\n    if (typeof lngs === 'string') lngs = [lngs];\n    const preloaded = this.options.preload || [];\n    const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0);\n    if (!newLngs.length) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    this.options.preload = preloaded.concat(newLngs);\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  dir(lng) {\n    if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n    if (!lng) return 'rtl';\n    const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n    const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n    return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n  }\n  static createInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    return new I18n(options, callback);\n  }\n  cloneInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    const forkResourceStore = options.forkResourceStore;\n    if (forkResourceStore) delete options.forkResourceStore;\n    const mergedOptions = {\n      ...this.options,\n      ...options,\n      ...{\n        isClone: true\n      }\n    };\n    const clone = new I18n(mergedOptions);\n    if (options.debug !== undefined || options.prefix !== undefined) {\n      clone.logger = clone.logger.clone(options);\n    }\n    const membersToCopy = ['store', 'services', 'language'];\n    membersToCopy.forEach(m => {\n      clone[m] = this[m];\n    });\n    clone.services = {\n      ...this.services\n    };\n    clone.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    if (forkResourceStore) {\n      clone.store = new ResourceStore(this.store.data, mergedOptions);\n      clone.services.resourceStore = clone.store;\n    }\n    clone.translator = new Translator(clone.services, mergedOptions);\n    clone.translator.on('*', function (event) {\n      for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n      clone.emit(event, ...args);\n    });\n    clone.init(mergedOptions, callback);\n    clone.translator.options = mergedOptions;\n    clone.translator.backendConnector.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    return clone;\n  }\n  toJSON() {\n    return {\n      options: this.options,\n      store: this.store,\n      language: this.language,\n      languages: this.languages,\n      resolvedLanguage: this.resolvedLanguage\n    };\n  }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","export const translation = {\r\n    error: 'Error',\r\n};\r\n//# sourceMappingURL=en.js.map","export const translation = {\r\n    error: 'Помилка',\r\n};\r\n//# sourceMappingURL=uk.js.map","import { translation as enDictionary } from './en.js';\r\nimport { translation as ukDictionary } from './uk.js';\r\n/**\r\n * A reference to the namespace of the translation resources.\r\n * This namespace is used to access the translation resources in the i18next instance.\r\n *\r\n * @internal\r\n */\r\nexport const PACKAGE_NAMESPACE = 'common';\r\nexport const resources = {\r\n    en: enDictionary,\r\n    uk: ukDictionary,\r\n};\r\n//# sourceMappingURL=index.js.map","/*\r\n TODO: i18next should be updated to the latest version when the issue with the types imports will be fixed.\r\n https://github.com/i18next/i18next/issues/2008\r\n */\r\nimport i18next from 'i18next';\r\nimport { PACKAGE_NAMESPACE, resources as defaultResources } from './resources/index.js';\r\n/**\r\n * Basic i18next instance with default resources\r\n *\r\n * @type {I18NextInstance}\r\n */\r\nexport const basicI18nextInstance = i18next.createInstance({\r\n    defaultNS: PACKAGE_NAMESPACE,\r\n    resources: insertNamespaceIntoResource(defaultResources, PACKAGE_NAMESPACE),\r\n    lng: 'en',\r\n    fallbackLng: 'en',\r\n});\r\nexport const basicI18Next = {\r\n    i18nextInstance: basicI18nextInstance,\r\n    initPromise: basicI18nextInstance.init().then(() => basicI18nextInstance),\r\n};\r\nconst alreadyLoadedNamespaces = new Map();\r\nalreadyLoadedNamespaces.set('common', basicI18Next);\r\n/**\r\n * Initialize i18next with the given configuration\r\n *\r\n * @param config - i18next configuration\r\n * @returns i18next instance\r\n */\r\nexport const initI18next = (config) => {\r\n    if (alreadyLoadedNamespaces.has(config.namespace)) {\r\n        return alreadyLoadedNamespaces.get(config.namespace);\r\n    }\r\n    if (config.plugins) {\r\n        for (const plugin of config.plugins) {\r\n            basicI18nextInstance.use(plugin);\r\n        }\r\n    }\r\n    Object.keys(config.resource).forEach((lng) => {\r\n        basicI18nextInstance.addResourceBundle(lng, config.namespace, config.resource[lng]);\r\n    });\r\n    // create new instance with bounded default namespace -\r\n    // all plugins and resources will be shared between instances\r\n    const newI18next = basicI18nextInstance.cloneInstance({\r\n        defaultNS: config.namespace,\r\n    });\r\n    let initPromise = basicI18Next.initPromise.then(() => newI18next);\r\n    // two-way language binding between all created i18next instances\r\n    newI18next.on('languageChanged', (lng) => {\r\n        if (basicI18nextInstance.language !== lng) {\r\n            void basicI18nextInstance.changeLanguage(lng);\r\n        }\r\n    });\r\n    basicI18nextInstance.on('languageChanged', (lng) => {\r\n        if (newI18next.language !== lng) {\r\n            void newI18next.changeLanguage(lng);\r\n        }\r\n    });\r\n    // if requested language for new i18next instance is not the same as in basic i18next instance - change it\r\n    const language = config.language || 'en';\r\n    if (basicI18nextInstance.language !== language) {\r\n        initPromise = initPromise\r\n            .then(() => newI18next.changeLanguage(language))\r\n            .then(() => newI18next);\r\n    }\r\n    const result = { initPromise, i18nextInstance: newI18next };\r\n    alreadyLoadedNamespaces.set(config.namespace, result);\r\n    return result;\r\n};\r\nfunction insertNamespaceIntoResource(resource, namespace) {\r\n    return Object.keys(resource).reduce((acc, language) => {\r\n        acc[language] = {\r\n            [namespace]: resource[language],\r\n        };\r\n        return acc;\r\n    }, {});\r\n}\r\n//# sourceMappingURL=i18next.js.map","import { basicI18Next } from './i18next.js';\r\nexport class AbstractTranslatableError extends Error {\r\n    constructor(namespace, errorParams, defaultTFunction) {\r\n        const { key, interpolationOptions } = errorParams;\r\n        const tFunction = defaultTFunction || basicI18Next.i18nextInstance.t;\r\n        const extendedInterpolationObject = Object.assign(Object.assign({}, interpolationOptions), { ns: namespace });\r\n        const message = tFunction(key, Object.assign(Object.assign({}, extendedInterpolationObject), { lng: 'en' }));\r\n        super(message);\r\n        this.key = key;\r\n        this.namespace = namespace;\r\n        this.interpolationOptions = extendedInterpolationObject;\r\n    }\r\n}\r\n//# sourceMappingURL=abstract-translatable-error.js.map","export function escapeSingleQuotes(str) {\r\n    if (!str) {\r\n        return str;\r\n    }\r\n    // Replace single quotes with escaped single quotes\r\n    // Only when the single quote is not preceded by a backslash\r\n    return str.replace(/(?<!\\\\)'/g, \"\\\\'\");\r\n}\r\n//# sourceMappingURL=escapeSingleQuotes.js.map","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n  '&amp;': '&',\n  '&#38;': '&',\n  '&lt;': '<',\n  '&#60;': '<',\n  '&gt;': '>',\n  '&#62;': '>',\n  '&apos;': \"'\",\n  '&#39;': \"'\",\n  '&quot;': '\"',\n  '&#34;': '\"',\n  '&nbsp;': ' ',\n  '&#160;': ' ',\n  '&copy;': '©',\n  '&#169;': '©',\n  '&reg;': '®',\n  '&#174;': '®',\n  '&hellip;': '…',\n  '&#8230;': '…',\n  '&#x2F;': '/',\n  '&#47;': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n  bindI18n: 'languageChanged',\n  bindI18nStore: '',\n  transEmptyNodeValue: '',\n  transSupportBasicHtmlNodes: true,\n  transWrapTextNodes: '',\n  transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n  useSuspense: true,\n  unescape\n};\nexport function setDefaults() {\n  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  defaultOptions = {\n    ...defaultOptions,\n    ...options\n  };\n}\nexport function getDefaults() {\n  return defaultOptions;\n}","let i18nInstance;\nexport function setI18n(instance) {\n  i18nInstance = instance;\n}\nexport function getI18n() {\n  return i18nInstance;\n}","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n  type: '3rdParty',\n  init(instance) {\n    setDefaults(instance.options.react);\n    setI18n(instance);\n  }\n};","export const translation = {\n  errors: {\n    noSisenseContext: 'Sisense context is not initialized',\n    restApiNotReady: 'Rest API is not initialized',\n    componentRenderError: 'Unable to render the component',\n    sisenseContextNoAuthentication: 'Authentication method is not specified',\n    chartNoSisenseContext:\n      'Sisense Context for Chart not found. To fix, add a dataSet to the Chart or wrap the component inside a Sisense context provider.',\n    widgetByIdNoSisenseContext:\n      'Sisense Context for Dashboard Widget not found. To fix, wrap the component inside a Sisense context provider.',\n    widgetByIdInvalidIdentifier:\n      'Failed to retrieve widget. ' +\n      'Please make sure the dashboard widget exists and is accessible.',\n    dashboardWidgetsInvalidIdentifiers:\n      'Failed to retrieve dashboard widgets. ' +\n      'Please make sure the dashboard exists and is accessible.',\n    executeQueryNoSisenseContext:\n      'Sisense Context for query execution not found. To fix, wrap the component inside a Sisense context provider.',\n    executeQueryNoDataSource: 'No dataSource provided to execute query',\n    dataOptions: {\n      noDimensionsAndMeasures:\n        'Neither dimensions nor measures found. Data options should have at least one dimension or measure.',\n      attributeNotFound: 'Attribute \"{{attributeName}}\" not found in the data',\n      measureNotFound: 'Measure \"{{measureName}}\" not found in the data',\n      filterAttributeNotFound: 'Filter attribute \"{{attributeName}}\" not found in the data',\n      highlightAttributeNotFound: 'Highlight attribute \"{{attributeName}}\" not found in the data',\n    },\n    optionsTranslation: {\n      invalidStyleOptions: \"Invalid style options for '{{chartType}}' chart\",\n      invalidInternalDataOptions:\n        \"Data options are not correctly converted for '{{chartType}}' chart\",\n    },\n    themeNotFound: 'Theme with oid {{themeOid}} not found in the Sisense instance',\n    paletteNotFound: \"Palette '{{paletteName}}' not found in the Sisense instance\",\n    chartTypeNotSupported: 'Chart type {{chartType}} is not supported',\n    chartInvalidProps: 'Invalid chart props',\n    unsupportedWidgetType: \"Can't extract props for unsupported widget type - {{widgetType}}\",\n    sisenseContextNotFound: 'Sisense Context not found. Please ensure it is provided.',\n    dashboardInvalidIdentifier:\n      'Failed to retrieve dashboard. Please make sure the dashboard exists and is accessible.',\n    sharedFormula: {\n      identifierExpected:\n        'Failed to identify shared formula. Please provide oid or both name and datasource',\n      failedToFetch: 'Failed to fetch shared formula',\n    },\n    widgetModel: {\n      incomleteWidget:\n        'Widget can not be transformed to DTO because of incomplete property ({{prop}})',\n      unsupportedWidgetTypeDto: 'Saving the widget of type {{chartType}} is not supported',\n      pivotWidgetNotSupported: 'Pivot widget is not supported for method {{methodName}}',\n      textWidgetNotSupported: 'Text widget is not supported for method {{methodName}}',\n      onlyTableWidgetSupported: 'Only table widget is supported for method {{methodName}}',\n      onlyPivotWidgetSupported: 'Only pivot widget is supported for method {{methodName}}',\n      onlyTextWidgetSupported: 'Only text widget is supported for method {{methodName}}',\n      onlyCustomWidgetSupported: 'Only custom widget is supported for method {{methodName}}',\n      unsupportedWidgetType: 'Unsupported widget type: {{widgetType}}',\n      unsupportedFusionWidgetType: 'Unsupported Fusion widget type: {{widgetType}}',\n    },\n    unknownFilterInFilterRelations: 'Filter relations contain unknown filter',\n    filterRelationsNotSupported: 'Filter relations not supported yet',\n    invalidFilterType: 'Invalid filter type',\n    secondsDateTimeLevelSupportedOnlyForLive:\n      \"Seconds datetime level is supported only for the 'live' datasource\",\n    missingMenuRoot: 'Missing initialized menu root',\n    missingModalRoot: 'Missing initialized modal root',\n    missingDataSource:\n      \"The 'dataSource' value is missing. It must be provided explicitly, or a 'defaultDataSource' should be specified in the Sisense context provider.\",\n    incorrectOnDataReadyHandler: \"'onDataReady' handler must return a valid data object\",\n    undefinedDataSource: 'Data source is not defined',\n    emptyModel: 'Empty model',\n    missingMetadata: 'Missing metadata',\n    missingModelTitle: 'Missing model title',\n    httpClientNotFound: 'HttpClient not found.',\n    serverSettingsNotLoaded: 'Failed to load server settings',\n    requiredColumnMissing: 'Missing required column',\n    unexpectedChartType: 'Unexpected chart type: {{chartType}}',\n    noRowNumColumn: 'Data has no row num column',\n    ticIntervalCalculationFailed:\n      'Unable to calculate tic interval. Try specifying datetime granularity.',\n    polarChartDesignOptionsExpected: 'Polar chart design options expected for polar chart',\n    polarChartDesignOptionsNotExpected:\n      'Polar chart design options not expected for non-polar chart',\n    indicatorInvalidRelativeSize: 'Invalid relative size options',\n    unsupportedMapType: 'Unsupported map type: {{mapType}}',\n    mapLoadingFailed: 'Failed loading map',\n    cascadingFilterOriginalNotFound:\n      'Error in cascading filters reassembling. Original cascading filter not found',\n    dashboardLoadFailed: 'Failed to load Dashboard. {{error}}',\n    widgetLoadFailed: 'Failed to load Widget. {{error}}',\n    dashboardWithOidNotFound: 'Dashboard with oid {{dashboardOid}} not found',\n    failedToAddWidget: 'Failed to add widget to dashboard',\n    widgetWithOidNotFound: 'Widget with oid {{widgetOid}} not found',\n    widgetWithOidNotFoundInDashboard:\n      'Widget with oid {{widgetOid}} not found in dashboard with oid {{dashboardOid}}',\n    widgetEmptyResponse: 'Empty response for widget with oid {{widgetOid}}',\n    dateFilterIncorrectOperator: 'Incorrect operator: {{operator}}',\n    synchronizedFilterInvalidProps:\n      '`useSynchronizedFilter` hook must take at least one of [non-null `filterFromProps`] or [`createEmptyFilter` function]',\n    methodNotImplemented: 'Method not implemented.',\n    noPivotClient: 'Pivot client not initialized',\n    unexpectedCacheValue: 'Unexpected cache value',\n    notAMembersFilter: 'Filter is not a MembersFilter',\n    drilldownNoInitialDimension:\n      'Initial dimension has to be specified to use drilldown with custom components',\n    otherWidgetTypesNotSupported: 'Other widget types are not supported yet',\n    dataBrowser: {\n      dimensionNotFound: 'Dimension with id {{dimensionId}} not found',\n      attributeNotFound: 'Attribute with id {{attributeId}} not found',\n    },\n    addFilterPopover: {\n      noDataSources:\n        'No data sources available. Try to define `dataSource` in widgets or `defaultDataSource` on the dashboard level.',\n    },\n    tabberInvalidConfiguration: 'Tabber widget configuration is invalid',\n  },\n  errorBoxText: '$t(common:error): {{errorMessage}}',\n  chartNoData: 'No Results',\n  filters: 'Filters',\n  widgetDetails: 'Widget Details',\n  cancel: 'Cancel',\n  includeAll: 'Include all',\n  formatting: {\n    number: {\n      abbreviations: {\n        thousand: 'K',\n        million: 'M',\n        billion: 'B',\n        trillion: 'T',\n      },\n    },\n  },\n  criteriaFilter: {\n    displayModePrefix: 'All items',\n    equals: 'Equals {{val}}',\n    notEquals: 'Does not equal {{val}}',\n    lessThan: 'Less than {{val}}',\n    lessThanOrEqual: 'Less than or equal to {{val}}',\n    greaterThan: 'Greater than {{val}}',\n    greaterThanOrEqual: 'Greater than or equal to {{val}}',\n    between: 'Between {{valA}} and {{valB}}',\n    notBetween: 'Not between {{valA}} and {{valB}}',\n    top: 'Top {{valA}} by {{valB}}',\n    bottom: 'Last {{valA}} by {{valB}}',\n    is: 'Is {{val}}',\n    isNot: 'Is not {{val}}',\n    contains: 'Contains {{val}}',\n    notContains: `Doesn't contain {{val}}`,\n    startsWith: 'Starts with {{val}}',\n    notStartsWith: `Doesn't start with {{val}}`,\n    endsWith: 'Ends with {{val}}',\n    notEndsWith: `Doesn't end with {{val}}`,\n    like: 'Is like {{val}}',\n    byMeasure: 'By measure',\n    by: 'by',\n  },\n  dateFilter: {\n    last: 'Last',\n    next: 'Next',\n    from: 'From',\n    to: 'To',\n    count: 'Count',\n    select: 'Select',\n    today: 'Today',\n    days: 'Days',\n    weeks: 'Weeks',\n    months: 'Months',\n    quarters: 'Quarters',\n    years: 'Years',\n    earliestDate: 'Earliest Date',\n    latestDate: 'Latest Date',\n    todayOutOfRange: 'Today is out of available date range',\n    dateRange: {\n      fromTo: '{{from}} to {{to}}',\n      from: 'From {{val}}',\n      to: 'To {{val}}',\n    },\n  },\n  boxplot: {\n    tooltip: {\n      whiskers: 'Whiskers',\n      box: 'Box',\n      min: 'Min',\n      median: 'Median',\n      max: 'Max',\n    },\n  },\n  treemap: {\n    tooltip: {\n      ofTotal: 'of total',\n      of: 'of',\n    },\n  },\n  advanced: {\n    tooltip: {\n      min: 'Lower Bound',\n      max: 'Upper Bound',\n      forecastValue: 'Forecast Value',\n      forecast: 'Forecast',\n      trend: 'Trend',\n      trendLocalValue: 'Local Value',\n      confidenceInterval: 'Confidence Interval',\n      trendType: 'Type',\n      trendDataKey: 'Trend Data',\n      trendData: {\n        min: 'Min',\n        max: 'Max',\n        median: 'Median',\n        average: 'Average',\n      },\n    },\n  },\n  arearange: {\n    tooltip: {\n      min: 'Min',\n      max: 'Max',\n    },\n  },\n  unsupportedFilterMessage: 'Unsupported Filter (applied to the data query)',\n  unsupportedFilter: 'Unsupported filter {{filter}}',\n  commonFilter: {\n    clearSelectionButton: 'Clear Selection',\n    selectMenuItem: 'Select',\n    unselectMenuItem: 'Un-Select',\n  },\n  customFilterTileMessage: 'filtered with custom filter',\n  filterRelations: {\n    and: 'AND',\n    or: 'OR',\n    andOrFormulaApplied: 'AND/OR Formula applied',\n  },\n  drilldown: {\n    drillMenuItem: 'Drill',\n    breadcrumbsAllSuffix: 'All',\n    breadcrumbsPrev: 'Prev',\n    breadcrumbsNext: 'Next',\n    popover: {\n      members: 'Members',\n      table: 'Table',\n      column: 'Column',\n    },\n  },\n  widgetHeader: {\n    info: {\n      details: 'Widget Details',\n      tooltip: 'Click to view full details',\n    },\n    menu: {\n      deleteWidget: 'Delete Widget',\n      distributeEqualWidth: 'Distribute equally in this row',\n    },\n  },\n  customWidgets: {\n    registerPrompt:\n      'Unknown custom widget type: {{customWidgetType}}. Please register this custom widget so it can be rendered.',\n  },\n  ai: {\n    analyticsChatbot: 'Analytics Chatbot',\n    dataTopics: 'Data Topics',\n    chatbotDescription:\n      'Analytics Chatbot is designed to help you interact with your data using natural language.',\n    topicSelectPrompt: 'Pick a topic you would like to explore:',\n    preview: 'Preview',\n    clearHistoryPrompt: 'Do you want to clear this chat?',\n    config: {\n      inputPromptText: 'Ask a question or type \"/\" for ideas',\n      welcomeText:\n        'Welcome to the Analytics Assistant! I can help you explore and gain insights from your data.',\n      suggestionsWelcomeText: 'Some questions you may have:',\n    },\n    buttons: {\n      insights: 'Insights',\n      correctResponse: 'Correct response',\n      incorrectResponse: 'Incorrect response',\n      clearChat: 'Clear chat',\n      refresh: 'Refresh',\n      readMore: 'Read more',\n      collapse: 'Collapse',\n      yes: 'Yes',\n      no: 'No',\n      seeMore: 'See more',\n    },\n    disclaimer: {\n      poweredByAi: 'Content is powered by AI, so surprises and mistakes are possible.',\n      rateRequest: 'Please rate responses so we can improve!',\n    },\n    errors: {\n      chatUnavailable: 'Chat unavailable. Please try again later.',\n      fetchHistory:\n        \"Something went wrong and we were unable to retrieve the chat thread. Let's start over!\",\n      recommendationsNotAvailable:\n        \"Recommendations aren't available right now. Try again in a few minutes.\",\n      insightsNotAvailable: 'No insights available.',\n      VectorDBEmptyResponseError:\n        'The AI configuration is not ready, please wait a few minutes and try again.',\n      LlmBadConfigurationError:\n        'The LLM configuration is wrong. Reach out to your Admin to update the LLM provider configuration.',\n      ChartTypeUnsupportedError: 'Requested chart type is not supported.',\n      BlockedByLlmContentFiltering:\n        'This question is blocked by our content management policy. Please try asking a different question.',\n      LlmContextLengthExceedsLimitError:\n        \"Looks like you've reached the message length limit, please clear this conversation.\",\n      UserPromptExeedsLimitError:\n        'The prompt exceeds the limit. Rephrase your question and use shorter prompt.',\n      unexpectedChatResponse:\n        'Oh snap, something went wrong. Please try again later or try asking a different question.',\n      unexpected: 'Oh snap, something went wrong. Please try again later.',\n      unknownResponse: 'Received unknown responseType, raw response=',\n      invalidInput: 'Invalid input',\n      noAvailableDataTopics: 'None of the provided data models or perspectives are available',\n    },\n  },\n  attribute: {\n    datetimeName: {\n      years: 'Years in {{columnName}}',\n      quarters: 'Quarters in {{columnName}}',\n      months: 'Months in {{columnName}}',\n      weeks: 'Weeks in {{columnName}}',\n      days: 'Days in {{columnName}}',\n      hours: 'Hours in {{columnName}}',\n      minutes: 'Minutes in {{columnName}}',\n    },\n  },\n  filterEditor: {\n    buttons: {\n      apply: 'Apply',\n      cancel: 'Cancel',\n      selectAll: 'Select All',\n      clearAll: 'Clear All',\n    },\n    labels: {\n      includeAll: 'Include all (no filter applied)',\n      allowMultiSelection: 'Allow multiselect for lists',\n      from: 'From',\n      to: 'To',\n      includeCurrent: 'Including current',\n    },\n    placeholders: {\n      selectFromList: 'Select from list',\n      enterEntry: 'Type your entry...',\n      enterValue: 'Enter value...',\n      select: 'Select',\n    },\n    conditions: {\n      exclude: 'Is not',\n      contains: 'Contains',\n      notContain: 'Does not contain',\n      startsWith: 'Starts with',\n      notStartsWith: 'Does not start with',\n      endsWith: 'Ends with',\n      notEndsWith: 'Does not end with',\n      equals: 'Equals',\n      notEquals: 'Does not equal',\n      isEmpty: 'Is empty',\n      isNotEmpty: 'Is not empty',\n      lessThan: 'Smaller than',\n      lessThanOrEqual: 'Equals or smaller than',\n      greaterThan: 'Greater than',\n      greaterThanOrEqual: 'Equals or greater than',\n      isWithin: 'Is within',\n    },\n    validationErrors: {\n      invalidNumber: 'Numbers only',\n      invalidNumericRange: '\"To\" must be greater than \"From\"',\n    },\n    datetimeLevels: {\n      year: 'Year',\n      quarter: 'Quarter',\n      month: 'Month',\n      week: 'Week',\n      day: 'Day',\n      aggrigatedHour: 'Hour (aggregated)',\n      aggrigatedMinutesRoundTo15: '15-min (aggregated)',\n    },\n    relativeTypes: {\n      last: 'Last',\n      this: 'This',\n      next: 'Next',\n    },\n    datetimePositions: {\n      before: 'Before',\n      after: 'After',\n    },\n  },\n  dataBrowser: {\n    addFilter: 'Add Filter',\n    selectField: 'Select Field',\n    configureFilter: 'Configure Filter',\n    noResults: 'No results',\n    searchPlaceholder: 'Search',\n  },\n  pivotTable: {\n    grandTotal: 'Grand Total',\n    subTotal: '{{value}} Total',\n  },\n  dashboard: {\n    toolbar: {\n      undo: 'Undo',\n      redo: 'Redo',\n      cancel: 'Cancel',\n      apply: 'Apply',\n      editLayout: 'Edit Layout',\n      viewMode: 'View mode',\n    },\n  },\n  jumpToDashboard: {\n    defaultCaption: 'Jump to',\n    jumpableTooltip: 'This widget is jumpable',\n    noDrillTargets: 'No drill targets available',\n  },\n  calendarHeatmap: {\n    navigation: {\n      firstMonth: 'First Month',\n      lastMonth: 'Last Month',\n      previousMonth: 'Previous Month',\n      nextMonth: 'Next Month',\n      previousGroup: 'Previous Group',\n      nextGroup: 'Next Group',\n    },\n  },\n};\n\n/**\n * A reference type containing all currently used translation keys.\n * This type serves as a complete resource for creating custom translations,\n * ensuring that all required keys are present and included.\n * It can also be used as Partial to make sure custom translation does not contain any typos.\n *\n * @example\n * ```typescript\n * import { TranslationDictionary } from 'sisense-sdk-ui-next';\n *\n * const customTranslationResources: Partial<TranslationDictionary> = {\n * ```\n * @internal\n */\nexport type TranslationDictionary = typeof translation;\n","import { TranslationDictionary } from './index.js';\r\n\r\nexport const translation: TranslationDictionary = {\r\n  errors: {\r\n    noSisenseContext: 'Контекст Sisense не ініціалізовано',\r\n    restApiNotReady: 'Rest API не ініціалізовано',\r\n    componentRenderError: 'Не вдалося відобразити компонент',\r\n    sisenseContextNoAuthentication: 'Не вказано метод аутентифікації',\r\n    chartNoSisenseContext:\r\n      'Контекст Sisense для діаграми не знайдено. Щоб виправити, додайте набір даних до Chart або оберніть компонент у SisenseContextProvider.',\r\n    widgetByIdNoSisenseContext:\r\n      'Контекст Sisense для віджета дашборди не знайдено. Щоб виправити, оберніть компонент у SisenseContextProvider.',\r\n    widgetByIdInvalidIdentifier:\r\n      'Не вдалося отримати віджет. ' + 'Переконайтеся, що віджет дашборди існує і доступний.',\r\n    dashboardWidgetsInvalidIdentifiers:\r\n      'Не вдалося отримати віджети дашборди. ' + 'Переконайтеся, що дашборда існує і доступна.',\r\n    executeQueryNoSisenseContext:\r\n      'Контекст Sisense для виконання запиту не знайдено. Щоб виправити, оберніть компонент у SisenseContextProvider.',\r\n    executeQueryNoDataSource: 'Не надано dataSource для виконання запиту',\r\n    dataOptions: {\r\n      noDimensionsAndMeasures:\r\n        'Не знайдено ні dimension-ів, ні measure-ів. Параметри даних повинні мати щонайменше один dimension або measure.',\r\n      attributeNotFound: 'Атрибут \"{{attributeName}}\" не знайдено в даних',\r\n      measureNotFound: 'Measure \"{{measureName}}\" не знайдено в даних',\r\n      filterAttributeNotFound: 'Атрибут фільтра \"{{attributeName}}\" не знайдено в даних',\r\n      highlightAttributeNotFound: 'Атрибут виділення \"{{attributeName}}\" не знайдено в даних',\r\n    },\r\n    optionsTranslation: {\r\n      invalidStyleOptions: \"Недійсні параметри `styleOptions` для діаграми '{{chartType}}'\",\r\n      invalidInternalDataOptions:\r\n        \"Параметри `dataOptions` некоректно перетворені для діаграми '{{chartType}}'\",\r\n    },\r\n    themeNotFound: 'Тему з oid {{themeOid}} не знайдено на Sisense-сервері',\r\n    paletteNotFound: 'Палітру \"{{paletteName}}\" не знайдено на Sisense-сервері',\r\n    chartTypeNotSupported: 'Тип діаграми {{chartType}} не підтримується',\r\n    chartInvalidProps: 'Недійсні параметри діаграми',\r\n    unsupportedWidgetType:\r\n      'Неможливо отримати властивості для непідтримуваного типу віджета - {{widgetType}}',\r\n    sisenseContextNotFound: 'Контекст Sisense не знайдено. Переконайтеся, що він наданий.',\r\n    dashboardInvalidIdentifier:\r\n      'Не вдалося отримати дашборд. Переконайтеся, що дашборд існує і доступний.',\r\n    sharedFormula: {\r\n      identifierExpected:\r\n        'Не вдалося ідентифікувати загальну формулу. Будь ласка, надайте oid або пару name та datasource',\r\n      failedToFetch: 'Не вдалося отримати спільну формулу',\r\n    },\r\n    widgetModel: {\r\n      incomleteWidget: 'Неможливо створити DTO віджету через неповноту властивості ({{prop}})',\r\n      unsupportedWidgetTypeDto: 'Сберігання віджету типу {{chartType}} не підтримується',\r\n      pivotWidgetNotSupported: 'Метод {{methodName}} не підтримується для півот віджету',\r\n      textWidgetNotSupported: 'Метод {{methodName}} не підтримується для текстового віджету',\r\n      onlyTableWidgetSupported: 'Метод {{methodName}} підтримується тільки для табличних віджетів',\r\n      onlyPivotWidgetSupported: 'Метод {{methodName}} підтримується тільки для півот віджетів',\r\n      onlyTextWidgetSupported: 'Метод {{methodName}} підтримується тільки для текстових віджетів',\r\n      onlyCustomWidgetSupported: 'Метод {{methodName}} підтримується тільки для кастомних віджетів',\r\n      unsupportedWidgetType: 'Тип віджету {{widgetType}} не підтримується',\r\n      unsupportedFusionWidgetType: 'Тип Fusion віджету {{widgetType}} не підтримується',\r\n    },\r\n    unknownFilterInFilterRelations: 'Логічні відношення фільтрів містять невідомий фільтр',\r\n    filterRelationsNotSupported: 'Відносини фільтрів ще не підтримуються',\r\n    invalidFilterType: 'Недійсний тип фільтра',\r\n    secondsDateTimeLevelSupportedOnlyForLive:\r\n      \"Рівень часу в секундах підтримується лише для 'live' джерела даних\",\r\n    missingMenuRoot: 'Відсутній ініціалізований корінь меню',\r\n    missingModalRoot: 'Відсутній ініціалізований корінь модального вікна',\r\n    missingDataSource:\r\n      \"Значення 'dataSource' відсутнє. Воно має бути передано явно, або 'defaultDataSource' має бути вказано в SisenseContextProvider.\",\r\n    incorrectOnDataReadyHandler: \"'onDataReady' має повертати дійсний об'єкт даних\",\r\n    undefinedDataSource: 'Не задане джерело даних',\r\n    emptyModel: 'Пуста модель',\r\n    missingMetadata: 'Поле metadata відсутнє',\r\n    missingModelTitle: 'Не знайдено заголовоку моделі',\r\n    httpClientNotFound: 'HttpClient не знайдено',\r\n    serverSettingsNotLoaded: 'Failed to load server settings',\r\n    requiredColumnMissing: \"Відсутній обов'язковий стовпець\",\r\n    unexpectedChartType: 'Невідомий тип графіка: {{chartType}}',\r\n    noRowNumColumn: 'Дані не містять row num column',\r\n    ticIntervalCalculationFailed:\r\n      'Неможливо обрахувати tic interval. Спробуйте задати datetime granularity.',\r\n    polarChartDesignOptionsExpected: 'Polar chart design options очікуються для polar chart',\r\n    polarChartDesignOptionsNotExpected:\r\n      'Polar chart design options не очікуються для non-polar chart',\r\n    indicatorInvalidRelativeSize: 'Невірні опції relative size',\r\n    unsupportedMapType: 'Непідтримуваний тип мапи: {{mapType}}',\r\n    mapLoadingFailed: 'Не вдалося завантажити мапу',\r\n    cascadingFilterOriginalNotFound:\r\n      'Помилка при реструктуризації каскадних фільтрів. Оригінальний фільтр не знайдено',\r\n    dashboardLoadFailed: 'Не вдалося завантажити Dashboard. {{error}}',\r\n    widgetLoadFailed: 'Не вдалося завантажити віджет. {{error}}',\r\n    dashboardWithOidNotFound: 'Dashboard з oid {{dashboardOid}} не знайдено',\r\n    failedToAddWidget: 'Не вдалося додати віджет',\r\n    widgetWithOidNotFound: 'Віджет з oid {{widgetOid}} не знайдено',\r\n    widgetWithOidNotFoundInDashboard:\r\n      'Віджет з oid {{widgetOid}} не знайдено в Dashboard з oid {{dashboardOid}}',\r\n    widgetEmptyResponse: 'Пуста відповідь для віджета з oid {{widgetOid}}',\r\n    dateFilterIncorrectOperator: 'Некорректний оператор: {{operator}}',\r\n    synchronizedFilterInvalidProps:\r\n      '`useSynchronizedFilter` хук потребує одне з [non-null `filterFromProps`] чи [`createEmptyFilter` function]',\r\n    methodNotImplemented: 'Метод не реалізовано.',\r\n    noPivotClient: 'Pivot client не ініціалізовано',\r\n    unexpectedCacheValue: 'Неочікуване значення кешу',\r\n    notAMembersFilter: 'Фільтр не є MembersFilter',\r\n    drilldownNoInitialDimension:\r\n      'Initial dimension має бути задано щоб використовувати drilldown з користувацькими компонентами',\r\n    otherWidgetTypesNotSupported: 'Інші типи віджетів поки що не підтримуються',\r\n    dataBrowser: {\r\n      dimensionNotFound: 'Dimension з id {{dimensionId}} не знайдено',\r\n      attributeNotFound: 'Attribute з id {{attributeId}} не знайдено',\r\n    },\r\n    addFilterPopover: {\r\n      noDataSources:\r\n        'Не знайдено жодного джерела даних. Спробуйте задати `dataSource` у віджетах або `defaultDataSource` на рівні дашборди.',\r\n    },\r\n    tabberInvalidConfiguration: 'Конфігурація Tabber віджета невірна',\r\n  },\r\n  errorBoxText: '$t(common:error): {{errorMessage}}',\r\n  chartNoData: 'Результатів немає',\r\n  filters: 'Фільтри',\r\n  widgetDetails: 'Деталі віджета',\r\n  cancel: 'Відміна',\r\n  includeAll: 'Всі елементи',\r\n  formatting: {\r\n    number: {\r\n      abbreviations: {\r\n        thousand: 'Тис.',\r\n        million: 'Млн',\r\n        billion: 'Млрд',\r\n        trillion: 'Трлн',\r\n      },\r\n    },\r\n  },\r\n  criteriaFilter: {\r\n    displayModePrefix: 'Всі елементи',\r\n    equals: 'Дорівнює {{val}}',\r\n    notEquals: 'Не дорівнює {{val}}',\r\n    lessThan: 'Менше ніж {{val}}',\r\n    lessThanOrEqual: 'Менше або дорівнює {{val}}',\r\n    greaterThan: 'Більше ніж {{val}}',\r\n    greaterThanOrEqual: 'Більше або дорівнює {{val}}',\r\n    between: 'Між {{valA}} та {{valB}}',\r\n    notBetween: 'Не між {{valA}} та {{valB}}',\r\n    top: 'Перші {{valA}} за {{valB}}',\r\n    bottom: 'Останні {{valA}} за {{valB}}',\r\n    is: 'Є {{val}}',\r\n    isNot: 'Не є {{val}}',\r\n    contains: 'Містить {{val}}',\r\n    notContains: `Не містить {{val}}`,\r\n    startsWith: 'Починається з {{val}}',\r\n    notStartsWith: `Не починається з {{val}}`,\r\n    endsWith: 'Закінчується на {{val}}',\r\n    notEndsWith: `Не закінчується на {{val}}`,\r\n    like: 'Схоже на {{val}}',\r\n    byMeasure: 'By measure',\r\n    by: 'by',\r\n  },\r\n  dateFilter: {\r\n    last: 'Останній',\r\n    next: 'Наступний',\r\n    from: 'Від',\r\n    to: 'До',\r\n    count: 'Кількість',\r\n    select: 'Вибрати',\r\n    today: 'Сьогодні',\r\n    days: 'Дні',\r\n    weeks: 'Тижні',\r\n    months: 'Місяці',\r\n    quarters: 'Квартали',\r\n    years: 'Роки',\r\n    earliestDate: 'Найбільш Рання Дата',\r\n    latestDate: 'Найбільш Пізня Дата',\r\n    todayOutOfRange: 'Сьогоднішній день поза доступним діапазоном дат',\r\n    dateRange: {\r\n      fromTo: '{{from}} до {{to}}',\r\n      from: 'Від {{val}}',\r\n      to: 'До {{val}}',\r\n    },\r\n  },\r\n  boxplot: {\r\n    tooltip: {\r\n      whiskers: 'Вуса',\r\n      box: 'Коробка',\r\n      min: 'Мінімум',\r\n      median: 'Медіана',\r\n      max: 'Максимум',\r\n    },\r\n  },\r\n  treemap: {\r\n    tooltip: {\r\n      ofTotal: 'загальної кількості',\r\n      of: 'з',\r\n    },\r\n  },\r\n  advanced: {\r\n    tooltip: {\r\n      min: 'Lower Bound',\r\n      max: 'Upper Bound',\r\n      forecastValue: 'Forecast Value',\r\n      forecast: 'Forecast',\r\n      trend: 'Trend',\r\n      trendLocalValue: 'Local Value',\r\n      confidenceInterval: 'Confidence Interval',\r\n      trendType: 'Type',\r\n      trendDataKey: 'Trend Data',\r\n      trendData: {\r\n        min: 'Min',\r\n        max: 'Max',\r\n        median: 'Median',\r\n        average: 'Average',\r\n      },\r\n    },\r\n  },\r\n  arearange: {\r\n    tooltip: {\r\n      min: 'Мінімум',\r\n      max: 'Максимум',\r\n    },\r\n  },\r\n  dashboard: {\r\n    toolbar: {\r\n      undo: 'Скасувати',\r\n      redo: 'Повторити',\r\n      cancel: 'Відмінити',\r\n      apply: 'Застосувати',\r\n      editLayout: 'Редагувати макет',\r\n      viewMode: 'Режим перегляду',\r\n    },\r\n  },\r\n  unsupportedFilterMessage: 'Непідтримуваний Фільтр (застосовано до запиту даних)',\r\n  unsupportedFilter: 'Непідтримуваний фільтр {{filter}}',\r\n  commonFilter: {\r\n    clearSelectionButton: 'Очистити виділення',\r\n    selectMenuItem: 'Вибрати',\r\n    unselectMenuItem: 'Cкасувати вибір',\r\n  },\r\n  customFilterTileMessage: 'застосовано користувацький фільтр',\r\n  drilldown: {\r\n    drillMenuItem: 'Деталізація',\r\n    breadcrumbsAllSuffix: 'Все',\r\n    breadcrumbsPrev: 'Попередній',\r\n    breadcrumbsNext: 'Наступний',\r\n    popover: {\r\n      members: 'Учасники',\r\n      table: 'Таблиця',\r\n      column: 'Колонка',\r\n    },\r\n  },\r\n  widgetHeader: {\r\n    info: {\r\n      details: 'Деталі віджета',\r\n      tooltip: 'Натисніть щоб побачити повну інформацію',\r\n    },\r\n    menu: {\r\n      deleteWidget: 'Видалити віджет',\r\n      distributeEqualWidth: 'Розподілити порівну в цьому рядку',\r\n    },\r\n  },\r\n  customWidgets: {\r\n    registerPrompt:\r\n      'Невідомий кастомний віджет: {{customWidgetType}}. Будь ласка зареєструйте цей кастомний віджет щоб він міг бути відображений.',\r\n  },\r\n  ai: {\r\n    analyticsChatbot: 'Аналітичний чат-бот',\r\n    dataTopics: 'Теми Даних',\r\n    chatbotDescription:\r\n      'Аналітичний чат-бот розроблено, щоб допомогти вам взаємодіяти з вашими даними за допомогою розмовної мови.',\r\n    topicSelectPrompt: 'Виберіть тему, яку б ви хотіли дослідити:',\r\n    preview: 'Попередній перегляд',\r\n    clearHistoryPrompt: 'Ви дійсно хочете очистити чат?',\r\n    config: {\r\n      inputPromptText: 'Поставте запитання або введіть «/» для отримання ідей',\r\n      welcomeText:\r\n        'Вітаємо в Аналітичному помічнику! Я можу допомогти вам досліджувати та зрозуміти ваші дані.',\r\n      suggestionsWelcomeText: 'Деякі запитання, які у вас можуть виникнути:',\r\n    },\r\n    buttons: {\r\n      insights: 'Інсайти',\r\n      correctResponse: 'Коректна відповідь',\r\n      incorrectResponse: 'Некоректна відповідь',\r\n      clearChat: 'Очистити чат',\r\n      refresh: 'Оновити',\r\n      readMore: 'Читати ще',\r\n      collapse: 'Згорнути',\r\n      yes: 'Так',\r\n      no: 'Ні',\r\n      seeMore: 'Більше',\r\n    },\r\n    disclaimer: {\r\n      poweredByAi: 'Вміст створено за допомогою ШІ, тому можливі несподіванки та помилки.',\r\n      rateRequest: ' Будь ласка, оцінюйте відповіді, щоб ми могли покращити продукт!',\r\n    },\r\n    errors: {\r\n      chatUnavailable: 'Чат недоступний. Спробуйте пізніше.',\r\n      fetchHistory: 'Щось пішло не так, і ми не змогли відновити історію чату. Почнімо спочатку!',\r\n      recommendationsNotAvailable:\r\n        'Наразі рекомендації недоступні. Спробуйте ще раз через кілька хвилин.',\r\n      insightsNotAvailable: 'Немає доступних інсайтів.',\r\n      VectorDBEmptyResponseError:\r\n        'AI ще конфігурується, будь ласка зачекайте та спробуйте ще раз за хвилинку чи дві.',\r\n      LlmBadConfigurationError:\r\n        'Схоже що LLM невірно сконфігурований. Зверніться до вашого Адміністратора щоб він оновив конфігурацію LLM провайдера.',\r\n      ChartTypeUnsupportedError: 'Графік такого типу покищо не підтримується.',\r\n      BlockedByLlmContentFiltering:\r\n        'Це питання заблоковано нашою політикою керування вмістом. Будь ласка спробуйте поставити інше запитання.',\r\n      LlmContextLengthExceedsLimitError:\r\n        'Схоже ви досягли ліміту кількості сповіщеннь, будь ласка очистіть поточний чат аби розпочати новий.',\r\n      UserPromptExeedsLimitError:\r\n        'Цей запит перевищює максимально дозволений ліміт. Будь ласка перефразуйте та зробіть запит коротше.',\r\n      unexpectedChatResponse:\r\n        'Ой, щось пішло не так. Повторіть спробу пізніше або спробуйте поставити інше запитання.',\r\n      unexpected: 'Ой, лихо! Шось йому стало. Спробуйте трохи пізніше.',\r\n      unknownResponse: 'Отримано невідомий тип відповіді, необроблена відповідь=',\r\n      invalidInput: 'Недійсне введення',\r\n      noAvailableDataTopics: 'Жодне з наданих моделей даних або перспектив доступне',\r\n    },\r\n  },\r\n  filterRelations: {\r\n    and: 'І',\r\n    or: 'АБО',\r\n    andOrFormulaApplied: 'Застосовано формулу І/АБО',\r\n  },\r\n  attribute: {\r\n    datetimeName: {\r\n      years: 'Роки в {{columnName}}',\r\n      quarters: 'Квартали в {{columnName}}',\r\n      months: 'Місяці в {{columnName}}',\r\n      weeks: 'Тижні в {{columnName}}',\r\n      days: 'Дні в {{columnName}}',\r\n      hours: 'Години в {{columnName}}',\r\n      minutes: 'Хвилини в {{columnName}}',\r\n    },\r\n  },\r\n  filterEditor: {\r\n    buttons: {\r\n      apply: 'Застосувати',\r\n      cancel: 'Відміна',\r\n      selectAll: 'Обрати всі',\r\n      clearAll: 'Очистити всі',\r\n    },\r\n    labels: {\r\n      includeAll: 'Обрати всі (фільтр не використовується)',\r\n      allowMultiSelection: 'Дозволити вибір кількох значень для списків',\r\n      from: 'Від',\r\n      to: 'До',\r\n      includeCurrent: 'Включаючи поточний',\r\n    },\r\n    placeholders: {\r\n      selectFromList: 'Виберіть зі списку',\r\n      enterEntry: 'Введіть значення...',\r\n      enterValue: 'Введіть значення...',\r\n      select: 'Вибрати',\r\n    },\r\n    conditions: {\r\n      exclude: 'Не є',\r\n      contains: 'Mістить',\r\n      notContain: 'Не містить',\r\n      startsWith: 'Починається з',\r\n      notStartsWith: 'Не починається з',\r\n      endsWith: 'Закінчується на',\r\n      notEndsWith: 'Не закінчується на',\r\n      equals: 'Дорівнює',\r\n      notEquals: 'Не дорівнює',\r\n      isEmpty: 'Порожній',\r\n      isNotEmpty: 'Не порожній',\r\n      lessThan: 'Менше ніж',\r\n      lessThanOrEqual: 'Менше або дорівнює',\r\n      greaterThan: 'Більше ніж',\r\n      greaterThanOrEqual: 'Більше або дорівнює',\r\n      isWithin: 'В межах',\r\n    },\r\n    validationErrors: {\r\n      invalidNumber: 'Тільки цифри',\r\n      invalidNumericRange: '\"До\" має бути більше, ніж \"Від\"',\r\n    },\r\n    datetimeLevels: {\r\n      year: 'Year',\r\n      quarter: 'Quarter',\r\n      month: 'Month',\r\n      week: 'Week',\r\n      day: 'Day',\r\n      aggrigatedHour: 'Hour (aggregated)',\r\n      aggrigatedMinutesRoundTo15: '15-min (aggregated)',\r\n    },\r\n    relativeTypes: {\r\n      last: 'Останній',\r\n      this: 'Поточний',\r\n      next: 'Наступний',\r\n    },\r\n    datetimePositions: {\r\n      before: 'Перед',\r\n      after: 'Після',\r\n    },\r\n  },\r\n  pivotTable: {\r\n    grandTotal: 'Загальний підсумок',\r\n    subTotal: 'Усього {{value}}',\r\n  },\r\n  dataBrowser: {\r\n    addFilter: 'Додати фільтр',\r\n    selectField: 'Вибрати поле',\r\n    configureFilter: 'Налаштувати фільтр',\r\n    noResults: 'Немає результатів',\r\n    searchPlaceholder: 'Пошук',\r\n  },\r\n  jumpToDashboard: {\r\n    jumpableTooltip: 'З цього віджета можна перейти до інших віджетів',\r\n    defaultCaption: 'Перейти до',\r\n    noDrillTargets: 'Цілі для переходу відсутні',\r\n  },\r\n  calendarHeatmap: {\r\n    navigation: {\r\n      firstMonth: 'Перший місяць',\r\n      lastMonth: 'Останній місяць',\r\n      previousMonth: 'Попередній місяць',\r\n      nextMonth: 'Наступний місяць',\r\n      previousGroup: 'Попередня група',\r\n      nextGroup: 'Наступна група',\r\n    },\r\n  },\r\n};\r\n","import { translation as enDictionary, TranslationDictionary } from './en.js';\r\nimport { translation as ukDictionary } from './uk.js';\r\n\r\nexport type { TranslationDictionary };\r\n/**\r\n * A reference to the namespace of the translation resources.\r\n * This namespace is used to access the translation resources in the i18next instance.\r\n *\r\n * @internal\r\n */\r\nexport const PACKAGE_NAMESPACE = 'sdkUi' as const;\r\nexport const resources = {\r\n  en: enDictionary,\r\n  uk: ukDictionary,\r\n};\r\n","import { initI18next } from '@sisense/sdk-common';\r\nimport { initReactI18next } from 'react-i18next';\r\nimport { resources, PACKAGE_NAMESPACE } from './resources/index.js';\r\n\r\nexport function initializeI18n() {\r\n  return initI18next({\r\n    resource: resources,\r\n    plugins: [initReactI18next],\r\n    language: 'en',\r\n    namespace: PACKAGE_NAMESPACE,\r\n  });\r\n}\r\n\r\nexport const { i18nextInstance } = initializeI18n();\r\n","/**\r\n * Translation dictionary for English language.\r\n */\r\nexport const translation = {\r\n    errors: {\r\n        measure: {\r\n            unsupportedType: 'Unsupported measure type',\r\n            dimensionalCalculatedMeasure: {\r\n                noContext: \"DimensionalCalculatedMeasure must have 'context' property\",\r\n            },\r\n            dimensionalBaseMeasure: {\r\n                noAttributeDimExpression: \"DimensionalBaseMeasure must have 'attribute'/'dim'/'expression' property\",\r\n                noAggAggregation: \"DimensionalBaseMeasure must have 'agg' or 'aggregation' property\",\r\n            },\r\n            notAFormula: 'Jaql is not a formula',\r\n        },\r\n        dataModelConfig: {\r\n            noName: \"'name' must be specified in config for DataModel\",\r\n            noMetadata: \"'metadata' must be specified in config for DataModel\",\r\n        },\r\n        filter: {\r\n            unsupportedType: 'Unsupported filter type: {{filterType}}',\r\n            unsupportedDatetimeLevel: 'Filters do not support the next \"datetime\" levels: Hours, MinutesRoundTo30, MinutesRoundTo15, Minutes, Seconds',\r\n            membersFilterNullMember: 'MembersFilter of {{attributeId}} - member cannot be null',\r\n            unsupportedConditionFilter: 'Jaql contains unsupported condition filter: {{filter}}',\r\n            formulaFiltersNotSupported: 'Formula-based filter not supported yet: {{filter}}',\r\n        },\r\n        unsupportedDimensionalElement: 'Unsupported dimensional element type',\r\n    },\r\n};\r\n//# sourceMappingURL=en.js.map","/**\r\n * Translation dictionary for Ukrainian language.\r\n */\r\nexport const translation = {\r\n    errors: {\r\n        measure: {\r\n            unsupportedType: 'Непідтримуваний тип measure',\r\n            dimensionalCalculatedMeasure: {\r\n                noContext: \"DimensionalCalculatedMeasure має мати властивість 'context'\",\r\n            },\r\n            dimensionalBaseMeasure: {\r\n                noAttributeDimExpression: \"DimensionalBaseMeasure має мати властивість 'attribute'/'dim'/'expression'\",\r\n                noAggAggregation: \"DimensionalBaseMeasure має мати властивість 'agg' або 'aggregation'\",\r\n            },\r\n            notAFormula: 'Jaql не формула',\r\n        },\r\n        dataModelConfig: {\r\n            noName: \"'name' має бути вказано в конфігурації для DataModel\",\r\n            noMetadata: \"'metadata' має бути вказано в конфігурації для DataModel\",\r\n        },\r\n        filter: {\r\n            unsupportedType: 'Непідтримуваний тип фільтра: {{filterType}}',\r\n            unsupportedDatetimeLevel: 'Фільтри не підтримують наступні рівні \"datetime\": Hours, MinutesRoundTo30, MinutesRoundTo15, Minutes, Seconds',\r\n            membersFilterNullMember: 'MembersFilter у {{attributeId}} - member не може бути нульовим',\r\n            unsupportedConditionFilter: 'Jaql містить непідтримуваний condition фільтр: {{filter}}',\r\n            formulaFiltersNotSupported: 'Фільтри, що містять формули наразі не підтримуються: {{filter}}',\r\n        },\r\n        unsupportedDimensionalElement: 'Непідтримуваний тип елемента',\r\n    },\r\n};\r\n//# sourceMappingURL=uk.js.map","import { translation as enDictionary } from './en.js';\r\nimport { translation as ukDictionary } from './uk.js';\r\n/**\r\n * A reference to the namespace of the translation resources.\r\n * This namespace is used to access the translation resources in the i18next instance.\r\n *\r\n * @internal\r\n */\r\nexport const PACKAGE_NAMESPACE = 'sdkData';\r\nexport const resources = {\r\n    en: enDictionary,\r\n    uk: ukDictionary,\r\n};\r\n//# sourceMappingURL=index.js.map","import { initI18next } from '@sisense/sdk-common';\r\nimport { PACKAGE_NAMESPACE, resources } from './resources/index.js';\r\nexport function initializeI18n() {\r\n    return initI18next({\r\n        resource: resources,\r\n        language: 'en',\r\n        namespace: PACKAGE_NAMESPACE,\r\n    });\r\n}\r\nexport const { i18nextInstance } = initializeI18n();\r\n//# sourceMappingURL=initialize-i18n.js.map","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nexport default baseMatches;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nexport default identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nexport default baseIteratee;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n","/**\n * based on string passed, get the integer hash value\n * through bitwise operation (based on spinoff of dbj2\n * with enhancements for reduced collisions)\n */\nfunction hash(string) {\n    var index = string.length;\n    var hashA = 5381;\n    var hashB = 52711;\n    var charCode;\n    while (index--) {\n        charCode = string.charCodeAt(index);\n        hashA = (hashA * 33) ^ charCode;\n        hashB = (hashB * 33) ^ charCode;\n    }\n    return (hashA >>> 0) * 4096 + (hashB >>> 0);\n}\n\nvar SEPARATOR = '|';\nvar XML_ELEMENT_REGEXP = /\\[object ([HTML|SVG](.*)Element)\\]/;\nvar CLASSES = {\n    '[object Arguments]': 0,\n    '[object Array]': 1,\n    '[object ArrayBuffer]': 2,\n    '[object AsyncFunction]': 3,\n    '[object AsyncGeneratorFunction]': 4,\n    '[object BigInt]': 5,\n    '[object BigInt64Array]': 6,\n    '[object BigUint64Array]': 7,\n    '[object Boolean]': 8,\n    '[object DataView]': 9,\n    '[object Date]': 10,\n    '[object DocumentFragment]': 11,\n    '[object Error]': 12,\n    '[object Event]': 13,\n    '[object Float32Array]': 14,\n    '[object Float64Array]': 15,\n    '[object Function]': 16,\n    '[object Generator]': 17,\n    '[object GeneratorFunction]': 18,\n    '[object Int8Array]': 19,\n    '[object Int16Array]': 20,\n    '[object Map]': 21,\n    '[object Number]': 22,\n    '[object Object]': 23,\n    '[object Promise]': 24,\n    '[object RegExp]': 25,\n    '[object Set]': 26,\n    '[object SharedArrayBuffer]': 27,\n    '[object String]': 28,\n    '[object Uint8Array]': 29,\n    '[object Uint8ClampedArray]': 30,\n    '[object Uint16Array]': 31,\n    '[object Uint32Array]': 32,\n    '[object WeakMap]': 33,\n    '[object WeakRef]': 34,\n    '[object WeakSet]': 35,\n    CUSTOM: 36,\n    ELEMENT: 37,\n};\nvar ARRAY_LIKE_CLASSES = {\n    '[object Arguments]': 1,\n    '[object Array]': 2,\n};\nvar NON_ENUMERABLE_CLASSES = {\n    '[object Generator]': 1,\n    '[object Promise]': 2,\n    '[object WeakMap]': 3,\n    '[object WeakRef]': 4,\n    '[object WeakSet]': 5,\n};\nvar PRIMITIVE_WRAPPER_CLASSES = {\n    '[object AsyncFunction]': 1,\n    '[object AsyncGeneratorFunction]': 2,\n    '[object Boolean]': 3,\n    '[object Function]': 4,\n    '[object GeneratorFunction]': 5,\n    '[object Number]': 6,\n    '[object String]': 7,\n};\nvar TYPED_ARRAY_CLASSES = {\n    '[object BigInt64Array]': 1,\n    '[object BigUint64Array]': 2,\n    '[object Float32Array]': 3,\n    '[object Float64Array]': 4,\n    '[object Int8Array]': 5,\n    '[object Int16Array]': 6,\n    '[object Uint8Array]': 7,\n    '[object Uint8ClampedArray]': 8,\n    '[object Uint16Array]': 9,\n    '[object Uint32Array]': 10,\n};\nvar RECURSIVE_CLASSES = {\n    '[object Arguments]': 1,\n    '[object Array]': 2,\n    '[object ArrayBuffer]': 3,\n    '[object BigInt64Array]': 4,\n    '[object BigUint64Array]': 5,\n    '[object DataView]': 6,\n    '[object Float32Array]': 7,\n    '[object Float64Array]': 8,\n    '[object Int8Array]': 9,\n    '[object Int16Array]': 10,\n    '[object Map]': 11,\n    '[object Object]': 12,\n    '[object Set]': 13,\n    '[object SharedArrayBuffer]': 14,\n    '[object Uint8Array]': 15,\n    '[object Uint8ClampedArray]': 16,\n    '[object Uint16Array]': 17,\n    '[object Uint32Array]': 18,\n    CUSTOM: 19,\n};\nvar HASHABLE_TYPES = {\n    bigint: 'i',\n    boolean: 'b',\n    empty: 'e',\n    function: 'g',\n    number: 'n',\n    object: 'o',\n    string: 's',\n    symbol: 's',\n};\n\nfunction sortByKey(first, second) {\n    return first[0] > second[0];\n}\nfunction sortBySelf(first, second) {\n    return first > second;\n}\nfunction sort(array, fn) {\n    var subIndex;\n    var value;\n    for (var index = 0; index < array.length; ++index) {\n        value = array[index];\n        for (subIndex = index - 1; ~subIndex && fn(array[subIndex], value); --subIndex) {\n            array[subIndex + 1] = array[subIndex];\n        }\n        array[subIndex + 1] = value;\n    }\n    return array;\n}\n\nfunction namespaceComplexValue(classType, value) {\n    return (HASHABLE_TYPES.object + SEPARATOR + CLASSES[classType] + SEPARATOR + value);\n}\n\nvar NON_ENUMERABLE_CLASS_CACHE = new WeakMap();\nvar refId = 0;\nfunction getUnsupportedHash(value, classType) {\n    var cached = NON_ENUMERABLE_CLASS_CACHE.get(value);\n    if (cached) {\n        return cached;\n    }\n    var toCache = namespaceComplexValue(classType, 'NOT_ENUMERABLE' + SEPARATOR + refId++);\n    NON_ENUMERABLE_CLASS_CACHE.set(value, toCache);\n    return toCache;\n}\n\nvar toString = Object.prototype.toString;\nfunction stringifyComplexType(value, classType, state) {\n    if (RECURSIVE_CLASSES[classType]) {\n        return stringifyRecursiveAsJson(classType, value, state);\n    }\n    if (classType === '[object Date]') {\n        return namespaceComplexValue(classType, value.getTime());\n    }\n    if (classType === '[object RegExp]') {\n        return namespaceComplexValue(classType, value.toString());\n    }\n    if (classType === '[object Event]') {\n        return namespaceComplexValue(classType, [\n            value.bubbles,\n            value.cancelBubble,\n            value.cancelable,\n            value.composed,\n            value.currentTarget,\n            value.defaultPrevented,\n            value.eventPhase,\n            value.isTrusted,\n            value.returnValue,\n            value.target,\n            value.type,\n        ].join());\n    }\n    if (classType === '[object Error]') {\n        return namespaceComplexValue(classType, value.message + SEPARATOR + value.stack);\n    }\n    if (classType === '[object DocumentFragment]') {\n        return namespaceComplexValue(classType, stringifyDocumentFragment(value));\n    }\n    var element = classType.match(XML_ELEMENT_REGEXP);\n    if (element) {\n        return namespaceComplexValue('ELEMENT', element[1] + SEPARATOR + value.outerHTML);\n    }\n    if (NON_ENUMERABLE_CLASSES[classType]) {\n        return getUnsupportedHash(value, classType);\n    }\n    if (PRIMITIVE_WRAPPER_CLASSES[classType]) {\n        return namespaceComplexValue(classType, value.toString());\n    }\n    // This would only be hit with custom `toStringTag` values\n    return stringifyRecursiveAsJson('CUSTOM', value, state);\n}\nfunction stringifyRecursiveAsJson(classType, value, state) {\n    var cached = state.cache.get(value);\n    if (cached) {\n        return namespaceComplexValue(classType, 'RECURSIVE~' + cached);\n    }\n    state.cache.set(value, ++state.id);\n    if (classType === '[object Object]') {\n        return value[Symbol.iterator]\n            ? getUnsupportedHash(value, classType)\n            : namespaceComplexValue(classType, stringifyObject(value, state));\n    }\n    if (ARRAY_LIKE_CLASSES[classType]) {\n        return namespaceComplexValue(classType, stringifyArray(value, state));\n    }\n    if (classType === '[object Map]') {\n        return namespaceComplexValue(classType, stringifyMap(value, state));\n    }\n    if (classType === '[object Set]') {\n        return namespaceComplexValue(classType, stringifySet(value, state));\n    }\n    if (TYPED_ARRAY_CLASSES[classType]) {\n        return namespaceComplexValue(classType, value.join());\n    }\n    if (classType === '[object ArrayBuffer]') {\n        return namespaceComplexValue(classType, stringifyArrayBuffer(value));\n    }\n    if (classType === '[object DataView]') {\n        return namespaceComplexValue(classType, stringifyArrayBuffer(value.buffer));\n    }\n    if (NON_ENUMERABLE_CLASSES[classType]) {\n        return getUnsupportedHash(value, classType);\n    }\n    return namespaceComplexValue('CUSTOM', stringifyObject(value, state));\n}\nfunction stringifyArray(value, state) {\n    var index = value.length;\n    var result = new Array(index);\n    while (--index >= 0) {\n        result[index] = stringify(value[index], state);\n    }\n    return result.join();\n}\nfunction stringifyArrayBufferModern(buffer) {\n    return Buffer.from(buffer).toString('utf8');\n}\nfunction stringifyArrayBufferFallback(buffer) {\n    return String.fromCharCode.apply(null, new Uint16Array(buffer));\n}\nfunction stringifyArrayBufferNone() {\n    return 'UNSUPPORTED';\n}\nfunction stringifyDocumentFragment(fragment) {\n    var children = fragment.children;\n    var index = children.length;\n    var innerHTML = new Array(index);\n    while (--index >= 0) {\n        innerHTML[index] = children[index].outerHTML;\n    }\n    return innerHTML.join();\n}\nvar stringifyArrayBuffer = typeof Buffer !== 'undefined' && typeof Buffer.from === 'function'\n    ? stringifyArrayBufferModern\n    : typeof Uint16Array === 'function'\n        ? stringifyArrayBufferFallback\n        : stringifyArrayBufferNone;\nfunction stringifyMap(map, state) {\n    var result = new Array(map.size);\n    var index = 0;\n    map.forEach(function (value, key) {\n        result[index++] = [stringify(key, state), stringify(value, state)];\n    });\n    sort(result, sortByKey);\n    while (--index >= 0) {\n        result[index] = '[' + result[index][0] + ',' + result[index][1] + ']';\n    }\n    return '[' + result.join() + ']';\n}\nfunction stringifyObject(value, state) {\n    var properties = sort(Object.getOwnPropertyNames(value), sortBySelf);\n    var length = properties.length;\n    var result = new Array(length);\n    var index = length;\n    while (--index >= 0) {\n        result[index] =\n            properties[index] + ':' + stringify(value[properties[index]], state);\n    }\n    return '{' + result.join() + '}';\n}\nfunction stringifySet(set, state) {\n    var result = new Array(set.size);\n    var index = 0;\n    set.forEach(function (value) {\n        result[index++] = stringify(value, state);\n    });\n    return '[' + sort(result, sortBySelf).join() + ']';\n}\nfunction stringify(value, state) {\n    var type = typeof value;\n    if (value == null || type === 'undefined') {\n        return HASHABLE_TYPES.empty + value;\n    }\n    if (type === 'object') {\n        return stringifyComplexType(value, toString.call(value), state || { cache: new WeakMap(), id: 1 });\n    }\n    if (type === 'function' || type === 'symbol') {\n        return HASHABLE_TYPES[type] + value.toString();\n    }\n    if (type === 'boolean') {\n        return HASHABLE_TYPES.boolean + +value;\n    }\n    return HASHABLE_TYPES[type] + value;\n}\n\nfunction hashIt(value) {\n    return hash(stringify(value, undefined));\n}\n\nexport { hashIt as default };\n//# sourceMappingURL=index.mjs.map\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nexport default overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nexport default createAssigner;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  return object == null || delete object[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nexport default omit;\n","import { AbstractTranslatableError } from '@sisense/sdk-common';\r\nimport { i18nextInstance } from './initialize-i18n.js';\r\nimport { PACKAGE_NAMESPACE } from './resources/index.js';\r\nexport class TranslatableError extends AbstractTranslatableError {\r\n    constructor(translationKey, interpolationOptions) {\r\n        super(PACKAGE_NAMESPACE, {\r\n            key: translationKey,\r\n            interpolationOptions: interpolationOptions,\r\n        }, i18nextInstance.t);\r\n    }\r\n}\r\n//# sourceMappingURL=translatable-error.js.map","/**\r\n * @internal\r\n */\r\nexport class DimensionalElement {\r\n    constructor(name, type, desc, dataSource, composeCode) {\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalElement';\r\n        this._name = name;\r\n        this.type = type;\r\n        this.description = desc || '';\r\n        if (dataSource) {\r\n            this._dataSource = dataSource;\r\n        }\r\n        if (composeCode) {\r\n            this.composeCode = composeCode;\r\n        }\r\n    }\r\n    /**\r\n     * Defines the element's name\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n    set name(value) {\r\n        this._name = value;\r\n    }\r\n    /**\r\n     * Defines the element's data source\r\n     */\r\n    get dataSource() {\r\n        return this._dataSource;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        return {\r\n            name: this.name,\r\n            type: this.type,\r\n            description: this.description,\r\n            dataSource: this.dataSource,\r\n            composeCode: this.composeCode,\r\n            __serializable: this.__serializable,\r\n        };\r\n    }\r\n    toJSON() {\r\n        return this.serialize();\r\n    }\r\n    /**\r\n     * Gets a string representation of the element\r\n     */\r\n    toString() {\r\n        return this.jaql();\r\n    }\r\n}\r\n/**\r\n * @param name - The name to normalize\r\n * @internal\r\n */\r\nexport function normalizeName(name) {\r\n    // Remove all invalid characters\r\n    let normalizedName = name.replace(/[^a-zA-Z0-9_.]/g, '').replace(/\\./g, '_');\r\n    // Prefix with '_' if it starts with a number\r\n    const firstChar = normalizedName.charAt(0);\r\n    if (firstChar.match(/[0-9]/)) {\r\n        normalizedName = '_' + normalizedName;\r\n    }\r\n    return normalizedName;\r\n}\r\n//# sourceMappingURL=base.js.map","export const DATA_MODEL_MODULE_NAME = 'DM';\r\n//# sourceMappingURL=consts.js.map","/* eslint-disable @typescript-eslint/no-unsafe-return */\r\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/*\r\n * Types\r\n */\r\n/**\r\n * Different aggregation types\r\n */\r\nexport const AggregationTypes = {\r\n    /** Sum aggregation type */\r\n    Sum: 'sum',\r\n    /** Average aggregation type */\r\n    Average: 'avg',\r\n    /** Min aggregation type */\r\n    Min: 'min',\r\n    /** Max aggregation type */\r\n    Max: 'max',\r\n    /** Count aggregation type */\r\n    Count: 'count',\r\n    /** Count distinct aggregation type */\r\n    CountDistinct: 'countDistinct',\r\n    /** Median aggregation type */\r\n    Median: 'median',\r\n    /** Variance aggregation type */\r\n    Variance: 'var',\r\n    /** Standard deviation aggregation type */\r\n    StandardDeviation: 'stdev',\r\n};\r\n/**\r\n * Different sort types.\r\n */\r\nexport var Sort;\r\n(function (Sort) {\r\n    /** No sort definition  */\r\n    Sort[Sort[\"None\"] = 0] = \"None\";\r\n    /** Sort Ascending */\r\n    Sort[Sort[\"Ascending\"] = 1] = \"Ascending\";\r\n    /** Sort Descending */\r\n    Sort[Sort[\"Descending\"] = 2] = \"Descending\";\r\n})(Sort = Sort || (Sort = {}));\r\n/**\r\n * Different metadata types\r\n *\r\n * @internal\r\n */\r\nexport const MetadataTypes = {\r\n    Measure: 'measure',\r\n    MeasureTemplate: 'measuretemplate',\r\n    BaseMeasure: 'basemeasure',\r\n    CalculatedMeasure: 'calculatedmeasure',\r\n    Dimension: 'dimension',\r\n    DateDimension: 'datedimension',\r\n    TextDimension: 'textdimension',\r\n    NumericDimension: 'numericdimension',\r\n    DateLevel: 'datelevel',\r\n    Attribute: 'attribute',\r\n    TextAttribute: 'text-attribute',\r\n    NumericAttribute: 'numeric-attribute',\r\n    Filter: 'filter',\r\n    DimensionFilter: 'dimensionfilter',\r\n    MeasureFilter: 'measurefilter',\r\n    /**\r\n     * Checks whether the given object or type is a metadata element\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a metadata element\r\n     */\r\n    isMetadata(o) {\r\n        return (MetadataTypes.isMeasure(o) ||\r\n            MetadataTypes.isDimension(o) ||\r\n            MetadataTypes.isAttribute(o) ||\r\n            MetadataTypes.isFilter(o));\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a measure template\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a measure template\r\n     */\r\n    isMeasureTemplate(o) {\r\n        if (!o) {\r\n            return false;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return type.toLowerCase() === MetadataTypes.MeasureTemplate;\r\n        }\r\n        return (o.agg === '*' ||\r\n            o.aggregation === '*' ||\r\n            (o.type && o.type.toLowerCase() === MetadataTypes.MeasureTemplate));\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a base measure\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a base measure\r\n     */\r\n    isBaseMeasure(o) {\r\n        if (!o) {\r\n            return false;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return type.toLowerCase() === MetadataTypes.BaseMeasure;\r\n        }\r\n        // JaqlElement doesn't have property attribute. Check for jaql, dim, or expression instead\r\n        return ((o.agg || o.aggregation) &&\r\n            (o.attribute || o.jaql || o.dim || o.expression) &&\r\n            !this.isMeasureTemplate(o));\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a measure - of any type\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a measure - of any type\r\n     */\r\n    isMeasure(o) {\r\n        if (!o) {\r\n            return false;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return (type.toLowerCase() === MetadataTypes.Measure ||\r\n                type.toLowerCase() === MetadataTypes.BaseMeasure ||\r\n                type.toLowerCase() === MetadataTypes.MeasureTemplate ||\r\n                type.toLowerCase() === MetadataTypes.CalculatedMeasure);\r\n        }\r\n        return this.isBaseMeasure(o) || this.isCalculatedMeasure(o) || this.isMeasureTemplate(o);\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a calculated measure\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a calculated measure\r\n     */\r\n    isCalculatedMeasure(o) {\r\n        if (!o) {\r\n            return false;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return type.toLowerCase() === MetadataTypes.CalculatedMeasure;\r\n        }\r\n        return (o.expression || o.formula) && o.context;\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a date dimension\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a date dimension\r\n     */\r\n    isDateDimension(o) {\r\n        if (!o) {\r\n            return false;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return type.toLowerCase() === MetadataTypes.DateDimension;\r\n        }\r\n        return (o.dim || o.expression) && o.level;\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a text dimension\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a text dimension\r\n     */\r\n    isTextDimension(o) {\r\n        if (!o) {\r\n            return false;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return type.toLowerCase() === MetadataTypes.TextDimension;\r\n        }\r\n        return false;\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a numeric dimension\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a numeric dimension\r\n     */\r\n    isNumericDimension(o) {\r\n        if (!o) {\r\n            return false;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return type.toLowerCase() === MetadataTypes.NumericDimension;\r\n        }\r\n        return false;\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a dimension - of any type\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a dimension - of any type\r\n     */\r\n    isDimension(o) {\r\n        if (o && typeof o === 'object') {\r\n            o = o.type;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return (type.toLowerCase() === MetadataTypes.DateDimension ||\r\n                type.toLowerCase() === MetadataTypes.Dimension ||\r\n                type.toLowerCase() === MetadataTypes.TextDimension ||\r\n                type.toLowerCase() === MetadataTypes.NumericDimension);\r\n        }\r\n        return false;\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is an attribute - of any type\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is an attribute - of any type\r\n     */\r\n    isAttribute(o) {\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return (type.toLowerCase() === MetadataTypes.Attribute ||\r\n                type.toLowerCase() === MetadataTypes.TextAttribute ||\r\n                type.toLowerCase() === MetadataTypes.NumericAttribute ||\r\n                type.toLowerCase() === MetadataTypes.DateLevel);\r\n        }\r\n        if (o && o.type) {\r\n            return this.isAttribute(o.type);\r\n        }\r\n        return false;\r\n    },\r\n    /**\r\n     * Checks whether the given object or type is a filter\r\n     *\r\n     * @param o - object to check\r\n     * @returns true if the object or type is a filter\r\n     */\r\n    isFilter(o) {\r\n        if (o && typeof o === 'object') {\r\n            o = o.type;\r\n        }\r\n        if (typeof o === 'string') {\r\n            const type = o;\r\n            return (type.toLowerCase() === MetadataTypes.Filter ||\r\n                type.toLowerCase() === MetadataTypes.DimensionFilter ||\r\n                type.toLowerCase() === MetadataTypes.MeasureFilter);\r\n        }\r\n        return false;\r\n    },\r\n};\r\n/**\r\n * Levels for {@link DateDimension}\r\n */\r\nexport const DateLevels = {\r\n    Years: 'Years',\r\n    Quarters: 'Quarters',\r\n    Months: 'Months',\r\n    Weeks: 'Weeks',\r\n    Days: 'Days',\r\n    Hours: 'Hours',\r\n    MinutesRoundTo30: 'MinutesRoundTo30',\r\n    MinutesRoundTo15: 'MinutesRoundTo15',\r\n    Minutes: 'Minutes',\r\n    Seconds: 'Seconds',\r\n    AggHours: 'AggHours',\r\n    AggMinutesRoundTo30: 'AggMinutesRoundTo30',\r\n    AggMinutesRoundTo15: 'AggMinutesRoundTo15',\r\n    AggMinutesRoundTo1: 'AggMinutesRoundTo1',\r\n    /** @internal */\r\n    get all() {\r\n        return [\r\n            DateLevels.Years,\r\n            DateLevels.Quarters,\r\n            DateLevels.Months,\r\n            DateLevels.Weeks,\r\n            DateLevels.Days,\r\n            DateLevels.Hours,\r\n            DateLevels.MinutesRoundTo30,\r\n            DateLevels.MinutesRoundTo15,\r\n            DateLevels.Minutes,\r\n            DateLevels.Seconds,\r\n            DateLevels.AggHours,\r\n            DateLevels.AggMinutesRoundTo30,\r\n            DateLevels.AggMinutesRoundTo15,\r\n            DateLevels.AggMinutesRoundTo1,\r\n        ];\r\n    },\r\n};\r\n/** @internal */\r\nexport var DataType;\r\n(function (DataType) {\r\n    DataType[\"TEXT\"] = \"text\";\r\n    DataType[\"NUMERIC\"] = \"numeric\";\r\n    DataType[\"DATETIME\"] = \"datetime\";\r\n})(DataType = DataType || (DataType = {}));\r\n/** @internal */\r\nexport var JaqlSortDirection;\r\n(function (JaqlSortDirection) {\r\n    JaqlSortDirection[\"ASC\"] = \"asc\";\r\n    JaqlSortDirection[\"DESC\"] = \"desc\";\r\n})(JaqlSortDirection = JaqlSortDirection || (JaqlSortDirection = {}));\r\n/**\r\n * @internal\r\n */\r\nexport var CurrencyPosition;\r\n(function (CurrencyPosition) {\r\n    CurrencyPosition[\"PRE\"] = \"pre\";\r\n    CurrencyPosition[\"POST\"] = \"post\";\r\n})(CurrencyPosition = CurrencyPosition || (CurrencyPosition = {}));\r\n//# sourceMappingURL=types.js.map","import { escapeSingleQuotes } from '@sisense/sdk-common';\r\n/**\r\n * Stringifies the argument, with an option to exclude specific properties from objects without a 'composeCode'.\r\n * Keys with spaces in objects will be enclosed in single quotes.\r\n *\r\n * @param arg - The argument to stringify.\r\n * @param excludeProps - Optional array of property names to exclude when stringifying objects (that don't have 'composeCode').\r\n * @returns The stringified representation of the argument.\r\n */\r\nexport function stringifyHelper(arg, excludeProps = []) {\r\n    try {\r\n        if (arg === null || arg === undefined) {\r\n            return String(arg);\r\n        }\r\n        if (typeof arg === 'string') {\r\n            return `'${escapeSingleQuotes(arg)}'`;\r\n        }\r\n        if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n            return String(arg);\r\n        }\r\n        if (arg instanceof Date) {\r\n            return `new Date('${arg.toISOString()}')`;\r\n        }\r\n        if (Array.isArray(arg)) {\r\n            return `[${arg.map((item) => stringifyHelper(item, excludeProps)).join(', ')}]`;\r\n        }\r\n        if (typeof arg === 'object' && arg !== null) {\r\n            if ('composeCode' in arg) {\r\n                return arg.composeCode;\r\n            }\r\n            const entries = Object.entries(arg)\r\n                .filter(([key]) => !excludeProps.includes(key))\r\n                .map(([key, value]) => {\r\n                const formattedKey = /[^a-zA-Z0-9_$]/.test(key) ? `'${key}'` : key;\r\n                return `${formattedKey}: ${stringifyHelper(value, excludeProps)}`;\r\n            });\r\n            return `{ ${entries.join(', ')} }`;\r\n        }\r\n        // Fallback for anything else\r\n        return JSON.stringify(arg);\r\n    }\r\n    catch (e) {\r\n        console.error(e, JSON.stringify(arg, null, 2));\r\n        return JSON.stringify(arg);\r\n    }\r\n}\r\nfunction trimTrailingUndefined(args) {\r\n    let i = args.length;\r\n    while (i > 0 && args[i - 1] === undefined) {\r\n        i--;\r\n    }\r\n    return args.slice(0, i);\r\n}\r\n/**\r\n * Generic high order function to construct compose code for factory functions\r\n *\r\n * @param func - factory function\r\n * @param factoryName - name of the factory (e.g. 'filterFactory', 'measureFactory')\r\n * @param funcName - name of the factory function. Needed if the function name is minified.\r\n * @returns factory function with composeCode property added\r\n */\r\nfunction withComposeCode(factoryName, funcName) {\r\n    return function (func) {\r\n        return function (...args) {\r\n            const trimmedArgs = trimTrailingUndefined(args);\r\n            const length = trimmedArgs.length;\r\n            const argValues = trimmedArgs\r\n                .map((arg) => stringifyHelper(arg, ['guid']))\r\n                // Remove trivial arg values from the end of the array\r\n                .filter((str, index) => !(['', '{  }', '{}', 'undefined', 'null'].includes(str) && index === length - 1))\r\n                .join(', ');\r\n            const signature = `${factoryName}.${funcName !== null && funcName !== void 0 ? funcName : func.name}(${argValues})`;\r\n            // Call the original function and get the result\r\n            const result = func(...args);\r\n            result.composeCode = signature; // Type assertion needed here\r\n            return result;\r\n        };\r\n    };\r\n}\r\n/**\r\n * High order function to construct compose code for filter factory functions\r\n *\r\n * @param func - filter factory function\r\n * @param funcName - name of the filter factory function. Needed if the function name is minified.\r\n * @returns filter factory function with composeCode property added to the filter\r\n */\r\nexport function withComposeCodeForFilter(func, funcName) {\r\n    return withComposeCode('filterFactory', funcName)(func);\r\n}\r\n/**\r\n * High order function to construct compose code for filter relations factory functions\r\n *\r\n * @param func - filter factory function\r\n * @param funcName - name of the filter factory function. Needed if the function name is minified.\r\n * @returns filter factory function with composeCode property added to the filter\r\n */\r\nexport function withComposeCodeForFilterRelations(func, funcName) {\r\n    return withComposeCode('filterFactory.logic', funcName)(func);\r\n}\r\n/**\r\n * High order function to construct compose code for analytics factory functions\r\n *\r\n * @param func - analytics factory function\r\n * @param funcName - name of the analytics factory function. Needed if the function name is minified.\r\n * @returns analytics factory function with composeCode property added to the analytics\r\n */\r\nexport function withComposeCodeForAnalytics(func, funcName) {\r\n    return withComposeCode('analyticsFactory', funcName)(func);\r\n}\r\n/**\r\n * High order function to construct compose code for measure factory functions\r\n *\r\n * @param func - measure factory function\r\n * @param funcName - name of the measure factory function. Needed if the function name is minified.\r\n * @returns measure factory function with composeCode property added to the measure\r\n */\r\nexport function withComposeCodeForMeasure(func, funcName) {\r\n    return withComposeCode('measureFactory', funcName)(func);\r\n}\r\n//# sourceMappingURL=compose-code-utils.js.map","import { normalizeName } from '../base.js';\r\nimport { withComposeCodeForMeasure } from '../compose-code-utils.js';\r\nimport { AggregationTypes, MetadataTypes } from '../types.js';\r\nimport { DimensionalBaseMeasure, DimensionalCalculatedMeasure } from './measures.js';\r\n/**\r\n * Defines the different numeric operators that can be used with numeric filters\r\n *\r\n * @internal\r\n */\r\nexport const RankingTypes = {\r\n    /**\r\n     * In competition ranking, items that rank equally receive the same ranking number, and then a gap is left after the equally ranked items in the ranking numbers.\r\n     */\r\n    StandardCompetition: '1224',\r\n    /**\r\n     * In modified competition ranking, items that rank equally receive the same ranking number, and a gap is left before the equally ranked items in the ranking numbers.\r\n     */\r\n    ModifiedCompetition: '1334',\r\n    /**\r\n     * In dense ranking, items that rank equally receive the same ranking number, and the next items receive the immediately following ranking number.\r\n     */\r\n    Dense: '1223',\r\n    /**\r\n     * In ordinal ranking, all items receive distinct ordinal numbers, including items that rank equally. The assignment of distinct ordinal numbers for equal-ranking items is arbitrary.\r\n     */\r\n    Ordinal: '1234',\r\n};\r\n/**\r\n * Defines the different ranking sorting types supported by rank measure\r\n *\r\n * @internal\r\n */\r\nexport const RankingSortTypes = {\r\n    Ascending: 'ASC',\r\n    Descending: 'DESC',\r\n};\r\nfunction addToFormula(builder, context, o) {\r\n    if (typeof o === 'number') {\r\n        builder.push(o.toString());\r\n    }\r\n    else if (o && MetadataTypes.isMeasureTemplate(o.type)) {\r\n        // default to sum\r\n        o = o.sum();\r\n        const name = `[${normalizeName(o.name)}]`;\r\n        builder.push(name);\r\n        context[name] = o;\r\n    }\r\n    else if (o && MetadataTypes.isMeasure(o.type)) {\r\n        const name = `[${normalizeName(o.name)}]`;\r\n        builder.push(name);\r\n        context[name] = o;\r\n    }\r\n    else if (o && MetadataTypes.isFilter(o.type)) {\r\n        const name = `[${normalizeName(o.name)}]`;\r\n        builder.push(name);\r\n        context[name] = o;\r\n    }\r\n    else if (o && MetadataTypes.isAttribute(o.type)) {\r\n        const name = `[${normalizeName(o.name)}]`;\r\n        builder.push(name);\r\n        context[name] = o;\r\n    }\r\n}\r\nfunction measureFunction(measure, name, func, options) {\r\n    const context = {};\r\n    const builder = [func + '('];\r\n    addToFormula(builder, context, measure);\r\n    if (options) {\r\n        builder.push(`, ${options}`);\r\n    }\r\n    builder.push(')');\r\n    return new DimensionalCalculatedMeasure(name, builder.join(''), context);\r\n}\r\n/**\r\n * Creates a calculated measure for a valid custom formula built from [base functions](/guides/sdk/reference/functions.html#measured-value-functions).\r\n *\r\n * Use square brackets (`[]`) within the `formula` property to include dimensions, measures, or filters.\r\n * Each unique dimension, measure, or filter included in the `formula` must be defined using a property:value pair in the `context` parameter.\r\n *\r\n * You can nest custom formulas by placing one inside the `formula` parameter of another.\r\n *\r\n * Note: To use [shared formulas](https://docs.sisense.com/main/SisenseLinux/shared-formulas.htm)\r\n * from a Fusion instance, you must fetch them first using {@link @sisense/sdk-ui!useGetSharedFormula | useGetSharedFormula}.\r\n *\r\n * @example\r\n * An example of constructing a custom formulas using dimensions, measures, and nested custom formulas\r\n * from the Sample Ecommerce data model.\r\n * ```ts\r\n * // Custom formula\r\n * const profitabilityRatio = measureFactory.customFormula(\r\n *   'Profitability Ratio',\r\n *   '([totalRevenue] - SUM([cost])) / [totalRevenue]',\r\n *   {\r\n *     totalRevenue: measureFactory.sum(DM.Commerce.Revenue),\r\n *     cost: DM.Commerce.Cost,\r\n *   },\r\n * );\r\n *\r\n * // Nested custom formula\r\n * const profitabilityRatioRank = measureFactory.customFormula(\r\n *   'Profitability Ratio Rank',\r\n *   'RANK([profRatio], \"ASC\", \"1224\")',\r\n *   {\r\n *     profRatio: profitabilityRatio,\r\n *   },\r\n * );\r\n * ```\r\n *\r\n * Another example of constructing a custom formula using measures and filters\r\n * ```ts\r\n * const totalCostWithFilter = measureFactory.customFormula(\r\n *   'Total Cost with Filter',\r\n *   '(SUM([cost]), [categoryFilter])',\r\n *   {\r\n *     cost: DM.Commerce.Cost,\r\n *     categoryFilter: filterFactory.members(DM.Category.Category, ['Apple Mac Desktops']),\r\n *   },\r\n * );\r\n * ```\r\n * @param title - Title of the measure to be displayed in legend\r\n * @param formula - Formula to be used for the measure\r\n * @param context - Formula context as a map of strings to attributes, measures, or filters\r\n * @returns A calculated measure instance\r\n * @group Advanced Analytics\r\n */\r\nexport const customFormula = withComposeCodeForMeasure((title, formula, context) => {\r\n    // context keys must be in brackets\r\n    const newContext = Object.fromEntries(Object.entries(context).map(([key, val]) => [key.startsWith('[') ? key : `[${key}]`, val]));\r\n    return new DimensionalCalculatedMeasure(title, formula, newContext);\r\n}, 'customFormula');\r\nfunction arithmetic(operand1, operator, operand2, name, withParentheses) {\r\n    const builder = [];\r\n    const context = {};\r\n    if (withParentheses === true) {\r\n        builder.push('(');\r\n    }\r\n    addToFormula(builder, context, operand1);\r\n    builder.push(operator);\r\n    addToFormula(builder, context, operand2);\r\n    if (withParentheses === true) {\r\n        builder.push(')');\r\n    }\r\n    const exp = builder.join('');\r\n    return new DimensionalCalculatedMeasure(name !== null && name !== void 0 ? name : exp, exp, context);\r\n}\r\n/**\r\n * Creates an aggregated measure.\r\n *\r\n * This is a base function to build other aggregation functions (e.g., `sum`, `average`, etc.)\r\n * as listed in {@link AggregationTypes}.\r\n *\r\n * @example\r\n * Calculate the total cost across all items in a category from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.aggregate(DM.Commerce.Cost, 'sum'),\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param aggregationType - Aggregation type. See {@link AggregationTypes}\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const aggregate = withComposeCodeForMeasure((attribute, aggregationType, name, format) => new DimensionalBaseMeasure(name !== null && name !== void 0 ? name : `${aggregationType.toString()} ${attribute.name}`, attribute, aggregationType, format), 'aggregate');\r\n/**\r\n * Creates a calculated measure from a numeric value.\r\n *\r\n * @example\r\n * Creates a calculated measure from a numeric value.\r\n * ```ts\r\n * measureFactory.constant(42)\r\n * ```\r\n * @param value - Value to be returned as a measure\r\n * @returns A calculated measure instance\r\n * @group Arithmetic\r\n */\r\nexport const constant = withComposeCodeForMeasure((value) => new DimensionalCalculatedMeasure(`${value}`, `${value}`, {}), 'constant');\r\n/**\r\n * Creates a sum aggregation measure over the given attribute.\r\n *\r\n * To create a running sum, use {@link runningSum}.\r\n *\r\n * @example\r\n * Calculate the total cost across all items in a category from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.sum(DM.Commerce.Cost)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const sum = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.Sum, name, format), 'sum');\r\n/**\r\n * Creates an average aggregation measure over the given attribute.\r\n *\r\n * Both `average()` and `avg()` can be used interchangeably.\r\n *\r\n * @example\r\n * Calculate the average cost across all items in a category from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.average(DM.Commerce.Cost)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const average = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.Average, name, format), 'average');\r\n/**\r\n * {@inheritDoc average}\r\n *\r\n * @example\r\n * Calculate the average cost across all items in a category from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.avg(DM.Commerce.Cost)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const avg = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.Average, name, format), 'avg');\r\n/**\r\n * Creates a min aggregation measure over the given attribute.\r\n *\r\n * @example\r\n * Calculate the minimum cost across all items in a category from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.min(DM.Commerce.Cost)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const min = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.Min, name, format), 'min');\r\n/**\r\n * Creates a max aggregation measure over the given attribute.\r\n *\r\n * @example\r\n * Calculate the maximum cost across all items in a category from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.max(DM.Commerce.Cost)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const max = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.Max, name, format), 'max');\r\n/**\r\n * Creates a median aggregation measure over the given attribute.\r\n *\r\n * @example\r\n * Calculate the median cost across all items in a category from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.median(DM.Commerce.Cost)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const median = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.Median, name, format), 'median');\r\n/**\r\n * Creates a count aggregation measure over the given attribute.\r\n *\r\n * To count distinct values in the given attribute, use {@link countDistinct}.\r\n *\r\n * @example\r\n * Counts the number of Commerce items from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.count(DM.Commerce.BrandID)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const count = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.Count, name, format), 'count');\r\n/**\r\n * Creates a count distinct aggregation measure over the given attribute.\r\n *\r\n * To count all values in the given attribute, use {@link count}.\r\n *\r\n * @example\r\n * Calculate the number of distinct brands from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.countDistinct(DM.Brand.BrandID)\r\n * ```\r\n * @param attribute - Attribute to aggregate\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A measure instance\r\n * @group Aggregation\r\n */\r\nexport const countDistinct = withComposeCodeForMeasure((attribute, name, format) => aggregate(attribute, AggregationTypes.CountDistinct, name, format), 'countDistinct');\r\n/**\r\n * Creates a measured value with the given measure and set of filters.\r\n *\r\n * A measured value only includes values from items that match the provided filters.\r\n *\r\n * For example you can use a measured value to get a total cost for all items where the cost is greater than 100.\r\n *\r\n * Note that the filters on the measured value override the filters on the query, chart, or table the\r\n * measured value is used in.\r\n *\r\n * @example\r\n * Calculate the total cost across all items in a category from the Sample Ecommerce data model,\r\n * where the cost is greater than 100. Additional filtering on the cost will not affect this measure.\r\n * ```ts\r\n * measureFactory.measuredValue(\r\n *   measureFactory.sum(DM.Commerce.Cost),\r\n *   [filterFactory.greaterThan(DM.Commerce.Cost, 100)],\r\n *   'Cost Greater Than 100'\r\n * ),\r\n * ```\r\n * @param measure - Measure to filter\r\n * @param filters - Filters to apply to the measure\r\n * @param name - Optional name for the new measure\r\n * @param format - Optional numeric formatting to apply using a Numeral.js format string. Can only be used for explicit queries. Cannot be used in charts, tables, etc.\r\n * @returns A calculated measure instance\r\n * @group Advanced Analytics\r\n */\r\nexport const measuredValue = withComposeCodeForMeasure((measure, filters, name, format) => {\r\n    const builder = [];\r\n    const context = {};\r\n    builder.push('(');\r\n    addToFormula(builder, context, measure);\r\n    filters.forEach((f) => {\r\n        builder.push(',');\r\n        addToFormula(builder, context, f);\r\n    });\r\n    builder.push(')');\r\n    const exp = builder.join('');\r\n    return new DimensionalCalculatedMeasure(name !== null && name !== void 0 ? name : exp, exp, context, format);\r\n}, 'measuredValue');\r\n/**\r\n * Creates a calculated measure by adding two given numbers or measures.\r\n *\r\n * @example\r\n * ```ts\r\n * const measure1 = measureFactory.sum(DM.Dimension.Attribute1);\r\n * const measure2 = measureFactory.sum(DM.Dimension.Attribute2);\r\n * const measureSum = measureFactory.add(measure1, measure2);\r\n * ```\r\n * @param value1 - First value\r\n * @param value2 - Second value\r\n * @param name - Optional name for the new measure\r\n * @param withParentheses - Optional boolean flag whether to wrap the arithmetic operation with parentheses\r\n * @returns A calculated measure instance\r\n * @group Arithmetic\r\n */\r\nexport const add = withComposeCodeForMeasure((value1, value2, name, withParentheses) => arithmetic(value1, '+', value2, name, withParentheses), 'add');\r\n/**\r\n * Creates a calculated measure by subtracting two given numbers or measures. Subtracts `value2` from `value1`.\r\n *\r\n * @example\r\n * ```ts\r\n * const measure1 = measureFactory.sum(DM.Dimension.Attribute1);\r\n * const measure2 = measureFactory.sum(DM.Dimension.Attribute2);\r\n * const measureDifference = measureFactory.subtract(measure1, measure2);\r\n * ```\r\n * @param value1 - First value\r\n * @param value2 - Second value\r\n * @param name - Optional name for the new measure\r\n * @param withParentheses - Optional boolean flag whether to wrap the arithmetic operation with parentheses\r\n * @returns A calculated measure instance\r\n * @group Arithmetic\r\n */\r\nexport const subtract = withComposeCodeForMeasure((value1, value2, name, withParentheses) => arithmetic(value1, '-', value2, name, withParentheses), 'subtract');\r\n/**\r\n * Creates a calculated measure by multiplying two given numbers or measures.\r\n *\r\n * @example\r\n * ```ts\r\n * const measure1 = measureFactory.sum(DM.Dimension.Attribute1);\r\n * const measure2 = measureFactory.sum(DM.Dimension.Attribute2);\r\n * const measureProduct = measureFactory.multiply(measure1, measure2);\r\n * ```\r\n * @param value1 - First value\r\n * @param value2 - Second value\r\n * @param name - Optional name for the new measure\r\n * @param withParentheses - Optional boolean flag whether to wrap the arithmetic operation with parentheses\r\n * @returns A calculated measure instance\r\n * @group Arithmetic\r\n */\r\nexport const multiply = withComposeCodeForMeasure((value1, value2, name, withParentheses) => arithmetic(value1, '*', value2, name, withParentheses), 'multiply');\r\n/**\r\n * Creates a calculated measure by dividing two given numbers or measures. Divides `value1` by `value2`.\r\n *\r\n * @example\r\n * ```ts\r\n * const measure1 = measureFactory.sum(DM.Dimension.Attribute1);\r\n * const measure2 = measureFactory.sum(DM.Dimension.Attribute2);\r\n * const measureQuotient = measureFactory.divide(measure1, measure2);\r\n * ```\r\n * @param value1 - First value\r\n * @param value2 - Second value\r\n * @param name - Optional name for the new measure\r\n * @param withParentheses - Optional boolean flag whether to wrap the arithmetic operation with parentheses\r\n * @returns A calculated measure instance\r\n * @group Arithmetic\r\n */\r\nexport const divide = withComposeCodeForMeasure((value1, value2, name, withParentheses) => arithmetic(value1, '/', value2, name, withParentheses), 'divide');\r\n/**\r\n * Creates a calculated measure that calculates the running total starting from the beginning\r\n * of the year up to the current day, week, month, or quarter.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the running total of total cost from the Sample Ecommerce data model, starting from the\r\n * beginning of the year up to the current day, week, month, or quarter.\r\n * ```ts\r\n * measureFactory.yearToDateSum(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply the YTD Sum to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const yearToDateSum = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : 'YTD ' + measure.name, 'YTDSum'), 'yearToDateSum');\r\n/**\r\n * Creates a calculated measure that calculates the running total starting from the beginning\r\n * of the quarter up to the current day, week, or month.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the running total of total cost from the Sample Ecommerce data model, starting from the\r\n * beginning of the quarter up to the current day, week, or month.\r\n * ```ts\r\n * measureFactory.quarterToDateSum(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply the QTD Sum to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const quarterToDateSum = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : 'QTD ' + name, 'QTDSum'), 'quarterToDateSum');\r\n/**\r\n * Creates a calculated measure that calculates the running total starting from the beginning\r\n * of the month up to the current day or week.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the running total of total cost from the Sample Ecommerce data model, starting from the\r\n * beginning of the month up to the current day or week.\r\n * ```ts\r\n * measureFactory.monthToDateSum(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply the MTD Sum to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const monthToDateSum = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : 'MTD ' + measure.name, 'MTDSum'), 'monthToDateSum');\r\n/**\r\n * Creates a calculated measure that calculates the running total starting from the beginning\r\n * of the week up to the current day.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the running total of total cost from the Sample Ecommerce data model, starting from the\r\n * beginning of the week up to the current day.\r\n * ```ts\r\n * measureFactory.weekToDateSum(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply the WTD Sum to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const weekToDateSum = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : 'MTD ' + measure.name, 'WTDSum'), 'weekToDateSum');\r\n/**\r\n * Creates a calculated measure that calculates the running total of a given measure.\r\n *\r\n * The running sum is calculated using the current sort order of the query it's used in.\r\n *\r\n * @example\r\n * Calculate the running sum of the total cost from the Sample Ecommerce data model across all categories.\r\n * ```ts\r\n * measureFactory.runningSum(measureFactory.sum(DM.Commerce.Cost)),\r\n * ```\r\n *\r\n * Running sum values from the Sample Ecommerce data model when categorizing by age range.\r\n * | AgeRange | Cost | Running Cost |\r\n * | --- | --- | --- |\r\n * | 0-18 | 4.32M | 4.32M |\r\n * | 19-24 | 8.66M | 12.98M |\r\n * | 25-34 | 21.19M | 34.16M |\r\n * | 35-44 | 23.64M | 57.8M |\r\n * | 45-54 | 20.39M | 78.19M |\r\n * | 55-64 | 11.82M | 90.01M |\r\n * | 65+ | 17.26M | 107.27M |\r\n * @param measure - Measure to apply the running sum to\r\n * @param _continuous - Boolean flag whether to accumulate the sum continuously\r\n * when there are two or more dimensions. The default value is false.\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const runningSum = withComposeCodeForMeasure((measure, _continuous, name) => measureFunction(measure, name !== null && name !== void 0 ? name : 'Running Sum ' + measure.name, 'RSum'), 'runningSum');\r\n/**\r\n * Creates a calculated measure that calculates growth over a period of time.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * Growth is calculated using the following formula: `(currentPeriod – previousPeriod) / previousPeriod`.\r\n *\r\n * For example, if this period the value is 12 and the previous period's value was 10, the growth for\r\n * this period is 20%, returned as '0.2' (calculation: `(12 – 10) / 10 = 0.2`).\r\n *\r\n * If the previous period's value is greater than the current period, the growth will be negative.\r\n *\r\n * For example, if this period the value is 80, and the previous period's was 100, the growth for\r\n * this period is -20%, returned as `-0.2` (calculation: `(80 – 100) / 100 = -0.2`).\r\n *\r\n * @example\r\n * Calculate the growth in total cost this period in comparison to the previous period from the\r\n * Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.growth(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply growth to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const growth = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Growth', 'growth'), 'growth');\r\n/**\r\n * Creates a calculated measure that calculates growth rate over a period of time.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * Growth rate is calculated using the following formula: `currentPeriod / previousPeriod`.\r\n *\r\n * For example, if this period the value is 12 and the previous period's value was 10, the growth rate for\r\n * this period is 120%, returned as '1.2' (calculation: `12 / 10 = 1.2`).\r\n *\r\n * If the previous period's value is greater than the current period, the growth rate will be less than one.\r\n *\r\n * For example, if this period the value is 80, and the previous period's was 100, the growth for\r\n * this period is 80%, returned as `0.8` (calculation: `80 / 100 = .8`).\r\n *\r\n * @example\r\n * Calculate the growth rate in total cost this period in comparison to the previous period from the\r\n * Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.growthRate(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply the Growth rate\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const growthRate = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Growth', 'growthrate'), 'growthRate');\r\n/**\r\n * Creates a calculated measure that calculates the growth from the previous week to the current week.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * Growth is calculated using the following formula: `(currentWeek – previousWeek) / previousWeek`.\r\n *\r\n * For example, if this week the value is 12 and the previous week's value was 10, the growth for\r\n * this week is 20%, returned as '0.2' (calculation: `(12 – 10) / 10 = 0.2`).\r\n *\r\n * If the previous week's value is greater than the current week, the growth will be negative.\r\n *\r\n * For example, if this week the value is 80, and the previous week's was 100, the growth for\r\n * this week is -20%, returned as `-0.2` (calculation: `(80 – 100) / 100 = -0.2`).\r\n *\r\n * @example\r\n * Calculate the growth in total cost this week in comparison to the previous week from the Sample\r\n * Ecommerce data model.\r\n * ```ts\r\n * measureFactory.growthPastWeek(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply growth to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const growthPastWeek = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Growth', 'growthpastweek'), 'growthPastWeek');\r\n/**\r\n * Creates a calculated measure that calculates the growth from the previous month to the current month.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * Growth is calculated using the following formula: `(currentMonth – previousMonth) / previousMonth`.\r\n *\r\n * For example, if this month the value is 12 and the previous month's value was 10, the growth for\r\n * this month is 20%, returned as '0.2' (calculation: `(12 – 10) / 10 = 0.2`).\r\n *\r\n * If the previous month's value is greater than the current month, the growth will be negative.\r\n *\r\n * For example, if this month the value is 80, and the previous month's was 100, the growth for\r\n * this month is -20%, returned as `-0.2` (calculation: `(80 – 100) / 100 = -0.2`).\r\n *\r\n * @example\r\n * Calculate the growth in total cost this month in comparison to the previous month from the Sample\r\n * Ecommerce data model.\r\n * ```ts\r\n * measureFactory.growthPastMonth(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply growth to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const growthPastMonth = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Growth', 'growthpastmonth'), 'growthPastMonth');\r\n/**\r\n * Creates a calculated measure that calculates the growth from the previous quarter to the current quarter.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * Growth is calculated using the following formula: `(currentQuarter – previousQuarter) / previousQuarter`.\r\n *\r\n * For example, if this quarter the value is 12 and the previous quarter's value was 10, the growth for\r\n * this quarter is 20%, returned as '0.2' (calculation: `(12 – 10) / 10 = 0.2`).\r\n *\r\n * If the previous quarter's value is greater than the current quarter, the growth will be negative.\r\n *\r\n * For example, if this quarter the value is 80, and the previous quarter's was 100, the growth for\r\n * this quarter is -20%, returned as `-0.2` (calculation: `(80 – 100) / 100 = -0.2`).\r\n *\r\n * @example\r\n * Calculate the growth in total cost this quarter in comparison to the previous quarter from the\r\n * Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.growthPastQuarter(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply growth to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const growthPastQuarter = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Growth', 'growthpastquarter'), 'growthPastQuarter');\r\n/**\r\n * Creates a calculated measure that calculates the growth from the previous year to the current year.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * Growth is calculated using the following formula: `(currentYear – previousYear) / previousYear`.\r\n *\r\n * For example, if this year the value is 12 and the previous year's value was 10, the growth for\r\n * this year is 20%, returned as '0.2' (calculation: `(12 – 10) / 10 = 0.2`).\r\n *\r\n * If the previous year's value is greater than the current year, the growth will be negative.\r\n *\r\n * For example, if this year the value is 80, and the previous year's was 100, the growth for\r\n * this year is -20%, returned as `-0.2` (calculation: `(80 – 100) / 100 = -0.2`).\r\n *\r\n * @example\r\n * Calculate the growth in total cost this year in comparison to the previous year from the Sample\r\n * Ecommerce data model.\r\n * ```ts\r\n * measureFactory.growthPastYear(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply growth to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const growthPastYear = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Growth', 'growthpastyear'), 'growthPastYear');\r\n/**\r\n * Creates a calculated measure that calculates the difference between this period's data\r\n * and the data from the previous period for the given measure.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the difference between this period's total cost and the previous period's total cost\r\n * from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.difference(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply difference to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const difference = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Difference', 'diffpastperiod'), 'difference');\r\n/**\r\n * Creates a calculated measure that calculates the difference between this week's data\r\n * and the data from the previous week for the given measure.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the difference between this week's total cost and the previous week's total cost from\r\n * the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.diffPastWeek(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply difference to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const diffPastWeek = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Difference', 'diffpastweek'), 'diffPastWeek');\r\n/**\r\n * Creates a calculated measure that calculates the difference between this month's data\r\n * and the data from the previous month for the given measure.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the difference between this month's total cost and the previous month's total cost from\r\n * the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.diffPastMonth(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply difference to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const diffPastMonth = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Difference', 'diffpastmonth'), 'diffPastMonth');\r\n/**\r\n * Creates a calculated measure that calculates the difference between this quarter's data\r\n * and the data from the previous quarter for the given measure.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the difference between this quarter's total cost and the previous quarter's total cost\r\n * from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.diffPastQuarter(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply difference to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const diffPastQuarter = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Difference', 'diffpastquarter'), 'diffPastQuarter');\r\n/**\r\n * Creates a calculated measure that calculates the difference between this year's data\r\n * and the data from the previous year for the given measure.\r\n *\r\n * The date dimension will be dynamically taken from the query that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate the difference between this year's total cost and the previous year's total cost from\r\n * the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.diffPastYear(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply difference to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const diffPastYear = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Difference', 'diffpastyear'), 'diffPastYear');\r\n/**\r\n * Creates a calculated measure that calculates the value for the previous day.\r\n *\r\n * @example\r\n * Calculate total cost for the previous day from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.pastDay(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply past value to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const pastDay = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Past Day', 'pastday'), 'pastDay');\r\n/**\r\n * Creates a calculated measure that calculates the value for the same day in the previous week.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate total cost for the corresponding day one week ago from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.pastWeek(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply past value to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const pastWeek = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Past Week', 'pastweek'), 'pastWeek');\r\n/**\r\n * Creates a calculated measure that calculates the value for the same day or week in the previous month.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate total cost for the corresponding day or week one month ago from the Sample Ecommerce\r\n * data model.\r\n * ```ts\r\n * measureFactory.pastMonth(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply past value to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const pastMonth = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Past Month', 'pastmonth'), 'pastMonth');\r\n/**\r\n * Creates a calculated measure that calculates the value for the same day, week, or month in the previous quarter.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate total cost for the corresponding day, week, or month one quarter ago from the Sample\r\n * Ecommerce data model.\r\n * ```ts\r\n * measureFactory.pastQuarter(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply past value to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const pastQuarter = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Past Quarter', 'pastquarter'), 'pastQuarter');\r\n/**\r\n * Creates a calculated measure that calculates the value for the same day, week, month, or quarter in the previous year.\r\n *\r\n * The time resolution is determined by the minimum date level of the date dimension in the query\r\n * that uses the returned measure.\r\n *\r\n * @example\r\n * Calculate total cost for the corresponding day, week, month, or quarter one year ago from the\r\n * Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.pastYear(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n * @param measure - Measure to apply past value to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Time-based\r\n */\r\nexport const pastYear = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + '  Past Year', 'pastyear'), 'pastYear');\r\n/**\r\n * Creates a calculated contribution measure.\r\n *\r\n * A contribution measure calculates the contribution, in percentage, of a measure towards the total.\r\n * Percentages are expressed as a number between 0 and 1 (e.g. 42% is `0.42`).\r\n *\r\n * For example, using the Sample Ecommerce data model you can retrieve the total cost of products\r\n * categorized by age range. Using a contribution measure you can calculate how much each age range's\r\n * total cost contributes to the total cost across all age ranges. So, the total cost for the 35-44\r\n * age range is 23.64M, which is 22% of the 107.27M of all age ranges together. Therefore, the\r\n * contribution of the 35-44 age range is `.22`.\r\n *\r\n * @example\r\n * Calculates the percentage of the total cost across all categories for items in a category from the\r\n * Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.contribution(measureFactory.sum(DM.Commerce.Cost))\r\n * ```\r\n *\r\n * Contribution values from the Sample Ecommerce data model when categorizing by age range.\r\n * | AgeRange | Cost | Contribution |\r\n * | --- | --- | --- |\r\n * | 0-18 | 4.32M | 0.04 |\r\n * | 19-24 | 8.66M | 0.08 |\r\n * | 25-34 | 21.19M | 0.2 |\r\n * | 35-44 | 23.64M | 0.22 |\r\n * | 45-54 | 20.39M | 0.19 |\r\n * | 55-64 | 11.82M | 0.11 |\r\n * | 65+ | 17.26M | 0.16 |\r\n * @param measure - Measure to apply the Contribution logic to\r\n * @param name - Name for the new measure\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const contribution = withComposeCodeForMeasure((measure, name) => measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + ' Contribution', 'contribution'), 'contribution');\r\n/**\r\n * Creates a calculated measure that computes a specified trend type for a given measure.\r\n *\r\n * The trend types include linear (the default), logarithmic, advanced smoothing, and local estimates.\r\n * You can also opt to automatically identify and ignore anomalous values in the series.\r\n *\r\n * Trend requires a Sisense instance version of L2023.6.0 or greater.\r\n *\r\n * @example\r\n * Calculate the trend in total cost from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.trend(\r\n *   measureFactory.sum(DM.Commerce.Cost),\r\n *   'Total Cost Trend',\r\n *   {\r\n *     modelType: 'advancedSmoothing',\r\n *     ignoreAnomalies: true,\r\n *   }\r\n * )\r\n * ```\r\n * @param measure - Measure to apply the trend logic to\r\n * @param name - Name for the new measure\r\n * @param options - Trend options\r\n * @returns A calculated measure instance\r\n * @group Advanced Analytics\r\n */\r\nexport const trend = withComposeCodeForMeasure((measure, name, options) => {\r\n    let params;\r\n    const adjustValues = (value) => value.replace('advancedSmoothing', 'smooth').replace('localEstimates', 'local');\r\n    if (options) {\r\n        // make a comma separated name=value string based on options\r\n        params = Object.entries(options)\r\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\r\n            .map((e) => adjustValues(`\"${e[0]}=${e[1]}\"`))\r\n            .join(',');\r\n    }\r\n    return measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + ' Trend', 'trend', params);\r\n}, 'trend');\r\n/**\r\n * Creates a calculated measure that generates a forecast based on a specified measure employing\r\n * advanced autoML techniques.\r\n *\r\n * This function offers flexible options allowing you to:\r\n * + Let the function auto-select the best statistical model or explicitly choose a preferred model\r\n * + Control the time period used for training the model\r\n * + Set additional options to improve forecast accuracy by supplying expected lower and upper limits.\r\n *\r\n * In addition to the forecast, upper and lower confidence intervals are returned\r\n * with the name of the new measure and a suffix of _upper and _lower\r\n * respectively.\r\n *\r\n * Forecast requires a Sisense instance version of L2023.6.0 or greater.\r\n *\r\n * @example\r\n * Calculate a forecast for total cost from the Sample Ecommerce data model from the Sample\r\n * Ecommerce data model.\r\n * ```ts\r\n * measureFactory.forecast(\r\n *   measureFactory.sum(DM.Commerce.Cost),\r\n *   'Total Cost Forecast',\r\n *   {\r\n *     modelType: 'prophet',\r\n *     roundToInt: true,\r\n *   }\r\n * )\r\n * ```\r\n * @param measure - Measure to apply the forecast logic to\r\n * @param name - Name for the new measure\r\n * @param options - Forecast options\r\n * @returns A calculated measure instance\r\n * @group Advanced Analytics\r\n */\r\nexport const forecast = withComposeCodeForMeasure((measure, name, options) => {\r\n    let params;\r\n    if (options) {\r\n        // create ISO string values for any Date objects\r\n        const adjustedOptions = Object.assign({ forecastHorizon: 3 }, options);\r\n        if (adjustedOptions.startDate) {\r\n            const startDate = new Date(adjustedOptions.startDate);\r\n            adjustedOptions.startDate = startDate.toISOString().replace(/.\\d+Z$/g, '');\r\n        }\r\n        if (adjustedOptions.endDate) {\r\n            const endDate = new Date(adjustedOptions.endDate);\r\n            adjustedOptions.endDate = endDate.toISOString().replace(/.\\d+Z$/g, '');\r\n        }\r\n        // make a comma separated name=value string based on options\r\n        params = Object.entries(adjustedOptions)\r\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\r\n            .map((e) => `\"${e[0]}=${e[1]}\"`)\r\n            .join(',');\r\n    }\r\n    else {\r\n        params = '\"forecastHorizon=3\"';\r\n    }\r\n    return measureFunction(measure, name !== null && name !== void 0 ? name : measure.name + ' Forecast', 'forecast', params);\r\n}, 'forecast');\r\n/**\r\n * Creates a calculated measure that calculates the rank of a value in a list of values.\r\n *\r\n * This function includes options that allow you do customize the ranking order and how to handle\r\n * equally ranked items.\r\n *\r\n * The order options are:\r\n * + `'DESC'` (default): Descending, meaning the largest number is ranked first.\r\n * + `'ASC'`: Ascending, meaning the smallest number is ranked first.\r\n *\r\n * The rank type options are:\r\n * + `'1224'`: Standard competition, meaning items that rank equally receive the same ranking number,\r\n *   and then a gap is left after the equally ranked items in the ranking numbers.\r\n * + `'1334'`: Modified competition ranking, meaning items that rank equally receive the same ranking number,\r\n *   and a gap is left before the equally ranked items in the ranking numbers.\r\n * + `'1223'`: Dense ranking, meaning items that rank equally receive the same ranking number,\r\n *   and the next items receive the immediately following ranking number.\r\n * + `'1234'`: Ordinal ranking, meaning all items receive distinct ordinal numbers,\r\n *   including items that rank equally. The assignment of distinct ordinal numbers for equal-ranking items is arbitrary.\r\n *\r\n * @example\r\n * Calculate the rank of the total cost per category, sorted with the smallest cost ranked first,\r\n * and ranking ties are handled using the ordinal ranking type from the Sample Ecommerce data model.\r\n * ```ts\r\n * measureFactory.rank(\r\n *   measureFactory.sum(DM.Commerce.Cost),\r\n *   'Cost Rank',\r\n *   measureFactory.RankingSortTypes.Ascending,\r\n *   measureFactory.RankingTypes.Ordinal\r\n * )\r\n * ```\r\n *\r\n * Ranking values from the Sample Ecommerce data model when categorizing by age range using the above ranking.\r\n * | AgeRange | Cost | Cost Rank |\r\n * | --- | --- | --- |\r\n * | 0-18 | 4.32M | 1 |\r\n * | 19-24 | 8.66M | 2 |\r\n * | 25-34 | 21.19M | 6 |\r\n * | 35-44 | 23.64M | 7 |\r\n * | 45-54 | 20.39M | 5 |\r\n * | 55-64 | 11.82M | 3 |\r\n * | 65+ | 17.26M | 4 |\r\n * @param measure - Measure to apply the ranking logic to\r\n * @param name - Name for the new measure\r\n * @param sort - Sorting for ranking. By default sort order is descending, where the largest number is ranked first.\r\n * @param rankType - How to handle equally ranked items. By default the type is standard competition ranking.\r\n * @param groupBy - Rank partition attributes\r\n * @returns A calculated measure instance\r\n * @group Statistics\r\n */\r\nexport const rank = withComposeCodeForMeasure((measure, name, sort = RankingSortTypes.Descending, rankType = RankingTypes.StandardCompetition, groupBy = []) => {\r\n    const builder = [];\r\n    const context = {};\r\n    builder.push('rank(');\r\n    addToFormula(builder, context, measure);\r\n    builder.push(`,${sort},${rankType}`);\r\n    groupBy.forEach((groupByAttr) => {\r\n        builder.push(',');\r\n        addToFormula(builder, context, groupByAttr);\r\n    });\r\n    builder.push(')');\r\n    const exp = builder.join('');\r\n    // default name\r\n    if (!name) {\r\n        name = `${measure.name} rank`;\r\n    }\r\n    return new DimensionalCalculatedMeasure(name, exp, context);\r\n}, 'rank');\r\n//# sourceMappingURL=factory.js.map","/* eslint-disable max-params */\r\n/* eslint-disable no-underscore-dangle */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/* eslint-disable @typescript-eslint/no-unsafe-return */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\r\nimport { TranslatableError } from '../../translation/translatable-error.js';\r\nimport { createAttribute, DimensionalAttribute } from '../attributes.js';\r\nimport { DimensionalElement } from '../base.js';\r\nimport { create } from '../factory.js';\r\nimport { AggregationTypes, MetadataTypes, Sort, } from '../types.js';\r\nimport * as m from './factory.js';\r\n/**\r\n * @internal\r\n */\r\nexport class AbstractMeasure extends DimensionalElement {\r\n    constructor(name, type, format, desc, sort, dataSource, composeCode) {\r\n        super(name, type, desc, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'AbstractMeasure';\r\n        this._sort = Sort.None;\r\n        this._format = '#,#.00';\r\n        this._format = format;\r\n        this._sort = sort || Sort.None;\r\n    }\r\n    /**\r\n     * Gets the sort definition of this instance\r\n     *\r\n     * @returns The Sort definition of this instance\r\n     */\r\n    getSort() {\r\n        return this._sort;\r\n    }\r\n    /**\r\n     * The string formatting of this instance\r\n     *\r\n     * @returns string formatting\r\n     */\r\n    getFormat() {\r\n        return this._format;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        if (this.getFormat() !== undefined) {\r\n            result.format = this.getFormat();\r\n        }\r\n        if (this.getSort() !== undefined) {\r\n            result.sort = this.getSort();\r\n        }\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * Stands for a Base measure - Aggregation over an Attribute\r\n *\r\n * @internal\r\n */\r\nexport class DimensionalBaseMeasure extends AbstractMeasure {\r\n    constructor(name, attribute, agg, format, desc, sort, dataSource, composeCode) {\r\n        super(name, MetadataTypes.BaseMeasure, format, desc, sort, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalBaseMeasure';\r\n        this.attribute = attribute;\r\n        this.aggregation = agg;\r\n    }\r\n    static aggregationFromJAQL(agg) {\r\n        switch (agg) {\r\n            case 'sum':\r\n                return AggregationTypes.Sum;\r\n            case 'avg':\r\n                return AggregationTypes.Average;\r\n            case 'min':\r\n                return AggregationTypes.Min;\r\n            case 'max':\r\n                return AggregationTypes.Max;\r\n            case 'countduplicates':\r\n                return AggregationTypes.Count;\r\n            case 'median':\r\n                return AggregationTypes.Median;\r\n            case 'count':\r\n                return AggregationTypes.CountDistinct;\r\n            case 'var':\r\n                return AggregationTypes.Variance;\r\n            case 'stdev':\r\n                return AggregationTypes.StandardDeviation;\r\n        }\r\n        return AggregationTypes.Sum;\r\n    }\r\n    static aggregationToJAQL(agg) {\r\n        switch (agg) {\r\n            case AggregationTypes.Sum:\r\n                return 'sum';\r\n            case AggregationTypes.Average:\r\n                return 'avg';\r\n            case AggregationTypes.Min:\r\n                return 'min';\r\n            case AggregationTypes.Max:\r\n                return 'max';\r\n            case AggregationTypes.Count:\r\n                return 'countduplicates';\r\n            case AggregationTypes.CountDistinct:\r\n                return 'count';\r\n            case AggregationTypes.Median:\r\n                return 'median';\r\n            case AggregationTypes.Variance:\r\n                return 'var';\r\n            case AggregationTypes.StandardDeviation:\r\n                return 'stdev';\r\n        }\r\n        return AggregationTypes.Sum;\r\n    }\r\n    /**\r\n     * Gets a sorted {@link Measure} with the given definition\r\n     *\r\n     * @param sort - Sort definition\r\n     * @returns An instance representing the sorted {@link Measure} of this instance\r\n     */\r\n    sort(sort) {\r\n        return new DimensionalBaseMeasure(this.name, this.attribute, this.aggregation, this._format, this.description, sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * Gets a formatted {@link Measure} with the given definition\r\n     *\r\n     * Input string is in Numeral format - @see http://numeraljs.com/\r\n     *\r\n     * @param format - Format string\r\n     * @returns An instance representing the formatted {@link Measure} of this instance\r\n     */\r\n    format(format) {\r\n        return new DimensionalBaseMeasure(this.name, this.attribute, this.aggregation, format, this.description, this._sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return `${this.attribute.expression}_${this.aggregation}`;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.aggregation = this.aggregation;\r\n        result.attribute = this.attribute.serialize();\r\n        return result;\r\n    }\r\n    jaql(nested) {\r\n        const attributeJaql = this.attribute.jaql(true);\r\n        const r = {\r\n            jaql: Object.assign(Object.assign({}, attributeJaql), { title: this.name, agg: DimensionalBaseMeasure.aggregationToJAQL(this.aggregation) }),\r\n        };\r\n        if (this._format) {\r\n            r.format = { number: this._format };\r\n        }\r\n        if (this._sort != Sort.None) {\r\n            r.jaql.sort = this._sort == Sort.Ascending ? 'asc' : 'desc';\r\n        }\r\n        return nested === true ? r.jaql : r;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const isDimensionalBaseMeasure = (v) => {\r\n    return Boolean(v && v.__serializable === 'DimensionalBaseMeasure');\r\n};\r\n/**\r\n * Stands for a Calculated Measure\r\n *\r\n * @see {https://developer.sisense.com/guides/querying/useJaql/#step-7-adding-a-formula}\r\n * @internal\r\n */\r\nexport class DimensionalCalculatedMeasure extends AbstractMeasure {\r\n    constructor(name, expression, context, format, desc, sort, dataSource, composeCode) {\r\n        super(name, MetadataTypes.CalculatedMeasure, format, desc, sort, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalCalculatedMeasure';\r\n        this.expression = expression;\r\n        this.context = context;\r\n    }\r\n    /**\r\n     * Gets a sorted {@link Measure} with the given definition\r\n     *\r\n     * @param sort - Sort definition\r\n     * @returns An instance representing the sorted {@link Measure} of this instance\r\n     */\r\n    sort(sort) {\r\n        return new DimensionalCalculatedMeasure(this.name, this.expression, this.context, this._format, this.description, sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * Gets a formatted {@link Measure} with the given definition\r\n     *\r\n     * Input string is in Numeral format - @see http://numeraljs.com/\r\n     *\r\n     * @param format - Format string\r\n     * @returns An instance representing the formatted {@link Measure} of this instance\r\n     */\r\n    format(format) {\r\n        return new DimensionalCalculatedMeasure(this.name, this.expression, this.context, format, this.description, this._sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return this.expression;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.expression = this.expression;\r\n        result.context = Object.fromEntries(Object.entries(this.context).map(([key, value]) => [\r\n            key,\r\n            value.serialize ? value.serialize() : value,\r\n        ]));\r\n        return result;\r\n    }\r\n    jaql(nested) {\r\n        const r = {\r\n            jaql: {\r\n                title: this.name,\r\n                formula: this.expression,\r\n            },\r\n        };\r\n        const context = {};\r\n        const keys = Object.getOwnPropertyNames(this.context);\r\n        keys.forEach((k) => (context[k] = this.context[k].jaql(true)));\r\n        r.jaql.context = context;\r\n        if (this._format) {\r\n            r.format = { number: this._format };\r\n        }\r\n        if (this._sort != Sort.None) {\r\n            r.jaql.sort = this._sort == Sort.Ascending ? 'asc' : 'desc';\r\n        }\r\n        return nested === true ? r.jaql : r;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const isDimensionalCalculatedMeasure = (v) => {\r\n    return Boolean(v && v.__serializable === 'DimensionalCalculatedMeasure');\r\n};\r\n/**\r\n * Stands for a Measure template - generator for different aggregation over Attribute\r\n *\r\n * @internal\r\n */\r\nexport class DimensionalMeasureTemplate extends AbstractMeasure {\r\n    constructor(name, attribute, format, desc, sort, dataSource, composeCode) {\r\n        super(name, MetadataTypes.MeasureTemplate, format, desc, sort, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalMeasureTemplate';\r\n        this.attribute = attribute;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return `${this.attribute.expression}_*`;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.attribute = this.attribute.serialize();\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets a sorted {@link MeasureTemplate} with the given definition\r\n     *\r\n     * @param sort - Sort definition\r\n     * @returns An instance representing the sorted {@link MeasureTemplate} of this instance\r\n     */\r\n    sort(sort) {\r\n        return new DimensionalMeasureTemplate(this.name, this.attribute, this._format, this.description, sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * Gets a formatted {@link Measure} with the given definition\r\n     *\r\n     * @param format - Format string\r\n     * @returns An instance representing the formatted {@link Measure} of this instance\r\n     */\r\n    format(format) {\r\n        return new DimensionalMeasureTemplate(this.name, this.attribute, format, this.description, this._sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * Gets the JAQL representation of this instance\r\n     *\r\n     * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element\r\n     */\r\n    jaql(nested) {\r\n        return this.sum(this._format).sort(this._sort).jaql(nested);\r\n    }\r\n    /**\r\n     * Gets an {@link Measure} defined with sum aggregation\r\n     *\r\n     * @param format - optional format to apply on the resulting {@link Measure}\r\n     */\r\n    sum(format) {\r\n        return m.sum(this.attribute, undefined, format).sort(this._sort);\r\n    }\r\n    /**\r\n     * Gets an {@link Measure} defined with average aggregation\r\n     *\r\n     * @param format - optional format to apply on the resulting {@link Measure}\r\n     */\r\n    average(format) {\r\n        return m.average(this.attribute, undefined, format).sort(this._sort);\r\n    }\r\n    /**\r\n     * Gets an {@link Measure} defined with median aggregation\r\n     *\r\n     * @param format - optional format to apply on the resulting {@link Measure}\r\n     */\r\n    median(format) {\r\n        return m.median(this.attribute, undefined, format).sort(this._sort);\r\n    }\r\n    /**\r\n     * Gets an {@link Measure} defined with min aggregation\r\n     *\r\n     * @param format - optional format to apply on the resulting {@link Measure}\r\n     */\r\n    min(format) {\r\n        return m.min(this.attribute, undefined, format).sort(this._sort);\r\n    }\r\n    /**\r\n     * Gets an {@link Measure} defined with max aggregation\r\n     *\r\n     * @param format - optional format to apply on the resulting {@link Measure}\r\n     */\r\n    max(format) {\r\n        return m.max(this.attribute, undefined, format).sort(this._sort);\r\n    }\r\n    /**\r\n     * Gets an {@link Measure} defined with count aggregation\r\n     *\r\n     * @param format - optional format to apply on the resulting {@link Measure}\r\n     */\r\n    count(format) {\r\n        return m.count(this.attribute, undefined, format).sort(this._sort);\r\n    }\r\n    /**\r\n     * Gets an {@link Measure} defined with count distinct aggregation\r\n     *\r\n     * @param format - optional format to apply on the resulting {@link Measure}\r\n     */\r\n    countDistinct(format) {\r\n        return m.countDistinct(this.attribute, undefined, format).sort(this._sort);\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const isDimensionalMeasureTemplate = (v) => {\r\n    return Boolean(v && v.__serializable === 'DimensionalMeasureTemplate');\r\n};\r\n/**\r\n * @param json - The JSON object to create a measure from\r\n * @internal\r\n */\r\nexport function createMeasure(json) {\r\n    var _a;\r\n    const name = json.name || json.title;\r\n    const desc = json.desc || json.description;\r\n    const format = json.format;\r\n    const sort = (_a = json.sort) !== null && _a !== void 0 ? _a : json.sort;\r\n    let att = undefined;\r\n    // legacy\r\n    const exp = json.dim || json.expression;\r\n    if (exp) {\r\n        att = new DimensionalAttribute(exp, exp, undefined, desc);\r\n    }\r\n    // official SDK\r\n    if (json.attribute) {\r\n        att = createAttribute(json.attribute);\r\n    }\r\n    if (MetadataTypes.isCalculatedMeasure(json)) {\r\n        if (json.context === undefined) {\r\n            throw new TranslatableError('errors.measure.dimensionalCalculatedMeasure.noContext');\r\n        }\r\n        const context = {};\r\n        Object.getOwnPropertyNames(json.context).forEach((pname) => {\r\n            context[pname] = create(json.context[pname]);\r\n        });\r\n        return new DimensionalCalculatedMeasure(name, json.expression || json.formula, context, format, desc, sort);\r\n    }\r\n    else if (MetadataTypes.isMeasureTemplate(json)) {\r\n        if (att === undefined) {\r\n            throw new TranslatableError('errors.measure.dimensionalBaseMeasure.noAttributeDimExpression');\r\n        }\r\n        return new DimensionalMeasureTemplate(name, att, format, desc, sort);\r\n    }\r\n    else if (MetadataTypes.isBaseMeasure(json)) {\r\n        if (att === undefined) {\r\n            throw new TranslatableError('errors.measure.dimensionalBaseMeasure.noAttributeDimExpression');\r\n        }\r\n        const agg = json.agg || json.aggregation;\r\n        if (!agg) {\r\n            throw new TranslatableError('errors.measure.dimensionalBaseMeasure.noAggAggregation');\r\n        }\r\n        return new DimensionalBaseMeasure(name, att, agg, format, desc, sort);\r\n    }\r\n    throw new TranslatableError('errors.measure.unsupportedType');\r\n}\r\n//# sourceMappingURL=measures.js.map","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import isEqual from 'lodash-es/isEqual.js';\r\nimport { guidFast } from '../../utils.js';\r\n/**\r\n * Returns a default configuration for a base filter.\r\n *\r\n * @internal\r\n */\r\nexport const getDefaultBaseFilterConfig = () => ({\r\n    guid: guidFast(13),\r\n    disabled: false,\r\n    locked: false,\r\n});\r\n/**\r\n * Returns a default configuration for a members filter.\r\n *\r\n * @internal\r\n */\r\nexport const getDefaultMembersFilterConfig = () => (Object.assign(Object.assign({}, getDefaultBaseFilterConfig()), { excludeMembers: false, enableMultiSelection: true, deactivatedMembers: [] }));\r\n/**\r\n * Checks whether the given configuration is a members filter configuration.\r\n *\r\n * @param config - The filter configuration.\r\n * @returns Whether the configuration is a members filter configuration.\r\n * @internal\r\n */\r\nexport function isMembersFilterConfig(config) {\r\n    return 'excludeMembers' in config;\r\n}\r\n/**\r\n * Simplifies the filter configuration by removing default values.\r\n *\r\n * @param config - The filter configuration.\r\n * @returns The simplified filter configuration.\r\n * @internal\r\n */\r\nexport const simplifyFilterConfig = (config) => {\r\n    const defaultConfig = isMembersFilterConfig(config)\r\n        ? getDefaultMembersFilterConfig()\r\n        : getDefaultBaseFilterConfig();\r\n    // Filter out properties that match their default values\r\n    return Object.fromEntries(Object.entries(config).filter(([key, value]) => !isEqual(value, defaultConfig[key])));\r\n};\r\n//# sourceMappingURL=filter-config-utils.js.map","/* eslint-disable max-lines */\r\nimport hash from 'hash-it';\r\nimport merge from 'lodash-es/merge.js';\r\nimport omit from 'lodash-es/omit.js';\r\nimport { TranslatableError } from '../../translation/translatable-error.js';\r\nimport { DimensionalElement } from '../base.js';\r\nimport { create } from '../factory.js';\r\nimport { isDimensionalBaseMeasure } from '../measures/measures.js';\r\nimport { DateLevels, MetadataTypes } from '../types.js';\r\nimport { getDefaultBaseFilterConfig, getDefaultMembersFilterConfig, } from './filter-config-utils.js';\r\n/**\r\n * Different text operators that can be used with text filters\r\n *\r\n * @internal\r\n */\r\nexport const TextOperators = {\r\n    Contains: 'contains',\r\n    StartsWith: 'startsWith',\r\n    EndsWith: 'endsWith',\r\n    Equals: 'equals',\r\n    DoesntEqual: 'doesntEqual',\r\n    DoesntStartWith: 'doesntStartWith',\r\n    DoesntContain: 'doesntContain',\r\n    DoesntEndWith: 'doesntEndWith',\r\n    Like: 'like',\r\n};\r\n/**\r\n * Different numeric operators that can be used with numeric filters\r\n */\r\nexport const NumericOperators = {\r\n    Equals: 'equals',\r\n    DoesntEqual: 'doesntEqual',\r\n    From: 'from',\r\n    FromNotEqual: 'fromNotEqual',\r\n    To: 'to',\r\n    ToNotEqual: 'toNotEqual',\r\n};\r\n/**\r\n * Different date operators that can be used with date filters\r\n *\r\n * @internal\r\n */\r\nexport const DateOperators = {\r\n    From: 'from',\r\n    To: 'to',\r\n    Last: 'last',\r\n    Next: 'next',\r\n    Anchor: 'Anchor',\r\n};\r\n/**\r\n * Different logical operators that can be used with logical filters\r\n *\r\n * @internal\r\n */\r\nexport const LogicalOperators = {\r\n    Union: 'or',\r\n    Intersection: 'and',\r\n    Exclude: 'exclude',\r\n};\r\n/**\r\n * Different ranking operators that can be used with ranking filter\r\n *\r\n * @internal\r\n */\r\nexport const RankingOperators = {\r\n    Top: 'top',\r\n    Bottom: 'bottom',\r\n};\r\n/**\r\n * Different filter types\r\n *\r\n * @internal\r\n */\r\nexport const FilterTypes = {\r\n    logicalAttribute: 'logicalAttribute',\r\n    members: 'members',\r\n    exclude: 'exclude',\r\n    measure: 'measure',\r\n    ranking: 'ranking',\r\n    text: 'text',\r\n    numeric: 'numeric',\r\n    dateRange: 'dateRange',\r\n    relativeDate: 'relativeDate',\r\n    cascading: 'cascading',\r\n    advanced: 'advanced',\r\n};\r\n// CLASSES\r\n/**\r\n * base implementation for filter classes\r\n *\r\n * @internal\r\n */\r\nclass AbstractFilter extends DimensionalElement {\r\n    constructor(att, filterType, config, composeCode) {\r\n        super('filter', MetadataTypes.Filter, undefined, undefined, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'AbstractFilter';\r\n        this.filterType = filterType;\r\n        // need to set isScope\r\n        // to make filter complete for comparison\r\n        this.isScope = true;\r\n        AbstractFilter.checkAttributeSupport(att);\r\n        this.attribute = att;\r\n        this.config = merge({}, getDefaultBaseFilterConfig(), config !== null && config !== void 0 ? config : {});\r\n    }\r\n    get name() {\r\n        // to hexadecimal string\r\n        return hash(this.jaql()).toString(16);\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.filterType = this.filterType;\r\n        result.attribute = this.attribute.serialize();\r\n        if (this.config) {\r\n            result.config = this.config;\r\n        }\r\n        result.composeCode = this.composeCode;\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets the JAQL representation of this instance\r\n     *\r\n     * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element\r\n     */\r\n    jaql(nested) {\r\n        if (this.config.disabled) {\r\n            return AbstractFilter.disabledJaql(nested);\r\n        }\r\n        const result = this.attribute.jaql(false);\r\n        const level = this.attribute;\r\n        if (level.getFormat && level.getFormat() !== undefined) {\r\n            const granularityJaql = level.translateGranularityToJaql();\r\n            result.format = {\r\n                mask: {\r\n                    [granularityJaql.level]: level.getFormat(),\r\n                },\r\n            };\r\n        }\r\n        result.jaql.filter = this.filterJaql();\r\n        // prioritize attribute dataSource for the use case of multi-source dashboard\r\n        if (this.attribute.dataSource) {\r\n            result.jaql.datasource = this.attribute.dataSource;\r\n        }\r\n        if (this.isScope) {\r\n            result.panel = 'scope';\r\n        }\r\n        return nested === true ? result.jaql : result;\r\n    }\r\n    static checkAttributeSupport(attribute) {\r\n        const { granularity } = attribute;\r\n        if (granularity === DateLevels.Hours ||\r\n            granularity === DateLevels.MinutesRoundTo30 ||\r\n            granularity === DateLevels.MinutesRoundTo15 ||\r\n            granularity === DateLevels.Minutes ||\r\n            granularity === DateLevels.Seconds) {\r\n            throw new TranslatableError('errors.filter.unsupportedDatetimeLevel');\r\n        }\r\n    }\r\n    static disabledJaql(nested) {\r\n        return nested ? { filter: {} } : { jaql: { filter: {} } };\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class LogicalAttributeFilter extends AbstractFilter {\r\n    constructor(filters, operator, config, composeCode) {\r\n        super(filters[0].attribute, FilterTypes.logicalAttribute, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'LogicalAttributeFilter';\r\n        this.operator = operator;\r\n        this.filters = filters;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return `${this.operator}_${this.filters.map((f) => f.id).join()}`;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.operator = this.operator;\r\n        result.filters = this.filters.map((f) => f.serialize());\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     */\r\n    filterJaql() {\r\n        const result = {};\r\n        result[this.operator] = this.filters.map((f) => f.filterJaql());\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class MembersFilter extends AbstractFilter {\r\n    constructor(attribute, members, config, composeCode) {\r\n        super(attribute, FilterTypes.members, undefined, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'MembersFilter';\r\n        this.members = members !== null && members !== void 0 ? members : [];\r\n        if (this.members.filter((m) => m === null || m === undefined).length > 0) {\r\n            throw new TranslatableError('errors.filter.membersFilterNullMember', {\r\n                attributeId: attribute.id,\r\n            });\r\n        }\r\n        // merge default config and input config into a new object\r\n        // to avoid mutation\r\n        this.config = merge({}, getDefaultMembersFilterConfig(), config !== null && config !== void 0 ? config : {});\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return `${this.attribute.id}_${this.members.map((m) => m.toString()).join()}`;\r\n    }\r\n    get name() {\r\n        // to hexadecimal string\r\n        return hash([this.jaql(), omit(this.config, ['guid', 'originalFilterJaql'])]).toString(16);\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        if (this.config) {\r\n            result.config = (this.config.backgroundFilter\r\n                ? Object.assign(Object.assign({}, this.config), { backgroundFilter: this.config.backgroundFilter.serialize() }) : this.config);\r\n        }\r\n        result.members = this.members;\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     */\r\n    filterJaql() {\r\n        const membersFilterJaql = {\r\n            members: this.members.map((m) => m.toString()),\r\n        };\r\n        const filterJaql = this.config.excludeMembers\r\n            ? { exclude: membersFilterJaql }\r\n            : membersFilterJaql;\r\n        if (this.config.backgroundFilter) {\r\n            return {\r\n                and: [filterJaql, this.config.backgroundFilter.filterJaql()],\r\n            };\r\n        }\r\n        return filterJaql;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class CascadingFilter extends AbstractFilter {\r\n    constructor(filters, config, composeCode) {\r\n        super(filters[0].attribute, FilterTypes.cascading, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'CascadingFilter';\r\n        this._filters = filters;\r\n    }\r\n    /**\r\n     * Returns the level filters with the root config applied.\r\n     */\r\n    get filters() {\r\n        const { disabled, locked } = this.config;\r\n        return this._filters.map((filter) => {\r\n            filter.config = Object.assign(Object.assign({}, filter.config), { disabled, locked });\r\n            return filter;\r\n        });\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return `${this.filterType}_${this._filters.map((f) => f.id).join()}`;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result._filters = this.filters.map((f) => f.serialize());\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     */\r\n    filterJaql() {\r\n        // return empty object as jaql is handled by jaql() method\r\n        return {};\r\n    }\r\n    jaql(nested) {\r\n        if (this.config.disabled) {\r\n            return AbstractFilter.disabledJaql(nested);\r\n        }\r\n        // return jaql of all level filters treated as scope filters\r\n        return this.filters.map((f) => {\r\n            f.isScope = true;\r\n            return f.jaql(nested);\r\n        });\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class ExcludeFilter extends AbstractFilter {\r\n    constructor(filter, input, config, composeCode) {\r\n        super(filter.attribute, FilterTypes.exclude, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'ExcludeFilter';\r\n        this.input = input;\r\n        this.filter = filter;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        let result = `exclude_${this.filter.id}`;\r\n        if (this.input) {\r\n            result += '_from_' + this.input.id;\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.filter = this.filter.serialize();\r\n        if (this.input) {\r\n            result.input = this.input.serialize();\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     */\r\n    filterJaql() {\r\n        const result = {};\r\n        const exclusion = this.filter.filterJaql();\r\n        if (this.input) {\r\n            result.filter = this.input.filterJaql();\r\n            result.filter.filter = { exclude: exclusion };\r\n        }\r\n        else {\r\n            result.exclude = exclusion;\r\n        }\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class DoubleOperatorFilter extends AbstractFilter {\r\n    constructor(att, filterType, operatorA, valueA, operatorB, valueB, config, composeCode) {\r\n        super(att, filterType, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DoubleOperatorFilter';\r\n        if (operatorA && valueA !== undefined) {\r\n            this.valueA = valueA;\r\n            this.operatorA = operatorA;\r\n        }\r\n        if (operatorB && valueB !== undefined) {\r\n            this.operatorB = operatorB;\r\n            this.valueB = valueB;\r\n        }\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        let result = `${this.attribute.id}`;\r\n        if (this.operatorA && this.valueA !== undefined) {\r\n            result += `_${this.operatorA}:${this.valueA}`;\r\n        }\r\n        if (this.operatorB && this.valueB !== undefined) {\r\n            result += `_${this.operatorB}:${this.valueB}`;\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        if (this.operatorA) {\r\n            result.operatorA = this.operatorA;\r\n        }\r\n        if (this.operatorB) {\r\n            result.operatorB = this.operatorB;\r\n        }\r\n        if (this.valueA !== undefined) {\r\n            result.valueA = this.valueA;\r\n        }\r\n        if (this.valueB !== undefined) {\r\n            result.valueB = this.valueB;\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     */\r\n    filterJaql() {\r\n        const result = {};\r\n        if (this.operatorA && this.valueA !== undefined) {\r\n            result[this.operatorA] = this.valueA;\r\n        }\r\n        if (this.operatorB && this.valueB !== undefined) {\r\n            result[this.operatorB] = this.valueB;\r\n        }\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class MeasureFilter extends DoubleOperatorFilter {\r\n    constructor(att, measure, operatorA, valueA, operatorB, valueB, config, composeCode) {\r\n        super(att, FilterTypes.measure, operatorA, valueA, operatorB, valueB, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'MeasureFilter';\r\n        this.measure = measure;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        let result = `${this.attribute.id}_${this.measure.id}`;\r\n        if (this.operatorA && this.valueA !== undefined) {\r\n            result += `_${this.operatorA}:${this.valueA}`;\r\n        }\r\n        if (this.operatorB && this.valueB !== undefined) {\r\n            result += `_${this.operatorB}${this.valueB}`;\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.measure = this.measure.serialize();\r\n        return result;\r\n    }\r\n    jaql(nested) {\r\n        if (this.config.disabled) {\r\n            return AbstractFilter.disabledJaql(nested);\r\n        }\r\n        const result = super.jaql(nested);\r\n        if (isDimensionalBaseMeasure(this.measure)) {\r\n            Object.entries(this.measure.jaql().jaql).forEach(([key, value]) => {\r\n                result.jaql[key] = value;\r\n            });\r\n        }\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class RankingFilter extends AbstractFilter {\r\n    constructor(att, measure, operator, count, config, composeCode) {\r\n        super(att, FilterTypes.ranking, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'RankingFilter';\r\n        this.count = count;\r\n        this.operator = operator;\r\n        this.measure = measure;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return `${this.operator}_${this.count}_${this.attribute.id}_by_${this.measure.id}`;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.count = this.count;\r\n        result.operator = this.operator;\r\n        result.measure = this.measure.serialize();\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     */\r\n    filterJaql() {\r\n        const result = {};\r\n        result[this.operator] = this.count;\r\n        result.by = this.measure.jaql(true);\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class NumericFilter extends DoubleOperatorFilter {\r\n    constructor(att, operatorA, valueA, operatorB, valueB, config, composeCode) {\r\n        super(att, FilterTypes.numeric, operatorA, valueA, operatorB, valueB, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'NumericFilter';\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        return super.serialize();\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class TextFilter extends DoubleOperatorFilter {\r\n    constructor(att, operator, value, config, composeCode) {\r\n        super(att, FilterTypes.text, operator, value, undefined, undefined, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'TextFilter';\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        return super.serialize();\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class DateRangeFilter extends DoubleOperatorFilter {\r\n    constructor(levelAttribute, valueFrom, valueTo, config, composeCode) {\r\n        super(levelAttribute, FilterTypes.dateRange, DateOperators.From, valueFrom, DateOperators.To, valueTo, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DateRangeFilter';\r\n        if (typeof valueFrom === 'object') {\r\n            this.valueA = valueFrom.toISOString();\r\n        }\r\n        if (typeof valueTo === 'object') {\r\n            this.valueB = valueTo.toISOString();\r\n        }\r\n    }\r\n    get level() {\r\n        return this.attribute;\r\n    }\r\n    get from() {\r\n        return this.valueA;\r\n    }\r\n    get to() {\r\n        return this.valueB;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     */\r\n    filterJaql() {\r\n        return super.filterJaql();\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        return super.serialize();\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class RelativeDateFilter extends AbstractFilter {\r\n    constructor(levelAttribute, offset, count, operator, anchor, config, composeCode) {\r\n        super(levelAttribute, FilterTypes.relativeDate, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'RelativeDateFilter';\r\n        if (!operator) {\r\n            operator = DateOperators.Next;\r\n        }\r\n        this.anchor = anchor;\r\n        this.operator = operator;\r\n        this.offset = offset;\r\n        this.count = count;\r\n    }\r\n    get level() {\r\n        return this.attribute;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        let result = `${this.level.id}_${this.operator}_${this.offset}_${this.count}`;\r\n        if (this.anchor) {\r\n            if (typeof this.anchor === 'string') {\r\n                result += `_${this.anchor}`;\r\n            }\r\n            else if (typeof this.anchor === 'object') {\r\n                result += `_${this.anchor.toISOString()}`;\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.offset = this.offset;\r\n        result.count = this.count;\r\n        result.operator = this.operator;\r\n        if (this.anchor) {\r\n            result.anchor = typeof this.anchor === 'string' ? this.anchor : this.anchor.toISOString();\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     *\r\n     */\r\n    filterJaql() {\r\n        const result = {};\r\n        result[this.operator] = {\r\n            offset: this.offset,\r\n            count: this.count,\r\n        };\r\n        if (this.anchor) {\r\n            if (typeof this.anchor === 'string') {\r\n                result[this.operator].anchor = this.anchor;\r\n            }\r\n            else if (typeof this.anchor === 'object') {\r\n                result[this.operator].anchor = this.anchor.toISOString();\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport class CustomFilter extends AbstractFilter {\r\n    constructor(att, jaql, config, composeCode) {\r\n        super(att, FilterTypes.advanced, config, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'CustomFilter';\r\n        // remove filterType from jaql as it is not needed\r\n        delete jaql.filterType;\r\n        this.jaqlExpression = jaql;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return `custom_${this.attribute.id}_${this.config.guid}`;\r\n    }\r\n    /**\r\n     * Gets JAQL representing this Filter instance\r\n     *\r\n     */\r\n    filterJaql() {\r\n        return this.jaqlExpression;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.jaqlExpression = this.jaqlExpression;\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * Checks if a filter is a CustomFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isCustomFilter(filter) {\r\n    return filter && filter.__serializable === 'CustomFilter';\r\n}\r\n/**\r\n * Checks if a filter is a MembersFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isMembersFilter(filter) {\r\n    return filter && filter.__serializable === 'MembersFilter';\r\n}\r\n/**\r\n * Checks if a filter is a NumericFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isNumericFilter(filter) {\r\n    return filter && filter.__serializable === 'NumericFilter';\r\n}\r\n/**\r\n * Checks if a filter is a TextFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isRankingFilter(filter) {\r\n    return filter && filter.__serializable === 'RankingFilter';\r\n}\r\n/**\r\n * Checks if a filter is a MeasureFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isMeasureFilter(filter) {\r\n    return filter && filter.__serializable === 'MeasureFilter';\r\n}\r\n/**\r\n * Checks if a filter is a ExcludeFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isExcludeFilter(filter) {\r\n    return filter && filter.__serializable === 'ExcludeFilter';\r\n}\r\n/**\r\n * Checks if a filter is a LogicalAttributeFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isLogicalAttributeFilter(filter) {\r\n    return filter && filter.__serializable === 'LogicalAttributeFilter';\r\n}\r\n/**\r\n * Checks if a filter is a CascadingFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isCascadingFilter(filter) {\r\n    return filter && filter.__serializable === 'CascadingFilter';\r\n}\r\n/**\r\n * Checks if a filter is a RelativeDateFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isRelativeDateFilter(filter) {\r\n    return filter && filter.__serializable === 'RelativeDateFilter';\r\n}\r\n/**\r\n * Checks if a filter is a TextFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isTextFilter(filter) {\r\n    return filter && filter.__serializable === 'TextFilter';\r\n}\r\n/**\r\n * Checks if a filter is a DateRangeFilter.\r\n *\r\n * @param filter - The filter to check.\r\n * @internal\r\n */\r\nexport function isDateRangeFilter(filter) {\r\n    return filter && filter.__serializable === 'DateRangeFilter';\r\n}\r\n/**\r\n * @param json - Filter JSON representation\r\n * @internal\r\n */\r\nexport function createFilter(json) {\r\n    switch (json.filterType) {\r\n        case FilterTypes.logicalAttribute:\r\n            return new LogicalAttributeFilter(json.filters.map((f) => createFilter(f)), json.operator);\r\n            break;\r\n        case FilterTypes.members:\r\n            return new MembersFilter(create(json.attribute), json.members);\r\n            break;\r\n        case FilterTypes.exclude:\r\n            return new ExcludeFilter(createFilter(json.filter), json.input && createFilter(json.input));\r\n            break;\r\n        case FilterTypes.measure:\r\n            return new MeasureFilter(create(json.attribute), create(json.measure), json.operatorA, json.valueA, json.operatorB, json.valueB);\r\n            break;\r\n        case FilterTypes.ranking:\r\n            return new RankingFilter(create(json.attribute), create(json.measure), json.operator, json.count);\r\n            break;\r\n        case FilterTypes.numeric:\r\n            return new NumericFilter(create(json.attribute), json.operatorA, json.valueA, json.operatorB, json.valueB);\r\n            break;\r\n        case FilterTypes.text:\r\n            return new TextFilter(create(json.attribute), json.operatorA, json.valueA);\r\n            break;\r\n        case FilterTypes.relativeDate:\r\n            return new RelativeDateFilter(create(json.attribute), json.offset, json.count, json.operator, json.anchor);\r\n            break;\r\n        case FilterTypes.dateRange:\r\n            return new DateRangeFilter(create(json.attribute), json.valueA, json.valueB);\r\n            break;\r\n    }\r\n    throw new TranslatableError('errors.filter.unsupportedType', {\r\n        filterType: json.filterType,\r\n    });\r\n}\r\n//# sourceMappingURL=filters.js.map","/* eslint-disable max-lines */\r\n/* eslint-disable max-params */\r\n/* eslint-disable @typescript-eslint/no-shadow */\r\nimport { withComposeCodeForFilter, withComposeCodeForFilterRelations, } from '../compose-code-utils.js';\r\nimport { CascadingFilter, CustomFilter, DateOperators, DateRangeFilter, ExcludeFilter, LogicalAttributeFilter, LogicalOperators, MeasureFilter, MembersFilter, NumericFilter, NumericOperators, RankingFilter, RankingOperators, RelativeDateFilter, TextFilter, TextOperators, } from './filters.js';\r\n// LOGICAL FILTERS\r\n/**\r\n * Creates a filter representing the union of multiple filters on the same attribute. The resulting\r\n * union filter filters on items that match any of the given filters.\r\n *\r\n * To create 'or' filters using different attributes, use the {@link logic.and | `or()`} function.\r\n *\r\n * @example\r\n * Filter for countries that start with the letter 'A' **or** end with the letter 'A'\r\n * in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.union([\r\n *   filterFactory.startsWith(DM.Country.Country, 'A'),\r\n *   filterFactory.endsWith(DM.Country.Country, 'A'),\r\n * ])\r\n * ```\r\n * @param filters - Filters to union. The filters must all be on the same attribute.\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const union = withComposeCodeForFilter((filters, config) => new LogicalAttributeFilter(filters, LogicalOperators.Union, config), 'union');\r\n/**\r\n * Creates a filter representing the intersection of multiple filters on the same attribute. The resulting\r\n * intersection filter filters on items that match all of the given filters.\r\n *\r\n * To create 'and' filters using different attributes, use the {@link logic.and | `and()`} function.\r\n *\r\n * @example\r\n * Filter for countries that start with the letter 'A' **and** end with the letter 'A'\r\n * in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.intersection([\r\n *   filterFactory.startsWith(DM.Country.Country, 'A'),\r\n *   filterFactory.endsWith(DM.Country.Country, 'A'),\r\n * ])\r\n * ```\r\n * @param filters - Filters to intersect. The filters must all be on the same attribute.\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const intersection = withComposeCodeForFilter((filters, config) => new LogicalAttributeFilter(filters, LogicalOperators.Intersection, config), 'intersection');\r\n/**\r\n * Creates a filter that excludes items matching the given filter\r\n * from all items or from items matching the optional input filter.\r\n *\r\n * @example\r\n * Filter for items where the country name does not contain the letter 'A'\r\n * from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.exclude(filterFactory.contains(DM.Country.Country, 'A'))\r\n * ```\r\n *\r\n * Filter for items where the country name starts with the letter 'B' but does not contain the letter 'A'\r\n * from the Sample ECommerce data model. This filter will match countries like 'Belgium', but will not\r\n * match countries like 'Bermuda'.\r\n * ```ts\r\n * filterFactory.exclude(\r\n *   filterFactory.contains(DM.Country.Country, 'A'),\r\n *   filterFactory.startsWith(DM.Country.Country, 'B')\r\n * )\r\n * ```\r\n * @param filter - Filter to exclude\r\n * @param input - Input filter to exclude from, on the same attribute. If not provided, the filter excludes from all items.\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter representing an exclusion of the given filter\r\n * from all attribute members or from the optional input filter\r\n */\r\nexport const exclude = withComposeCodeForFilter((filter, input, config) => new ExcludeFilter(filter, input, config), 'exclude');\r\n// TEXT / NUMERIC FILTERS\r\n/**\r\n * Creates a filter to isolate attribute values that do not contain a specified string.\r\n *\r\n * Matching is case insensitive.\r\n *\r\n * You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for categories in the Sample ECommerce data model where the category name doesn't contain\r\n * 'digital'. This filter matches categories not like 'Digital Cameras' and 'MP3 & Digital Media Players'.\r\n * ```ts\r\n * filterFactory.contains(DM.Category.Category, 'digital')\r\n * ```\r\n * @param attribute - Text attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const doesntContain = withComposeCodeForFilter((attribute, value, config) => new TextFilter(attribute, TextOperators.DoesntContain, value, config), 'doesntContain');\r\n/**\r\n * Creates a filter to isolate attribute values that do not end with a specified string.\r\n *\r\n * Matching is case insensitive.\r\n *\r\n * You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for countries in the Sample ECommerce data model where the country name doesn't end with\r\n * 'land'. This filter matches countries not like 'Iceland' and 'Ireland'.\r\n * ```ts\r\n * filterFactory.doesntEndWith(DM.Country.Country, 'land')\r\n * ```\r\n * @param attribute - Text attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const doesntEndWith = withComposeCodeForFilter((attribute, value, config) => new TextFilter(attribute, TextOperators.DoesntEndWith, value, config), 'doesntEndWith');\r\n/**\r\n * Creates a filter to isolate attribute values that do not start with a specified string.\r\n *\r\n * Matching is case insensitive.\r\n *\r\n * You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for countries in the Sample ECommerce data model where the country name doesn't start with\r\n * 'United'. This filter matches countries not like 'United States' and 'United Kingdom'.\r\n * ```ts\r\n * filterFactory.doesntStartWith(DM.Country.Country, 'United')\r\n * ```\r\n * @param attribute - Text attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const doesntStartWith = withComposeCodeForFilter((attribute, value, config) => new TextFilter(attribute, TextOperators.DoesntStartWith, value, config), 'doesntStartWith');\r\n/**\r\n * Creates a filter to isolate attribute values that contain a specified string.\r\n *\r\n * Matching is case insensitive.\r\n *\r\n * You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for categories in the Sample ECommerce data model where the category name contains\r\n * 'digital'. This filter matches categories like 'Digital Cameras' and 'MP3 & Digital Media Players'.\r\n * ```ts\r\n * filterFactory.contains(DM.Category.Category, 'digital')\r\n * ```\r\n * @param attribute - Text attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const contains = withComposeCodeForFilter((attribute, value, config) => new TextFilter(attribute, TextOperators.Contains, value, config), 'contains');\r\n/**\r\n * Creates a filter to isolate attribute values that end with a specified string.\r\n *\r\n * Matching is case insensitive.\r\n *\r\n * You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for countries in the Sample ECommerce data model where the country name ends with\r\n * 'land'. This filter matches countries like 'Ireland' and 'Iceland'.\r\n * ```ts\r\n * filterFactory.endsWith(DM.Country.Country, 'land')\r\n * ```\r\n * @param attribute - Text attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const endsWith = withComposeCodeForFilter((attribute, value, config) => new TextFilter(attribute, TextOperators.EndsWith, value, config), 'endsWith');\r\n/**\r\n * Creates a filter to isolate attribute values that start with a specified string.\r\n *\r\n * Matching is case insensitive.\r\n *\r\n * You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for countries in the Sample ECommerce data model where the country name starts with\r\n * 'United'. This filter matches countries like 'United States' and 'United Kingdom'.\r\n * ```ts\r\n * filterFactory.startsWith(DM.Country.Country, 'United')\r\n * ```\r\n * @param attribute - Text attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const startsWith = withComposeCodeForFilter((attribute, value, config) => new TextFilter(attribute, TextOperators.StartsWith, value, config), 'startsWith');\r\n/**\r\n * Creates a filter to isolate attribute values that match a specified string pattern.\r\n *\r\n * The pattern can include the following wildcard characters:\r\n *\r\n * + `_`: Matches a single character\r\n * + `%`: Matches multiple characters\r\n *\r\n * To search for a literal underscore (`_`) or percent symbol (`%`), use the backslash (`\\`) escape\r\n * character.\r\n *\r\n * Matching is case insensitive.\r\n *\r\n * @example\r\n * Filter for countries from the Sample ECommerce data model where the country name starts with an\r\n * 'A' and ends with an 'a'. This filter matches countries like 'Argentina' and 'Australia'.\r\n * ```ts\r\n * filterFactory.like(DM.Country.Country, 'A%a')\r\n * ```\r\n * @param attribute - Text attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const like = withComposeCodeForFilter((attribute, value, config) => new TextFilter(attribute, TextOperators.Like, value, config), 'like');\r\n/**\r\n * Creates a filter to isolate attribute values that do not equal a specified string or number.\r\n *\r\n * When filtering against a string:\r\n *\r\n *  + Matching is case insensitive.\r\n *  + You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for items not in new condition from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.doesntEqual(DM.Commerce.Condition, 'New')\r\n * ```\r\n * @param attribute - Text or numeric attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const doesntEqual = withComposeCodeForFilter((attribute, value, config) => {\r\n    if (typeof value === 'string') {\r\n        return new TextFilter(attribute, TextOperators.DoesntEqual, value, config);\r\n    }\r\n    else {\r\n        return numeric(attribute, NumericOperators.DoesntEqual, value, undefined, undefined, config);\r\n    }\r\n}, 'doesntEqual');\r\n/**\r\n * Creates a filter to isolate attribute values that equal a specified string or number.\r\n *\r\n * When filtering against a string:\r\n *\r\n *  + Matching is case insensitive.\r\n *  + You can optionally use wildcard characters for pattern matching, as described in the\r\n * {@link like | `like()`} function.\r\n *\r\n * @example\r\n * Filter for items in new condition from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.equals(DM.Commerce.Condition, 'New')\r\n * ```\r\n * @param attribute - Text or numeric attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const equals = withComposeCodeForFilter((attribute, value, config) => {\r\n    if (typeof value === 'string') {\r\n        return new TextFilter(attribute, TextOperators.Equals, value, config);\r\n    }\r\n    else {\r\n        return numeric(attribute, NumericOperators.Equals, value, undefined, undefined, config);\r\n    }\r\n}, 'equals');\r\n/**\r\n * Creates a filter to isolate attribute values strictly greater than a specified number.\r\n *\r\n * @example\r\n * Filter for items where the cost is greater than 100 from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.greaterThan(DM.Commerce.Cost, 100)\r\n * ```\r\n * @param attribute - Numeric attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const greaterThan = withComposeCodeForFilter((attribute, value, config) => numeric(attribute, NumericOperators.FromNotEqual, value, undefined, undefined, config), 'greaterThan');\r\n/**\r\n * Creates a filter to isolate attribute values greater than or equal to a specified number.\r\n *\r\n * @example\r\n * Filter for items where the cost is greater than or equal to 100 from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.greaterThanOrEqual(DM.Commerce.Cost, 100)\r\n * ```\r\n * @param attribute - Numeric attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const greaterThanOrEqual = withComposeCodeForFilter((attribute, value, config) => numeric(attribute, NumericOperators.From, value, undefined, undefined, config), 'greaterThanOrEqual');\r\n/**\r\n * Creates a filter to isolate attribute values strictly less than a specified number.\r\n *\r\n * @example\r\n * Filter for items where the cost is less than 100 from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.lessThan(DM.Commerce.Cost, 100)\r\n * ```\r\n * @param attribute - Numeric attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const lessThan = withComposeCodeForFilter((attribute, value, config) => numeric(attribute, NumericOperators.ToNotEqual, value, undefined, undefined, config), 'lessThan');\r\n/**\r\n * Creates a filter to isolate attribute values less than or equal to a specified number.\r\n *\r\n * @example\r\n * Filter for items where the cost is less than or equal to 100 from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.lessThanOrEqual(DM.Commerce.Cost, 100)\r\n * ```\r\n * @param attribute - Numeric attribute to filter on\r\n * @param value - Value to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const lessThanOrEqual = withComposeCodeForFilter((attribute, value, config) => numeric(attribute, NumericOperators.To, value, undefined, undefined, config), 'lessThanOrEqual');\r\n/**\r\n * Creates a filter to isolate attribute values within or exactly matching two specified numerical boundaries.\r\n *\r\n * @example\r\n * Filter for items from the Sample ECommerce data model where the cost is greater than or equal to 100 and less than or equal to 200.\r\n * ```ts\r\n * filterFactory.between(DM.Commerce.Cost, 100, 200)\r\n * ```\r\n * @param attribute - Numeric attribute to filter on\r\n * @param valueA - Value to filter from\r\n * @param valueB - Value to filter to\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const between = withComposeCodeForFilter((attribute, valueA, valueB, config) => numeric(attribute, NumericOperators.From, valueA, NumericOperators.To, valueB, config), 'between');\r\n/**\r\n * Creates a filter that isolates attribute values strictly within two specified numerical boundaries.\r\n *\r\n * @example\r\n * Filter for items from the Sample ECommerce data model where the cost is greater than 100 and less than 200.\r\n * ```ts\r\n * filterFactory.betweenNotEqual(DM.Commerce.Cost, 100, 200)\r\n * ```\r\n * @param attribute - Numeric attribute to filter on\r\n * @param valueA - Value to filter from\r\n * @param valueB - Value to filter to\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const betweenNotEqual = withComposeCodeForFilter((attribute, valueA, valueB, config) => numeric(attribute, NumericOperators.FromNotEqual, valueA, NumericOperators.ToNotEqual, valueB, config), 'betweenNotEqual');\r\n/**\r\n * Creates a custom numeric filter that filters for given attribute values.\r\n *\r\n * @example\r\n * Filter for items where the cost is greater than 100 and less than 200\r\n * from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.numeric(\r\n *   DM.Commerce.Cost,\r\n *   NumericOperators.From,\r\n *   100,\r\n *   NumericOperators.To,\r\n *   200\r\n * )\r\n * ```\r\n * @param attribute - Numeric attribute to filter\r\n * @param operatorA - First operator\r\n * @param valueA - First value\r\n * @param operatorB - Second operator\r\n * @param valueB - Second value\r\n * @param config - Optional configuration for the filter\r\n * @returns A custom numeric filter of the given attribute\r\n */\r\nexport const numeric = withComposeCodeForFilter((attribute, operatorA, valueA, operatorB, valueB, config) => new NumericFilter(attribute, operatorA, valueA, operatorB, valueB, config), 'numeric');\r\n/**\r\n * Creates a filter to isolate attribute values that match any of the specified strings.\r\n *\r\n * Matching is case sensitive.\r\n *\r\n * @example\r\n * Filter for items where the condition is 'Used' or 'Refurbished'\r\n * from the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.members(DM.Commerce.Condition, ['Used', 'Refurbished'])\r\n * ```\r\n * @param attribute - Attribute to filter on\r\n * @param members - Array of member values to filter by\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n * @shortDescription Creates filter on attribute to match certain string values\r\n */\r\nexport const members = withComposeCodeForFilter((attribute, members, config) => new MembersFilter(attribute, members, config), 'members');\r\n// DATE FILTERS\r\n/**\r\n * Creates a filter to isolate date values starting from and including the given date and level.\r\n *\r\n * @example\r\n * Filter for items in the Sample ECommerce data model where the date is not before the year 2010.\r\n * ```ts\r\n * filterFactory.dateFrom(DM.Commerce.Date.Years, '2010-01')\r\n * ```\r\n * @param level - Date {@link LevelAttribute} to filter on\r\n * @param from - Date or string representing the value to filter from\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const dateFrom = withComposeCodeForFilter((level, from, config) => dateRange(level, from, undefined, config), 'dateFrom');\r\n/**\r\n * Creates a filter to isolate items up until and including the given date and level.\r\n *\r\n * @example\r\n * Filter for items where the date is from the year 2010 or earlier in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.dateTo(DM.Commerce.Date.Years, '2010-01')\r\n * ```\r\n * @param level - Date {@link LevelAttribute} to filter on\r\n * @param to - Date or string representing the last member to filter to\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const dateTo = withComposeCodeForFilter((level, to, config) => dateRange(level, undefined, to, config), 'dateTo');\r\n/**\r\n * Creates a filter to isolate items between and including the given dates and level.\r\n *\r\n * @example\r\n * Filter for items in the Sample ECommerce data model where the date is from the years 2009, 2010, or 2011.\r\n * ```ts\r\n * filterFactory.dateRange(DM.Commerce.Date.Years, '2009-01', '2011-01')\r\n * ```\r\n * @param level - Date {@link LevelAttribute} to filter on\r\n * @param from - Date or string representing the start member to filter from\r\n * @param to - Date or string representing the end member to filter to\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const dateRange = withComposeCodeForFilter((level, from, to, config) => new DateRangeFilter(level, from, to, config), 'dateRange');\r\n/**\r\n * Creates a filter to isolate items with a date dimension value within a specified range after a\r\n * given date and level.\r\n *\r\n * Although the `offset` can be used to set a beginning date prior to the `anchor`, the filter range always\r\n * continues forward after the offset beginning date. So, using an `offset` of `-6` and a `count` of `18` when `level`\r\n * is a month level creates a range that begins 6 month before the `anchor` date and extends to 12 months after\r\n * the `anchor` date.\r\n *\r\n * @example\r\n * Filter for items in the Sample ECommerce data model where the date is in 2011 or the first half of 2012.\r\n * ```ts\r\n * filterFactory.dateRelative(DM.Commerce.Date.Months, 0, 18, '2011-01'),\r\n * ```\r\n *\r\n * Filter for items in the Sample ECommerce data model where the date is in the second half of 2010 or in 2011.\r\n * ```ts\r\n * filterFactory.dateRelative(DM.Commerce.Date.Months, -6, 18, '2011-01'),\r\n * ```\r\n *\r\n * Filter for items in the Sample ECommerce data model where the date is in the past 6 months.\r\n * ```ts\r\n * filterFactory.dateRelative(DM.Commerce.Date.Months, -6, 6),\r\n * ```\r\n * @param level - Date {@link LevelAttribute} to filter on\r\n * @param offset - Number of levels to skip from the given `anchor` or the default of the current day.\r\n * Positive numbers skip forwards and negative numbers skip backwards (e.g. `-6` is 6 months backwards when `level` is a months level attribute)\r\n * @param count - Number of levels to include in the filter (e.g. `6` is 6 months when `level` is a months level attribute)\r\n * @param anchor - Date to filter from, defaults to the current day\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const dateRelative = withComposeCodeForFilter((level, offset, count, anchor, config) => new RelativeDateFilter(level, offset, count, undefined, anchor, config), 'dateRelative');\r\n/**\r\n * Creates a filter to isolate items with a date dimension value within a specified range after a\r\n * given date and level.\r\n *\r\n * @example\r\n * Filter for items in the Sample ECommerce data model where the date is in 2011 or the first half of 2012.\r\n * ```ts\r\n * filterFactory.dateRelativeFrom(DM.Commerce.Date.Months, 0, 18, '2011-01'),\r\n * ```\r\n * @param level - Date {@link LevelAttribute} to filter on\r\n * @param offset - Number of levels to skip from the given `anchor` or the default of the current day (e.g. `6` is 6 months when `level` is a months level attribute)\r\n * @param count - Number of levels to include in the filter (e.g. `6` is 6 months when `level` is a months level attribute)\r\n * @param anchor - Date to filter from, defaults to the current day\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const dateRelativeFrom = withComposeCodeForFilter((level, offset, count, anchor, config) => new RelativeDateFilter(level, offset, count, DateOperators.Next, anchor, config), 'dateRelativeFrom');\r\n/**\r\n * Creates a filter to isolate items with a date dimension value within a specified range before a\r\n * given date and level.\r\n *\r\n * @example\r\n * Filter for items in the Sample ECommerce data model where the date is in the first half of 2010 or in 2011.\r\n * ```ts\r\n * filterFactory.dateRelativeTo(DM.Commerce.Date.Months, 0, 18, '2011-12'),\r\n * ```\r\n * @param level - Date {@link LevelAttribute} to filter on\r\n * @param offset - Number of levels to skip from the given `anchor` or the default of the current day (e.g. `6` is 6 months when `level` is a months level attribute)\r\n * @param count - Number of levels to include in the filter (e.g. `6` is 6 months when `level` is a months level attribute)\r\n * @param anchor - Date to filter to, defaults to the current day\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const dateRelativeTo = withComposeCodeForFilter((level, offset, count, anchor, config) => new RelativeDateFilter(level, offset, count, DateOperators.Last, anchor, config), 'dateRelativeTo');\r\n/**\r\n * Creates a filter to isolate items with a date dimension value in the current calendar year.\r\n *\r\n * @example\r\n * Filter for items where the date is in the current calendar year in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.thisYear(DM.Commerce.Date)\r\n * ```\r\n * @param dimension - Date dimension to filter\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const thisYear = withComposeCodeForFilter((dimension, config) => dateRelativeTo(dimension.Years, 0, 1, undefined, config), 'thisYear');\r\n/**\r\n * Creates a filter to isolate items with a date dimension value in the current calendar month.\r\n *\r\n * @example\r\n * Filter for items where the date is in the current calendar month in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.thisMonth(DM.Commerce.Date)\r\n * ```\r\n * @param dimension - Date dimension to filter\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const thisMonth = withComposeCodeForFilter((dimension, config) => dateRelativeTo(dimension.Months, 0, 1, undefined, config), 'thisMonth');\r\n/**\r\n * Creates a filter to isolate items with a date dimension value in the current quarter.\r\n *\r\n * @example\r\n * Filter for items where the date is in the current quarter in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.thisQuarter(DM.Commerce.Date)\r\n * ```\r\n * @param dimension - Date dimension to filter\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const thisQuarter = withComposeCodeForFilter((dimension, config) => dateRelativeTo(dimension.Quarters, 0, 1, undefined, config), 'thisQuarter');\r\n/**\r\n * Creates a filter to isolate items with a date dimension value of the current date.\r\n *\r\n * @example\r\n * Filter for items where the date is today in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.today(DM.Commerce.Date)\r\n * ```\r\n * @param dimension - date dimension to filter\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const today = withComposeCodeForFilter((dimension, config) => dateRelativeTo(dimension.Days, 0, 1, undefined, config), 'today');\r\n// MEASURE-RELATED FILTERS\r\n/**\r\n * Creates a filter on all measure values matching the provided criteria.\r\n *\r\n * @param attribute - Attribute to filter\r\n * @param measure - Measure to filter by\r\n * @param operatorA - Operator to apply on `valueA` ({@link NumericOperators})\r\n * @param valueA - First value\r\n * @param operatorB - Operator to apply on `valueB` ({@link NumericOperators})\r\n * @param valueB - Second value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter representing the provided logic\r\n * @internal\r\n */\r\nexport function measureBase(attribute, measure, operatorA, valueA, operatorB, valueB, config) {\r\n    return new MeasureFilter(attribute, measure, operatorA, valueA, operatorB, valueB, config);\r\n}\r\n/**\r\n * Creates a filter to isolate a measure value equal to a given number.\r\n *\r\n * @example\r\n * Filter for categories that have an average revenue equal 50 in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.measureEquals(\r\n *   measureFactory.average(DM.Commerce.Revenue),\r\n *   50\r\n * )\r\n * ```\r\n * @param measure - Measure to filter by\r\n * @param value - Value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const measureEquals = withComposeCodeForFilter((measure, value, config) => measureBase(measure.attribute, measure, NumericOperators.Equals, value, undefined, undefined, config), 'measureEquals');\r\n/**\r\n * Creates a filter to isolate a measure value greater than to a given number.\r\n *\r\n * @example\r\n * Filter for categories that have an average revenue greater than\r\n * to 50 in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.measureGreaterThan(\r\n *   measureFactory.average(DM.Commerce.Revenue),\r\n *   50\r\n * )\r\n * ```\r\n * @param measure - Measure to filter by\r\n * @param value - Min value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const measureGreaterThan = withComposeCodeForFilter((measure, value, config) => measureBase(measure.attribute, measure, NumericOperators.FromNotEqual, value, undefined, undefined, config), 'measureGreaterThan');\r\n/**\r\n * Creates a filter to isolate a measure value greater than or equal to a given number.\r\n *\r\n * @example\r\n * Filter for categories that have an average revenue greater than\r\n * or equal to 50 in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.measureGreaterThanOrEqual(\r\n *   measureFactory.average(DM.Commerce.Revenue),\r\n *   50\r\n * )\r\n * ```\r\n * @param measure - Measure to filter by\r\n * @param value - Min value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const measureGreaterThanOrEqual = withComposeCodeForFilter((measure, value, config) => measureBase(measure.attribute, measure, NumericOperators.From, value, undefined, undefined, config), 'measureGreaterThanOrEqual');\r\n/**\r\n * Creates a filter to isolate a measure value less than or equal to a given number.\r\n *\r\n * @example\r\n * Filter for categories that have an average revenue less than\r\n * or equal to 100 in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.measureLessThanOrEqual(\r\n *   measureFactory.average(DM.Commerce.Revenue),\r\n *   100\r\n * )\r\n * ```\r\n * @param measure - Measure to filter by\r\n * @param value - Max value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const measureLessThanOrEqual = withComposeCodeForFilter((measure, value, config) => measureBase(measure.attribute, measure, NumericOperators.To, value, undefined, undefined, config), 'measureLessThanOrEqual');\r\n/**\r\n * Creates a filter to isolate a measure value less than a given number.\r\n *\r\n * @example\r\n * Filter for categories that have an average revenue less than 100 in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.measureLessThan(\r\n *   measureFactory.average(DM.Commerce.Revenue),\r\n *   100\r\n * )\r\n * ```\r\n * @param measure - Measure to filter by\r\n * @param value - Value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const measureLessThan = withComposeCodeForFilter((measure, value, config) => measureBase(measure.attribute, measure, NumericOperators.ToNotEqual, value, undefined, undefined, config), 'measureLessThan');\r\n/**\r\n * Creates a filter to isolate a measure value between or equal to two given numbers.\r\n *\r\n * @example\r\n * Filter for categories that have an average revenue greater than or equal to 50 and less than\r\n * or equal to 100 in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.measureBetween(\r\n *   measureFactory.average(DM.Commerce.Revenue),\r\n *   50,\r\n *   100\r\n * )\r\n * ```\r\n * @param measure - Measure to filter by\r\n * @param valueA - Min value\r\n * @param valueB - Max value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const measureBetween = withComposeCodeForFilter((measure, valueA, valueB, config) => measureBase(measure.attribute, measure, NumericOperators.From, valueA, NumericOperators.To, valueB, config), 'measureBetween');\r\n/**\r\n * Creates a filter to isolate a measure value between but not equal to two given numbers.\r\n *\r\n * @example\r\n * Filter for categories that have an average revenue greater than 50 and less than\r\n * 100 in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.measureBetweenNotEqual(\r\n *   measureFactory.average(DM.Commerce.Revenue),\r\n *   50,\r\n *   100\r\n * )\r\n * ```\r\n * @param measure - Measure to filter by\r\n * @param valueA - Min value\r\n * @param valueB - Max value\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const measureBetweenNotEqual = withComposeCodeForFilter((measure, valueA, valueB, config) => measureBase(measure.attribute, measure, NumericOperators.FromNotEqual, valueA, NumericOperators.ToNotEqual, valueB, config), 'measureBetweenNotEqual');\r\n// RANKING FILTERS\r\n/**\r\n * Creates a filter to isolate items that rank towards the top for a given measure.\r\n *\r\n * @example\r\n * Filter for age ranges with the top 3 highest total revenue in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.topRanking(\r\n *   DM.Commerce.AgeRange,\r\n *   measureFactory.sum(DM.Commerce.Revenue),\r\n *   3\r\n * )\r\n * ```\r\n * @param attribute - Attribute to filter\r\n * @param measure - Measure to filter by\r\n * @param count - Number of members to return\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const topRanking = withComposeCodeForFilter((attribute, measure, count, config) => new RankingFilter(attribute, measure, RankingOperators.Top, count, config), 'topRanking');\r\n/**\r\n * Creates a filter to isolate items that rank towards the bottom for a given measure.\r\n *\r\n * @example\r\n * Filter for age ranges with the bottom 3 lowest total revenue in the Sample ECommerce data model.\r\n * ```ts\r\n * filterFactory.bottomRanking(\r\n *   DM.Commerce.AgeRange,\r\n *   measureFactory.sum(DM.Commerce.Revenue),\r\n *   3\r\n * )\r\n * ```\r\n * @param attribute - Attribute to filter\r\n * @param measure - Measure to filter by\r\n * @param count - Number of members to return\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const bottomRanking = withComposeCodeForFilter((attribute, measure, count, config) => new RankingFilter(attribute, measure, RankingOperators.Bottom, count, config), 'bottomRanking');\r\nconst relate = (node) => {\r\n    if (Array.isArray(node)) {\r\n        const [first, ...rest] = node;\r\n        return rest.length === 0\r\n            ? relate(first)\r\n            : {\r\n                operator: 'AND',\r\n                left: relate(first),\r\n                right: relate(rest),\r\n            };\r\n    }\r\n    return node;\r\n};\r\n// CASCADING FILTERS\r\n/**\r\n * Creates a filter that contains a list of dependent/cascading filters,\r\n * where each filter depends on the results or state of the previous ones in the array.\r\n *\r\n * Each filter in the array operates in the context of its predecessors, and the\r\n * cascading behavior ensures that all filters are applied sequentially.\r\n *\r\n * @example\r\n * ```ts\r\n * // Create a cascading filter for gender and age range\r\n * const cascadingFilter = filterFactory.cascading(\r\n *   [\r\n *     filterFactory.members(DM.Commerce.Gender, ['Male', 'Female']),\r\n *     filterFactory.members(DM.Commerce.AgeRange, ['0-18']),\r\n *   ],\r\n *   { disabled: true }, // Optional configuration to disable the cascading filter\r\n * );\r\n * ```\r\n * @param filters - Array of dependent filters\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n */\r\nexport const cascading = withComposeCodeForFilter((filters, config) => new CascadingFilter(filters, config), 'cascading');\r\n/**\r\n * Set of logic operators for filter relations construction\r\n *\r\n * These operators are still in beta.\r\n *\r\n * @example\r\n * ```ts\r\n * import { filters } from '@sisense/sdk-data';\r\n *\r\n * // define filters\r\n * const revenueFilter = filterFactory.greaterThan(DM.Commerce.Revenue, 1000);\r\n * const countryFilter = filterFactory.members(DM.Commerce.Country, ['USA', 'Canada']);\r\n * const genderFilter = filterFactory.doesntContain(DM.Commerce.Gender, 'Unspecified');\r\n * const costFilter = filterFactory.between(DM.Commerce.Cost, 1000, 2000);\r\n *\r\n * // create filter relations of two filters\r\n * const orFilerRelations = filterFactory.logic.or(revenueFilter, countryFilter);\r\n * // revenueFilter OR countryFilter\r\n *\r\n * // filter relations can have nested filter relations\r\n * const mixedFilterRelations = filterFactory.logic.and(genderFilter, orFilerRelations);\r\n * // genderFilter AND (revenueFilter OR countryFilter)\r\n *\r\n * // array, specified in filter relations, will be converted to an intersection of filters automatically\r\n * const arrayFilterRelations = filterFactory.logic.or([genderFilter, costFilter], mixedFilterRelations);\r\n * // (genderFilter AND costFilter) OR (genderFilter AND (revenueFilter OR countryFilter))\r\n * ```\r\n * @beta\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nexport var logic;\r\n(function (logic) {\r\n    /**\r\n     * Creates an 'AND' filter relations\r\n     *\r\n     * @example\r\n     * Create filter relations for items that have a revenue greater than 100 and are in new condition\r\n     * in the Sample ECommerce data model.\r\n     * ```ts\r\n     * const revenueFilter = filterFactory.greaterThan(DM.Commerce.Revenue, 100);\r\n     * const conditionFilter = filterFactory.equals(DM.Commerce.Condition, 'New');\r\n     *\r\n     * const andFilerRelation = filterFactory.logic.and(revenueFilter, conditionFilter);\r\n     * ```\r\n     * @param left First filter or filter relations\r\n     * @param right Second filter or filter relations\r\n     * @returns Filter relations\r\n     * @beta\r\n     */\r\n    logic.and = withComposeCodeForFilterRelations((left, right) => ({\r\n        operator: 'AND',\r\n        left: relate(left),\r\n        right: relate(right),\r\n    }), 'and');\r\n    /**\r\n     * Creates an 'OR' filter relations\r\n     *\r\n     * @example\r\n     * Create filter relations for items that have a revenue greater than 100 or are in new condition\r\n     * in the Sample ECommerce data model.\r\n     * ```ts\r\n     * const revenueFilter = filterFactory.greaterThan(DM.Commerce.Revenue, 100);\r\n     * const conditionFilter = filterFactory.equals(DM.Commerce.Condition, 'New');\r\n     *\r\n     * const orFilerRelation = filterFactory.logic.or(revenueFilter, conditionFilter);\r\n     * ```\r\n     * @param left First filter or filter relations\r\n     * @param right Second filter or filter relations\r\n     * @returns Filter relations\r\n     * @beta\r\n     */\r\n    logic.or = withComposeCodeForFilterRelations((left, right) => ({\r\n        operator: 'OR',\r\n        left: relate(left),\r\n        right: relate(right),\r\n    }), 'or');\r\n})(logic = logic || (logic = {}));\r\n// CUSTOM FILTER\r\n/**\r\n * Creates a filter from JAQL\r\n *\r\n * @param attribute - Attribute to filter\r\n * @param jaql - Filter Jaql\r\n * @param config - Optional configuration for the filter\r\n * @returns A filter instance\r\n * @internal\r\n */\r\nexport const customFilter = withComposeCodeForFilter((attribute, jaql, config) => new CustomFilter(attribute, jaql, config), 'customFilter');\r\n//# sourceMappingURL=factory.js.map","import { createAttributeHelper, createCalculatedMeasureHelper, createMeasureHelper, getGranularityFromJaql, } from '../../../utils.js';\r\n/**\r\n * Creates an attribute or level attribute from the provided filter JAQL object\r\n *\r\n * @param jaql - Filter JAQL object\r\n * @returns attribute or level attribute\r\n */\r\nexport const createAttributeFromFilterJaql = (jaql) => {\r\n    const { dim, datatype, title, datasource: dataSource } = jaql;\r\n    return createAttributeHelper({\r\n        expression: dim,\r\n        dataType: datatype,\r\n        granularity: getGranularityFromJaql(jaql),\r\n        title,\r\n        dataSource,\r\n    });\r\n};\r\n/**\r\n * Creates a measure from the provided filter JAQL object\r\n *\r\n * @param jaql - Filter JAQL object\r\n * @returns Measure\r\n */\r\nexport const createMeasureFromFilterJaql = (jaql) => {\r\n    const { dim, title, datatype: dataType, agg, datasource: dataSource } = jaql;\r\n    if (!agg)\r\n        return undefined;\r\n    return createMeasureHelper({\r\n        expression: dim,\r\n        dataType,\r\n        agg,\r\n        granularity: getGranularityFromJaql(jaql),\r\n        format: undefined,\r\n        sort: undefined,\r\n        title,\r\n        dataSource,\r\n    });\r\n};\r\n/**\r\n * Creates a measure from the provided ranking filter JAQL object\r\n *\r\n * @param jaql - Ranking filter Jaql object\r\n * @returns Measure\r\n */\r\nexport const createMeasureFromRankingFilterJaql = (jaql, rankingMessage) => {\r\n    if ('formula' in jaql)\r\n        return createCalculatedMeasureHelper(jaql);\r\n    const { dim, datatype: dataType, agg } = jaql;\r\n    return createMeasureHelper({\r\n        expression: dim,\r\n        granularity: getGranularityFromJaql(jaql),\r\n        dataType,\r\n        agg,\r\n        format: undefined,\r\n        sort: undefined,\r\n        title: rankingMessage,\r\n    });\r\n};\r\n//# sourceMappingURL=attribute-measure-util.js.map","export var GeneralFilterType;\r\n(function (GeneralFilterType) {\r\n    GeneralFilterType[\"INCLUDE_ALL\"] = \"INCLUDE_ALL\";\r\n    GeneralFilterType[\"ADVANCED\"] = \"ADVANCED\";\r\n    GeneralFilterType[\"INVALID\"] = \"INVALID\";\r\n    GeneralFilterType[\"CONDITION\"] = \"CONDITION\";\r\n    GeneralFilterType[\"SPECIFIC_ITEMS\"] = \"SPECIFIC_ITEMS\";\r\n})(GeneralFilterType = GeneralFilterType || (GeneralFilterType = {}));\r\nexport var DateTimeFilterType;\r\n(function (DateTimeFilterType) {\r\n    DateTimeFilterType[\"PERIOD\"] = \"PERIOD\";\r\n    DateTimeFilterType[\"DATE_RANGE\"] = \"DATE_RANGE\";\r\n})(DateTimeFilterType = DateTimeFilterType || (DateTimeFilterType = {}));\r\nexport var NumericFilterType;\r\n(function (NumericFilterType) {\r\n    NumericFilterType[\"NUMERIC_RANGE\"] = \"NUMERIC_RANGE\";\r\n})(NumericFilterType = NumericFilterType || (NumericFilterType = {}));\r\nexport var DatetimeLevel;\r\n(function (DatetimeLevel) {\r\n    DatetimeLevel[\"YEARS\"] = \"years\";\r\n    DatetimeLevel[\"QUARTERS\"] = \"quarters\";\r\n    DatetimeLevel[\"MONTHS\"] = \"months\";\r\n    DatetimeLevel[\"WEEKS\"] = \"weeks\";\r\n    DatetimeLevel[\"DAYS\"] = \"days\";\r\n    DatetimeLevel[\"HOURS\"] = \"hours\";\r\n    DatetimeLevel[\"MINUTES\"] = \"minutes\";\r\n})(DatetimeLevel = DatetimeLevel || (DatetimeLevel = {}));\r\nexport var FilterModalType;\r\n(function (FilterModalType) {\r\n    FilterModalType[\"DATE_TIME\"] = \"datetime\";\r\n    FilterModalType[\"NUMERIC\"] = \"numeric\";\r\n    FilterModalType[\"TEXT\"] = \"text\";\r\n})(FilterModalType = FilterModalType || (FilterModalType = {}));\r\nexport const nonSupportedMinutesBuckets = ['1', '30'];\r\nexport const FILTER_TYPES = Object.assign(Object.assign(Object.assign({}, GeneralFilterType), DateTimeFilterType), NumericFilterType);\r\nexport const DEFAULT_FILTER_JAQL_BY_TYPE_MAP = {\r\n    [FILTER_TYPES.INCLUDE_ALL]: {\r\n        all: true,\r\n        filterType: FILTER_TYPES.INCLUDE_ALL,\r\n    },\r\n    [FILTER_TYPES.PERIOD]: {\r\n        last: { count: 1, offset: 1 },\r\n        isNotCurrentPeriod: true,\r\n        filterType: FILTER_TYPES.PERIOD,\r\n    },\r\n    [FILTER_TYPES.DATE_RANGE]: {\r\n        filterType: FILTER_TYPES.DATE_RANGE,\r\n    },\r\n    [FILTER_TYPES.NUMERIC_RANGE]: {\r\n        filterType: FILTER_TYPES.NUMERIC_RANGE,\r\n    },\r\n    [FILTER_TYPES.CONDITION]: {\r\n        explicit: false,\r\n        multiSelection: true,\r\n        exclude: { members: [] },\r\n        filterType: FILTER_TYPES.CONDITION,\r\n    },\r\n    [FILTER_TYPES.SPECIFIC_ITEMS]: {\r\n        explicit: true,\r\n        multiSelection: true,\r\n        members: [],\r\n        filterType: FILTER_TYPES.SPECIFIC_ITEMS,\r\n    },\r\n};\r\nexport const DEFAULT_FILTER_JAQL_WRAPPER = {\r\n    filter: DEFAULT_FILTER_JAQL_BY_TYPE_MAP.INCLUDE_ALL,\r\n    level: DatetimeLevel.YEARS,\r\n};\r\nexport var ConditionFilterType;\r\n(function (ConditionFilterType) {\r\n    ConditionFilterType[\"IS\"] = \"members\";\r\n    ConditionFilterType[\"IS_NOT\"] = \"exclude\";\r\n    ConditionFilterType[\"IS_WITHIN\"] = \"isWithin\";\r\n    ConditionFilterType[\"TOP\"] = \"top\";\r\n    ConditionFilterType[\"BOTTOM\"] = \"bottom\";\r\n    ConditionFilterType[\"AFTER\"] = \"after\";\r\n    ConditionFilterType[\"BEFORE\"] = \"before\";\r\n    ConditionFilterType[\"STARTS_WITH\"] = \"startsWith\";\r\n    ConditionFilterType[\"DOESNT_START_WITH\"] = \"doesntStartWith\";\r\n    ConditionFilterType[\"ENDS_WITH\"] = \"endsWith\";\r\n    ConditionFilterType[\"DOESNT_END_WITH\"] = \"doesntEndWith\";\r\n    ConditionFilterType[\"CONTAINS\"] = \"contains\";\r\n    ConditionFilterType[\"DOESNT_CONTAIN\"] = \"doesntContain\";\r\n    ConditionFilterType[\"EQUALS\"] = \"equals\";\r\n    ConditionFilterType[\"DOESNT_EQUAL\"] = \"doesntEqual\";\r\n    ConditionFilterType[\"IS_EMPTY\"] = \"isEmpty\";\r\n    ConditionFilterType[\"IS_NOT_EMPTY\"] = \"isNotEmpty\";\r\n    ConditionFilterType[\"GREATER_THAN\"] = \"fromNotEqual\";\r\n    ConditionFilterType[\"GREATER_THAN_OR_EQUAL\"] = \"from\";\r\n    ConditionFilterType[\"LESS_THAN\"] = \"toNotEqual\";\r\n    ConditionFilterType[\"LESS_THAN_OR_EQUAL\"] = \"to\";\r\n    ConditionFilterType[\"BETWEEN\"] = \"between\";\r\n    ConditionFilterType[\"IS_NOT_BETWEEN\"] = \"isNotBetween\";\r\n    ConditionFilterType[\"MULTIPLE_CONDITION\"] = \"multipleCondition\";\r\n    ConditionFilterType[\"NONE\"] = \"none\";\r\n})(ConditionFilterType = ConditionFilterType || (ConditionFilterType = {}));\r\n//# sourceMappingURL=types.js.map","import { TranslatableError } from '../../../translation/translatable-error.js';\r\nimport * as filterFactory from '../factory.js';\r\nimport { simplifyFilterConfig } from '../filter-config-utils.js';\r\nimport { createMeasureFromRankingFilterJaql } from './attribute-measure-util.js';\r\nimport { ConditionFilterType } from './types.js';\r\nconst isTopCondition = (filter) => filter.top !== undefined;\r\nconst isBottomCondition = (filter) => filter.bottom !== undefined;\r\nconst isExcludeCondition = (filter) => { var _a; return !!((_a = filter.exclude) === null || _a === void 0 ? void 0 : _a.members); };\r\nconst isMembersCondition = (filter) => !!filter.members && !!filter.isCondition;\r\nconst isWithinCondition = (filter) => { var _a, _b; return ((_a = filter.last) === null || _a === void 0 ? void 0 : _a.anchor) !== undefined || ((_b = filter.next) === null || _b === void 0 ? void 0 : _b.anchor) !== undefined; };\r\nconst isGreaterThanCondition = (filter) => filter.fromNotEqual !== undefined;\r\nconst isGreaterThanOrEqualCondition = (filter) => filter.from !== undefined && !filter.isBetween;\r\nconst isLessThanCondition = (filter) => filter.toNotEqual !== undefined;\r\nconst isLessThanOrEqualCondition = (filter) => filter.to !== undefined && !filter.isBetween;\r\nconst isEqualsCondition = (filter) => filter.equals !== undefined;\r\nconst isNotEqualCondition = (filter) => filter.doesntEqual !== undefined;\r\nconst isEmptyCondition = (filter) => !!(filter.equals === '' && filter.isEmpty);\r\nconst isNotEmptyCondition = (filter) => !!(filter.doesntEqual === '' && filter.isEmpty);\r\nconst isContainsCondition = (filter) => filter.contains !== undefined;\r\nconst isDoesntContainCondition = (filter) => filter.doesntContain !== undefined;\r\nconst isStartsWithCondition = (filter) => filter.startsWith !== undefined;\r\nconst isDoesntStartsWithCondition = (filter) => filter.doesntStartWith !== undefined;\r\nconst isEndsWithCondition = (filter) => filter.endsWith !== undefined;\r\nconst isDoesntEndWithCondition = (filter) => filter.doesntEndWith !== undefined;\r\nconst isBetweenCondition = (filter) => filter.from !== undefined && filter.to !== undefined;\r\nconst isNotBetweenCondition = (filter) => { var _a, _b; return ((_a = filter.exclude) === null || _a === void 0 ? void 0 : _a.from) !== undefined && ((_b = filter.exclude) === null || _b === void 0 ? void 0 : _b.to) !== undefined; };\r\nconst isMultipleCondition = (filter) => !!(filter.or || filter.and);\r\nexport const getSelectedConditionOption = (filter) => {\r\n    if (isBottomCondition(filter))\r\n        return ConditionFilterType.BOTTOM;\r\n    if (isTopCondition(filter))\r\n        return ConditionFilterType.TOP;\r\n    if (isExcludeCondition(filter))\r\n        return ConditionFilterType.IS_NOT;\r\n    if (isWithinCondition(filter))\r\n        return ConditionFilterType.IS_WITHIN;\r\n    if (isGreaterThanCondition(filter))\r\n        return ConditionFilterType.GREATER_THAN;\r\n    if (isLessThanCondition(filter))\r\n        return ConditionFilterType.LESS_THAN;\r\n    if (isEqualsCondition(filter))\r\n        return ConditionFilterType.EQUALS;\r\n    if (isNotEqualCondition(filter))\r\n        return ConditionFilterType.DOESNT_EQUAL;\r\n    if (isEmptyCondition(filter))\r\n        return ConditionFilterType.IS_EMPTY;\r\n    if (isNotEmptyCondition(filter))\r\n        return ConditionFilterType.IS_NOT_EMPTY;\r\n    if (isContainsCondition(filter))\r\n        return ConditionFilterType.CONTAINS;\r\n    if (isDoesntContainCondition(filter))\r\n        return ConditionFilterType.DOESNT_CONTAIN;\r\n    if (isDoesntEndWithCondition(filter))\r\n        return ConditionFilterType.DOESNT_END_WITH;\r\n    if (isDoesntStartsWithCondition(filter))\r\n        return ConditionFilterType.DOESNT_START_WITH;\r\n    if (isEndsWithCondition(filter))\r\n        return ConditionFilterType.ENDS_WITH;\r\n    if (isStartsWithCondition(filter))\r\n        return ConditionFilterType.STARTS_WITH;\r\n    if (isNotBetweenCondition(filter))\r\n        return ConditionFilterType.IS_NOT_BETWEEN;\r\n    if (isMembersCondition(filter))\r\n        return ConditionFilterType.IS;\r\n    if (isMultipleCondition(filter))\r\n        return ConditionFilterType.MULTIPLE_CONDITION;\r\n    // Need to verify BETWEEN case before the GREATER_THAN_OR_EQUAL and LESS_THAN_OR_EQUAL due to missing `filter.isBetween` property in some cases\r\n    if (isBetweenCondition(filter))\r\n        return ConditionFilterType.BETWEEN;\r\n    if (isGreaterThanOrEqualCondition(filter))\r\n        return ConditionFilterType.GREATER_THAN_OR_EQUAL;\r\n    if (isLessThanOrEqualCondition(filter))\r\n        return ConditionFilterType.LESS_THAN_OR_EQUAL;\r\n    return ConditionFilterType.NONE;\r\n};\r\n/**\r\n * Creates an attribute filter from the provided attribute and condition filter JAQL object\r\n *\r\n * @param attribute - Provided attribute\r\n * @param conditionFilterJaql - Condition filter JAQL object\r\n * @param guid - GUID for the filter\r\n * @returns attribute filter\r\n */\r\nexport const createAttributeFilterFromConditionFilterJaql = (attribute, conditionFilterJaql, guid) => {\r\n    var _a, _b, _c, _d, _e, _f, _g;\r\n    const conditionType = getSelectedConditionOption(conditionFilterJaql);\r\n    switch (conditionType) {\r\n        case ConditionFilterType.BOTTOM:\r\n            if (conditionFilterJaql.by) {\r\n                return filterFactory.bottomRanking(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.BOTTOM], { guid });\r\n            }\r\n            break;\r\n        case ConditionFilterType.EQUALS:\r\n            return filterFactory.equals(attribute, conditionFilterJaql[ConditionFilterType.EQUALS], { guid });\r\n        case ConditionFilterType.DOESNT_EQUAL:\r\n            return filterFactory.doesntEqual(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_EQUAL], { guid });\r\n        case ConditionFilterType.GREATER_THAN:\r\n            return filterFactory.greaterThan(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN], { guid });\r\n        case ConditionFilterType.GREATER_THAN_OR_EQUAL:\r\n            return filterFactory.greaterThanOrEqual(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], { guid });\r\n        case ConditionFilterType.TOP:\r\n            if (conditionFilterJaql.by) {\r\n                return filterFactory.topRanking(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.TOP], { guid });\r\n            }\r\n            break;\r\n        case ConditionFilterType.STARTS_WITH:\r\n            return filterFactory.startsWith(attribute, conditionFilterJaql[ConditionFilterType.STARTS_WITH], { guid });\r\n        case ConditionFilterType.DOESNT_START_WITH:\r\n            return filterFactory.doesntStartWith(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_START_WITH], { guid });\r\n        case ConditionFilterType.ENDS_WITH:\r\n            return filterFactory.endsWith(attribute, conditionFilterJaql[ConditionFilterType.ENDS_WITH], { guid });\r\n        case ConditionFilterType.DOESNT_END_WITH:\r\n            return filterFactory.doesntEndWith(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_END_WITH], { guid });\r\n        case ConditionFilterType.CONTAINS:\r\n            return filterFactory.contains(attribute, conditionFilterJaql[ConditionFilterType.CONTAINS], { guid });\r\n        case ConditionFilterType.DOESNT_CONTAIN:\r\n            return filterFactory.doesntContain(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_CONTAIN], { guid });\r\n        case ConditionFilterType.LESS_THAN:\r\n            return filterFactory.lessThan(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN], { guid });\r\n        case ConditionFilterType.LESS_THAN_OR_EQUAL:\r\n            return filterFactory.lessThanOrEqual(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], { guid });\r\n        case ConditionFilterType.BETWEEN:\r\n            return filterFactory.between(attribute, conditionFilterJaql.from, conditionFilterJaql.to, { guid });\r\n        case ConditionFilterType.IS_NOT_BETWEEN:\r\n            return filterFactory.exclude(filterFactory.between(attribute, (_a = conditionFilterJaql.exclude) === null || _a === void 0 ? void 0 : _a.from, (_b = conditionFilterJaql.exclude) === null || _b === void 0 ? void 0 : _b.to, { guid }), undefined, { guid });\r\n        case ConditionFilterType.MULTIPLE_CONDITION:\r\n            if (conditionFilterJaql.and) {\r\n                return filterFactory.intersection(conditionFilterJaql.and.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), { guid });\r\n            }\r\n            if (conditionFilterJaql.or) {\r\n                return filterFactory.union(conditionFilterJaql.or.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), { guid });\r\n            }\r\n            break;\r\n        case ConditionFilterType.IS_NOT: {\r\n            const deactivatedMembers = (((_c = conditionFilterJaql.filter) === null || _c === void 0 ? void 0 : _c.turnedOff) && ((_d = conditionFilterJaql.filter.exclude) === null || _d === void 0 ? void 0 : _d.members)) ||\r\n                [];\r\n            const selectedMembers = ((_f = (_e = conditionFilterJaql.exclude) === null || _e === void 0 ? void 0 : _e.members) === null || _f === void 0 ? void 0 : _f.filter((member) => !deactivatedMembers.includes(member))) || [];\r\n            // use members filter with exclude instead of exclude filter\r\n            const config = simplifyFilterConfig({\r\n                guid,\r\n                excludeMembers: true,\r\n                enableMultiSelection: (_g = conditionFilterJaql.multiSelection) !== null && _g !== void 0 ? _g : true,\r\n                deactivatedMembers,\r\n            });\r\n            return filterFactory.members(attribute, selectedMembers, config);\r\n        }\r\n        case ConditionFilterType.AFTER:\r\n        case ConditionFilterType.BEFORE:\r\n        case ConditionFilterType.IS_EMPTY:\r\n        case ConditionFilterType.IS_NOT_EMPTY:\r\n            // TODO Handle these cases later; may need filterFactory function added first\r\n            break;\r\n    }\r\n    throw new TranslatableError('errors.filter.unsupportedConditionFilter', {\r\n        filter: JSON.stringify(conditionFilterJaql),\r\n    });\r\n};\r\n/**\r\n * Creates a measure filter from the provided measure and condition filter JAQL object\r\n *\r\n * @param measure - Provided measure\r\n * @param conditionFilterJaql - Condition filter JAQL object\r\n * @param guid - GUID for the filter\r\n * @returns measure filter\r\n */\r\nexport const createMeasureFilterFromConditionFilterJaql = (measure, conditionFilterJaql, guid) => {\r\n    var _a, _b;\r\n    const conditionType = getSelectedConditionOption(conditionFilterJaql);\r\n    switch (conditionType) {\r\n        case ConditionFilterType.EQUALS:\r\n            return filterFactory.measureEquals(measure, conditionFilterJaql[ConditionFilterType.EQUALS], { guid });\r\n        case ConditionFilterType.GREATER_THAN:\r\n            return filterFactory.measureGreaterThan(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN], { guid });\r\n        case ConditionFilterType.GREATER_THAN_OR_EQUAL:\r\n            return filterFactory.measureGreaterThanOrEqual(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], { guid });\r\n        case ConditionFilterType.LESS_THAN:\r\n            return filterFactory.measureLessThan(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN], { guid });\r\n        case ConditionFilterType.LESS_THAN_OR_EQUAL:\r\n            return filterFactory.measureLessThanOrEqual(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], { guid });\r\n        case ConditionFilterType.BETWEEN:\r\n            return filterFactory.measureBetween(measure, conditionFilterJaql.from, conditionFilterJaql.to, { guid });\r\n        case ConditionFilterType.IS_NOT_BETWEEN:\r\n            return filterFactory.exclude(filterFactory.measureBetween(measure, (_a = conditionFilterJaql.exclude) === null || _a === void 0 ? void 0 : _a.from, (_b = conditionFilterJaql.exclude) === null || _b === void 0 ? void 0 : _b.to, { guid }), undefined, { guid });\r\n    }\r\n    throw new TranslatableError('errors.filter.unsupportedConditionFilter', {\r\n        filter: JSON.stringify(conditionFilterJaql),\r\n    });\r\n};\r\n//# sourceMappingURL=condition-filter-util.js.map","import { DatetimeLevel } from './types.js';\r\nexport const getCorrectTimeLevel = (level, bucket) => {\r\n    let newLevel = level ? level.toLocaleLowerCase() : DatetimeLevel.YEARS;\r\n    if (newLevel === DatetimeLevel.MINUTES && bucket === '60') {\r\n        newLevel = DatetimeLevel.HOURS;\r\n    }\r\n    return newLevel;\r\n};\r\n//# sourceMappingURL=date-time-filter-util.js.map","import { getSelectedConditionOption } from './condition-filter-util.js';\r\nimport { getCorrectTimeLevel } from './date-time-filter-util.js';\r\nimport { ConditionFilterType, DatetimeLevel, DEFAULT_FILTER_JAQL_WRAPPER, FILTER_TYPES, FilterModalType, nonSupportedMinutesBuckets, } from './types.js';\r\nconst isIncludeAllFilter = (filter) => filter === null || filter === void 0 ? void 0 : filter.all;\r\nconst getInnerPeriodFilter = (filter) => (filter.last ? filter.last : filter.next);\r\nconst isPeriodFilter = (filter) => { var _a; return ((_a = getInnerPeriodFilter(filter)) === null || _a === void 0 ? void 0 : _a.offset) < 2; };\r\nexport const isSpecificItemsFilter = (filter) => { var _a; return ((_a = filter === null || filter === void 0 ? void 0 : filter.members) === null || _a === void 0 ? void 0 : _a.length) >= 0; };\r\nconst isFromOrToDefined = (fromRange, toRange) => (fromRange && typeof fromRange === 'string') || (toRange && typeof toRange === 'string');\r\nconst isFromAndToEmpty = (from, to) => from === '' && to === '';\r\nconst isDateRangeFilter = (filter, dataType) => {\r\n    const { from, to } = filter;\r\n    if (dataType !== FilterModalType.DATE_TIME)\r\n        return false;\r\n    if (isFromOrToDefined(from, to))\r\n        return true;\r\n    return isFromAndToEmpty(from, to);\r\n};\r\nexport const isNumericRangeFilter = (filter) => {\r\n    const { from, to } = filter;\r\n    return !!(from !== undefined && to !== undefined && !filter.isBetween);\r\n};\r\nexport const isConditionFilter = (filter) => getSelectedConditionOption(filter) !== ConditionFilterType.NONE;\r\nconst isAdvancedFilter = (filter) => Object.keys(filter).includes('isAdvanced');\r\nconst isTimeLevelNotSupported = (timeData) => !!(timeData.level &&\r\n    timeData.bucket &&\r\n    timeData.level === DatetimeLevel.MINUTES &&\r\n    nonSupportedMinutesBuckets.includes(timeData.bucket));\r\nconst isInvalidFilter = (filter) => filter.filterType === FILTER_TYPES.INVALID;\r\nexport const getFilterType = (filter, dataType = FilterModalType.DATE_TIME, timeData) => {\r\n    if (timeData && isTimeLevelNotSupported(timeData))\r\n        return FILTER_TYPES.ADVANCED;\r\n    if (isAdvancedFilter(filter))\r\n        return FILTER_TYPES.ADVANCED;\r\n    if (isIncludeAllFilter(filter))\r\n        return FILTER_TYPES.INCLUDE_ALL;\r\n    if (isPeriodFilter(filter))\r\n        return FILTER_TYPES.PERIOD;\r\n    if (isSpecificItemsFilter(filter))\r\n        return FILTER_TYPES.SPECIFIC_ITEMS;\r\n    if (isDateRangeFilter(filter, dataType))\r\n        return FILTER_TYPES.DATE_RANGE;\r\n    if (isNumericRangeFilter(filter))\r\n        return FILTER_TYPES.NUMERIC_RANGE;\r\n    if (isConditionFilter(filter))\r\n        return FILTER_TYPES.CONDITION;\r\n    if (isInvalidFilter(filter))\r\n        return FILTER_TYPES.INVALID;\r\n    return FILTER_TYPES.INVALID;\r\n};\r\n/**\r\n * Extracts Filter Type from Filter Jaql\r\n *\r\n * @param jaql - jaql\r\n * @param dataType - data type\r\n * @return FilterJaqlWrapperType\r\n * @internal\r\n */\r\nexport const extractFilterTypeFromFilterJaql = (jaql, dataType) => {\r\n    const { level: filterLevel, filter, bucket } = jaql;\r\n    const filterFromJaql = filter || DEFAULT_FILTER_JAQL_WRAPPER.filter;\r\n    const filterToReturn = {\r\n        filter: Object.assign(Object.assign({}, filterFromJaql), { filterType: getFilterType(filterFromJaql, dataType) }),\r\n    };\r\n    if (dataType === FilterModalType.DATE_TIME) {\r\n        const backgroundFilter = filterFromJaql;\r\n        const level = (backgroundFilter === null || backgroundFilter === void 0 ? void 0 : backgroundFilter.level) || filterLevel;\r\n        filterToReturn.level = getCorrectTimeLevel(level, bucket);\r\n        filterToReturn.filter.filterType = getFilterType(filterFromJaql, dataType, { level, bucket });\r\n    }\r\n    return filterToReturn;\r\n};\r\n//# sourceMappingURL=filter-types-util.js.map","import { TranslatableError } from '../../../translation/translatable-error.js';\r\nimport * as filterFactory from '../factory.js';\r\nimport { getDefaultBaseFilterConfig, simplifyFilterConfig } from '../filter-config-utils.js';\r\nimport { createAttributeFromFilterJaql, createMeasureFromFilterJaql, } from './attribute-measure-util.js';\r\nimport { createAttributeFilterFromConditionFilterJaql, createMeasureFilterFromConditionFilterJaql, } from './condition-filter-util.js';\r\nimport { extractFilterTypeFromFilterJaql } from './filter-types-util.js';\r\nimport { FILTER_TYPES, } from './types.js';\r\n/**\r\n * Creates a generic filter (aka pass-through JAQL filter) if the JAQL cannot be translated to a specific filter type.\r\n *\r\n * @param jaql - The JAQL object.\r\n * @param guid - Optional GUID for the filter\r\n * @returns A generic Filter object.\r\n */\r\nexport const createGenericFilter = (jaql, guid) => {\r\n    const baseFilter = {\r\n        config: Object.assign(Object.assign({}, getDefaultBaseFilterConfig()), { guid, originalFilterJaql: jaql }),\r\n        jaql: (nested) => {\r\n            if (nested) {\r\n                return jaql;\r\n            }\r\n            return {\r\n                jaql,\r\n                panel: 'scope',\r\n            };\r\n        },\r\n        attribute: {\r\n            id: jaql.dim,\r\n        },\r\n        type: 'filter',\r\n    };\r\n    return Object.assign({}, baseFilter);\r\n};\r\n/**\r\n * Creates a filter that includes all members of the attribute.\r\n *\r\n * @param attribute - The attribute.\r\n * @param guid - GUID for the filter\r\n * @returns The created Filter object.\r\n */\r\nexport const createFilterIncludeAll = (attribute, guid) => {\r\n    // empty members array is interpreted by server as all members are included\r\n    return filterFactory.members(attribute, [], { guid });\r\n};\r\n/**\r\n * Creates a filter from a specific items filter JAQL object.\r\n *\r\n * @param attribute - attribute\r\n * @param specificItemsFilterJaql - Specific Items Filter Jaql\r\n * @param guid - GUID for the filter\r\n * @returns Filter object\r\n */\r\nexport const createFilterFromSpecificItemsFilterJaql = (attribute, specificItemsFilterJaql, guid, multiSelection) => {\r\n    const deactivatedMembers = getDeactivatedMembersFromFilterJaql(specificItemsFilterJaql);\r\n    const activeMembers = getActiveMembersFromFilterJaql(specificItemsFilterJaql, deactivatedMembers);\r\n    const config = simplifyFilterConfig({\r\n        guid,\r\n        excludeMembers: false,\r\n        enableMultiSelection: multiSelection !== null && multiSelection !== void 0 ? multiSelection : true,\r\n        deactivatedMembers,\r\n    });\r\n    return filterFactory.members(attribute, activeMembers, config);\r\n};\r\nfunction getDeactivatedMembersFromFilterJaql(filterJaql) {\r\n    var _a, _b, _c, _d;\r\n    return ((_a = filterJaql.filter) === null || _a === void 0 ? void 0 : _a.turnedOff) ? (_d = (_c = (_b = filterJaql.filter) === null || _b === void 0 ? void 0 : _b.exclude) === null || _c === void 0 ? void 0 : _c.members) !== null && _d !== void 0 ? _d : [] : [];\r\n}\r\nfunction getActiveMembersFromFilterJaql(filterJaql, deactivatedMembers) {\r\n    const allMembers = filterJaql.members;\r\n    return deactivatedMembers\r\n        ? allMembers.filter((member) => !deactivatedMembers.includes(member))\r\n        : allMembers;\r\n}\r\n/**\r\n * Creates a filter from a date range filter JAQL object.\r\n *\r\n * @param attribute - attribute\r\n * @param rangeFilterJaql - Range Filter Jaql\r\n * @param guid - GUID for the filter\r\n * @returns Filter object\r\n */\r\nexport const createFilterFromDateRangeFilterJaql = (attribute, rangeFilterJaql, guid) => {\r\n    return filterFactory.dateRange(attribute, rangeFilterJaql.from, rangeFilterJaql.to, { guid });\r\n};\r\n/**\r\n * Creates a filter from a numeric range filter JAQL object.\r\n *\r\n * @param attribute - attribute\r\n * @param rangeFilterJaql - Range Filter Jaql\r\n * @param guid - GUID for the filter\r\n * @returns Filter object\r\n */\r\nexport const createFilterFromNumericRangeJaql = (attribute, rangeFilterJaql, guid) => {\r\n    return filterFactory.between(attribute, rangeFilterJaql.from, rangeFilterJaql.to, { guid });\r\n};\r\n/**\r\n * Creates a filter from a period filter JAQL object.\r\n *\r\n * @param attribute - attribute\r\n * @param periodFilterJaql - Period Filter Jaql\r\n * @param guid - GUID for the filter\r\n * @returns Filter object\r\n */\r\nexport const createFilterFromPeriodFilterJaql = (attribute, periodFilterJaql, guid) => {\r\n    if (periodFilterJaql.last) {\r\n        return filterFactory.dateRelativeTo(attribute, periodFilterJaql.last.offset, periodFilterJaql.last.count, periodFilterJaql.last.anchor, { guid });\r\n    }\r\n    else {\r\n        return filterFactory.dateRelativeFrom(attribute, periodFilterJaql.next.offset, periodFilterJaql.next.count, periodFilterJaql.next.anchor, { guid });\r\n    }\r\n};\r\n/**\r\n * Creates a filter from a custom filter JAQL object.\r\n *\r\n * @param attribute - attribute\r\n * @param customFilterJaql - Custom Filter Jaql\r\n * @param guid - GUID for the filter\r\n * @returns Filter object\r\n */\r\nexport const createFilterFromCustomFilterJaql = (attribute, customFilterJaql, guid) => {\r\n    return filterFactory.customFilter(attribute, customFilterJaql, {\r\n        guid,\r\n    });\r\n};\r\n/**\r\n * Creates a filter from a filter JAQL object.\r\n *\r\n * @param jaql - The filter JAQL object.\r\n * @param guid - GUID for the filter\r\n * @returns Filter object.\r\n */\r\nexport const createFilterFromJaqlInternal = (jaql, guid) => {\r\n    try {\r\n        if ('formula' in jaql) {\r\n            // generic pass-through JAQL filter will be used instead\r\n            throw new TranslatableError('errors.filter.formulaFiltersNotSupported', {\r\n                filter: JSON.stringify(jaql),\r\n            });\r\n        }\r\n        const filterJaqlWrapperWithType = extractFilterTypeFromFilterJaql(jaql, jaql.datatype);\r\n        const { filter: filterJaqlWithType } = filterJaqlWrapperWithType;\r\n        const { filterType } = filterJaqlWithType;\r\n        const attribute = createAttributeFromFilterJaql(jaql);\r\n        const measure = createMeasureFromFilterJaql(jaql);\r\n        switch (filterType) {\r\n            case FILTER_TYPES.INCLUDE_ALL:\r\n                return createFilterIncludeAll(attribute, guid);\r\n            case FILTER_TYPES.SPECIFIC_ITEMS:\r\n                return createFilterFromSpecificItemsFilterJaql(attribute, filterJaqlWithType, guid, filterJaqlWithType.multiSelection);\r\n            case FILTER_TYPES.CONDITION:\r\n                if (measure) {\r\n                    return createMeasureFilterFromConditionFilterJaql(measure, filterJaqlWithType, guid);\r\n                }\r\n                else {\r\n                    return createAttributeFilterFromConditionFilterJaql(attribute, filterJaqlWithType, guid);\r\n                }\r\n            case FILTER_TYPES.DATE_RANGE:\r\n                return createFilterFromDateRangeFilterJaql(attribute, filterJaqlWithType, guid);\r\n            case FILTER_TYPES.PERIOD:\r\n                return createFilterFromPeriodFilterJaql(attribute, filterJaqlWithType, guid);\r\n            case FILTER_TYPES.NUMERIC_RANGE:\r\n                return createFilterFromNumericRangeJaql(attribute, filterJaqlWithType, guid);\r\n            case FILTER_TYPES.ADVANCED:\r\n                return createFilterFromCustomFilterJaql(attribute, filterJaqlWithType, guid);\r\n            case FILTER_TYPES.INVALID:\r\n                return createGenericFilter(jaql, guid);\r\n        }\r\n    }\r\n    catch (e) {\r\n        // if a filter type is untranslatable, fall back to the generic pass-through JAQL filter\r\n        console.debug('Fall back to generic pass-through JAQL filter due to filter translation error:', e);\r\n    }\r\n    return createGenericFilter(jaql, guid);\r\n};\r\n//# sourceMappingURL=filter-from-jaql-util.js.map","/**\r\n * @param type\r\n * @internal\r\n */\r\nexport const isInteger = (type) => {\r\n    return [\r\n        '__int4',\r\n        '__int8',\r\n        'int',\r\n        'tinyint',\r\n        'bigint',\r\n        'int2',\r\n        'int4',\r\n        'int8',\r\n        'smallint',\r\n        'mediumint',\r\n        'serial',\r\n        'integer',\r\n        'byteint',\r\n        'int64',\r\n    ].includes(type.toLowerCase());\r\n};\r\n/**\r\n * @param type\r\n * @internal\r\n */\r\nexport const isDecimal = (type) => {\r\n    return [\r\n        'basemeasure',\r\n        'calculatedmeasure',\r\n        'float',\r\n        'float4',\r\n        'float8',\r\n        'double precision',\r\n        'double',\r\n        'numeric',\r\n        'decimal',\r\n        'real',\r\n        'number',\r\n        'float64',\r\n    ].includes(type.toLowerCase());\r\n};\r\n/**\r\n * @param type\r\n * @internal\r\n */\r\nexport const isNumber = (type) => {\r\n    return isInteger(type) || isDecimal(type) || type === 'numeric-attribute';\r\n};\r\n/**\r\n * @param type\r\n * @internal\r\n */\r\nexport const isText = (type) => {\r\n    return [\r\n        'textdimension',\r\n        'string',\r\n        'varchar',\r\n        'text',\r\n        'ntext',\r\n        'char',\r\n        'character',\r\n        'character varying',\r\n        'smalltext',\r\n        'nchar',\r\n        'nvarchar',\r\n        'json',\r\n        'jsonb',\r\n        'object',\r\n        'text-attribute',\r\n    ].includes(type.toLowerCase());\r\n};\r\n/**\r\n * @param type\r\n * @internal\r\n */\r\nexport const isDatetime = (type) => {\r\n    return [\r\n        'datelevel',\r\n        'date',\r\n        'time',\r\n        'datetime',\r\n        'timestamp without time zone',\r\n        'timestamp',\r\n        'timestamp with time zone',\r\n        'timestamp(6)',\r\n        'timestamp_tz',\r\n        'timestamp_ntz',\r\n        'timestamp_ltz',\r\n        'timestampltz',\r\n        'timestampntz',\r\n        'timestamptz',\r\n        'datetime64[ns]',\r\n        'timewithtimezone',\r\n        'timestampwithtimezone',\r\n        'timestamp_with_timezone',\r\n    ].includes(type.toLowerCase());\r\n};\r\n/**\r\n * @param type\r\n * @internal\r\n */\r\nexport const isBoolean = (type) => {\r\n    return ['bool', 'boolean', 'bit', 'logical'].includes(type.toLowerCase());\r\n};\r\n/**\r\n * @param type\r\n * @internal\r\n */\r\nexport const simpleColumnType = (type) => {\r\n    if (isNumber(type)) {\r\n        return 'number';\r\n    }\r\n    if (isDatetime(type)) {\r\n        return 'datetime';\r\n    }\r\n    if (isText(type)) {\r\n        return 'text';\r\n    }\r\n    if (isBoolean(type)) {\r\n        return 'boolean';\r\n    }\r\n    return 'text';\r\n};\r\n//# sourceMappingURL=simple-column-types.js.map","import cloneDeep from 'lodash-es/cloneDeep.js';\r\nimport mapValues from 'lodash-es/mapValues.js';\r\nimport { DimensionalAttribute, DimensionalLevelAttribute } from './dimensional-model/attributes.js';\r\nimport { isCascadingFilter } from './dimensional-model/filters/filters.js';\r\nimport { createFilterFromJaqlInternal } from './dimensional-model/filters/utils/filter-from-jaql-util.js';\r\nimport * as measureFactory from './dimensional-model/measures/factory.js';\r\nimport { DimensionalBaseMeasure } from './dimensional-model/measures/measures.js';\r\nimport { isDatetime, isNumber } from './dimensional-model/simple-column-types.js';\r\nimport { AggregationTypes, DataType, DateLevels, JaqlSortDirection, MetadataTypes, Sort, } from './dimensional-model/types.js';\r\n/**\r\n * A more performant, but slightly bulkier, RFC4122v4 implementation. Performance is improved by minimizing calls to random()\r\n *\r\n * @internal\r\n */\r\nexport const guidFast = function (len) {\r\n    if (!len) {\r\n        len = 20;\r\n    }\r\n    const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\r\n    const uuid = new Array(len);\r\n    let rnd = 0;\r\n    let r;\r\n    for (let i = 0; i < len; i += 1) {\r\n        if (i > 0 && i % 5 == 0) {\r\n            uuid[i] = '-';\r\n            continue;\r\n        }\r\n        if (rnd <= 0x02) {\r\n            rnd = (0x2000000 + Math.random() * 0x1000000) | 0;\r\n        }\r\n        r = rnd & 0xf;\r\n        rnd = rnd >> 4;\r\n        uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];\r\n    }\r\n    return uuid.join('');\r\n};\r\n/**\r\n * Function to separate list of filters from the provided relation and get logical relations for jaql\r\n *\r\n * @internal\r\n */\r\nexport const getFilterListAndRelationsJaql = (filterRelations) => {\r\n    if (!filterRelations) {\r\n        return { filters: undefined, relations: undefined };\r\n    }\r\n    if (Array.isArray(filterRelations)) {\r\n        return { filters: filterRelations, relations: undefined };\r\n    }\r\n    const filters = new Set();\r\n    function traverseCascade(cascade) {\r\n        const [firstFilter, ...restFilters] = cascade;\r\n        filters.add(firstFilter);\r\n        if (!restFilters.length) {\r\n            return traverse({ instanceid: firstFilter.config.guid });\r\n        }\r\n        const left = traverse(firstFilter);\r\n        const right = traverseCascade(restFilters);\r\n        return { left, right, operator: 'AND' };\r\n    }\r\n    function traverse(node) {\r\n        if (!node)\r\n            return node;\r\n        if (isFilter(node)) {\r\n            if (isCascadingFilter(node)) {\r\n                return traverseCascade(node.filters);\r\n            }\r\n            filters.add(node);\r\n            return { instanceid: node.config.guid };\r\n        }\r\n        else {\r\n            if ('left' in node) {\r\n                node.left = traverse(node.left);\r\n            }\r\n            if ('right' in node) {\r\n                node.right = traverse(node.right);\r\n            }\r\n            if ('composeCode' in node) {\r\n                delete node.composeCode;\r\n            }\r\n            return node;\r\n        }\r\n    }\r\n    // Create a deep copy of filterRelations to avoid mutation\r\n    const copiedFilterRelations = cloneDeep(filterRelations);\r\n    const relations = traverse(copiedFilterRelations);\r\n    return { filters: Array.from(filters), relations };\r\n};\r\nfunction isFilter(node) {\r\n    return 'config' in node && 'guid' in node.config;\r\n}\r\n/**\r\n * Gets the name of the data source\r\n *\r\n * @internal\r\n */\r\nexport function getDataSourceName(dataSource) {\r\n    return typeof dataSource === 'string' ? dataSource : dataSource.title;\r\n}\r\n/**\r\n * Checks if the provided 'dataSource' is a data source info structure that contains more than just the data source name.\r\n *\r\n * @internal\r\n */\r\nexport function isDataSourceInfo(dataSource) {\r\n    return typeof dataSource === 'object' && 'type' in dataSource && 'title' in dataSource;\r\n}\r\n/**\r\n * Converts a JaqlDataSource to DataSource.\r\n *\r\n * @internal\r\n */\r\nexport function convertDataSource(jaqlDataSource) {\r\n    return {\r\n        id: jaqlDataSource.id,\r\n        address: jaqlDataSource.address,\r\n        title: jaqlDataSource.title,\r\n        type: jaqlDataSource.live ? 'live' : 'elasticube',\r\n    };\r\n}\r\n/**\r\n * Converts a DataSource to a description of data source used in JAQL.\r\n *\r\n * @internal\r\n */\r\nexport function convertJaqlDataSource(dataSource) {\r\n    return isDataSourceInfo(dataSource)\r\n        ? {\r\n            title: dataSource.title,\r\n            live: dataSource.type === 'live',\r\n        }\r\n        : {\r\n            title: dataSource,\r\n            live: false,\r\n        };\r\n}\r\n/**\r\n * Converts a DataSource to JaqlDataSourceForDto.\r\n *\r\n * @internal\r\n */\r\nexport function convertJaqlDataSourceForDto(dataSource) {\r\n    var _a;\r\n    if (isDataSourceInfo(dataSource)) {\r\n        return {\r\n            title: dataSource.title,\r\n            live: dataSource.type === 'live',\r\n            id: (_a = dataSource.id) !== null && _a !== void 0 ? _a : '',\r\n            address: dataSource.address,\r\n        };\r\n    }\r\n    else {\r\n        return {\r\n            title: dataSource,\r\n            id: '',\r\n        };\r\n    }\r\n}\r\n/**\r\n * Converts a string to a Sort enum\r\n *\r\n * @param sort - The string to convert\r\n * @returns The converted Sort enum\r\n * @internal\r\n */\r\nexport function convertSort(sort) {\r\n    if (sort) {\r\n        return sort === 'asc' ? Sort.Ascending : Sort.Descending;\r\n    }\r\n    else {\r\n        return Sort.None;\r\n    }\r\n}\r\n/**\r\n * Converts a SortDirection to a Sort enum\r\n *\r\n * @param sortDirection - The SortDirection to convert\r\n * @returns The converted Sort enum\r\n * @internal\r\n */\r\nexport function convertSortDirectionToSort(sortDirection) {\r\n    switch (sortDirection) {\r\n        case 'sortAsc':\r\n            return Sort.Ascending;\r\n        case 'sortDesc':\r\n            return Sort.Descending;\r\n        default:\r\n            return Sort.None;\r\n    }\r\n}\r\n/**\r\n * Creates a filter from a JAQL object.\r\n *\r\n * @param jaql - The filter JAQL object.\r\n * @param instanceid - Optional instance ID.\r\n * @param disabled - Optional disabled flag.\r\n * @param locked - Optional locked flag.\r\n * @returns - The created Filter object.\r\n * @internal\r\n */\r\nexport const createFilterFromJaql = (jaql, instanceid, disabled = false, locked = false) => {\r\n    // translation logic is based on FilterJaqlInternal type (from internal modern-analytics-filters)\r\n    // TODO reconcile FilterJaql and FilterJaqlInternal\r\n    const hasBackgroundFilter = jaql.filter.filter && !('turnedOff' in jaql.filter.filter);\r\n    const guid = instanceid || guidFast();\r\n    const filter = createFilterFromJaqlInternal(jaql, guid);\r\n    if (hasBackgroundFilter) {\r\n        const backgroundFilter = createFilterFromJaqlInternal(Object.assign(Object.assign({}, jaql), { filter: jaql.filter.filter }), `${instanceid}-bg`);\r\n        const config = filter.config;\r\n        filter.config = Object.assign(Object.assign({}, config), { backgroundFilter });\r\n        return filter;\r\n    }\r\n    filter.config = Object.assign(Object.assign({}, filter.config), { originalFilterJaql: jaql, disabled, locked });\r\n    return filter;\r\n};\r\n/**\r\n * Extracts the table and column names from the given expression string.\r\n *\r\n * @internal\r\n */\r\nexport function parseExpression(expression) {\r\n    const [table, column] = expression.slice(1, -1).split('.');\r\n    return {\r\n        table,\r\n        column: column\r\n            ? column\r\n                // in case of Date we have to remove the (Calendar) part\r\n                .replace('(Calendar)', '')\r\n                .trim()\r\n            : '',\r\n    };\r\n}\r\n/**\r\n * Retrieves the table value from the attribute.\r\n *\r\n * @internal\r\n */\r\nexport function getTableNameFromAttribute(attribute) {\r\n    return parseExpression(attribute.expression).table;\r\n}\r\n/**\r\n * Retrieves the column value from the attribute.\r\n *\r\n * @internal\r\n */\r\nexport function getColumnNameFromAttribute(attribute) {\r\n    return parseExpression(attribute.expression).column;\r\n}\r\n/**\r\n * Gets the sort type based on the jaql sort direction.\r\n *\r\n * @param jaqlSort - The jaql sort direction.\r\n * @returns  The sort direction.\r\n * @internal\r\n */\r\nexport function getSortType(jaqlSort) {\r\n    switch (jaqlSort) {\r\n        case JaqlSortDirection.ASC:\r\n            return 'sortAsc';\r\n        case JaqlSortDirection.DESC:\r\n            return 'sortDesc';\r\n        default:\r\n            return 'sortNone';\r\n    }\r\n}\r\n/**\r\n * Creates an attribute or level attribute from the provided parameters\r\n *\r\n * @returns attribute or level attribute\r\n * @internal\r\n */\r\nexport const createAttributeHelper = ({ expression, dataType, granularity, format, sort, title, panel, dataSource, }) => {\r\n    const column = parseExpression(expression).column;\r\n    const sortEnum = convertSort(sort);\r\n    const isDataTypeDatetime = dataType === DataType.DATETIME;\r\n    if (isDataTypeDatetime) {\r\n        const levelAttribute = new DimensionalLevelAttribute(title !== null && title !== void 0 ? title : column, expression, granularity || DateLevels.Years, format ||\r\n            DimensionalLevelAttribute.getDefaultFormatForGranularity(granularity || DateLevels.Years), undefined, sortEnum, dataSource, undefined, panel);\r\n        return levelAttribute;\r\n    }\r\n    const attributeType = !dataType || isNumber(dataType) ? MetadataTypes.NumericAttribute : MetadataTypes.TextAttribute;\r\n    const attribute = new DimensionalAttribute(title !== null && title !== void 0 ? title : column, expression, attributeType, undefined, sortEnum, dataSource, undefined, panel);\r\n    return attribute;\r\n};\r\n/**\r\n * Creates a measure from the provided parameters\r\n *\r\n * @returns measure\r\n * @internal\r\n */\r\nexport const createMeasureHelper = ({ expression, dataType, agg, granularity, format, sort, title, dataSource, }) => {\r\n    const attribute = createAttributeHelper({\r\n        expression,\r\n        dataType,\r\n        granularity,\r\n        format,\r\n        sort,\r\n        title,\r\n        dataSource,\r\n    });\r\n    const tranformedAgg = DimensionalBaseMeasure.aggregationFromJAQL(agg);\r\n    const column = parseExpression(expression).column;\r\n    const updatedTitle = title !== null && title !== void 0 ? title : `${tranformedAgg} ${column}`;\r\n    switch (tranformedAgg) {\r\n        case AggregationTypes.Sum:\r\n            return measureFactory.sum(attribute, updatedTitle, format);\r\n        case AggregationTypes.Average:\r\n            return measureFactory.avg(attribute, updatedTitle, format);\r\n        case AggregationTypes.Min:\r\n            return measureFactory.min(attribute, updatedTitle, format);\r\n        case AggregationTypes.Max:\r\n            return measureFactory.max(attribute, updatedTitle, format);\r\n        case AggregationTypes.Count:\r\n            return measureFactory.count(attribute, updatedTitle, format);\r\n        case AggregationTypes.CountDistinct:\r\n            return measureFactory.countDistinct(attribute, updatedTitle, format);\r\n        case AggregationTypes.Median:\r\n            return measureFactory.median(attribute, updatedTitle, format);\r\n        case AggregationTypes.Variance:\r\n            return measureFactory.aggregate(attribute, AggregationTypes.Variance, updatedTitle, format);\r\n        case AggregationTypes.StandardDeviation:\r\n            return measureFactory.aggregate(attribute, AggregationTypes.StandardDeviation, updatedTitle, format);\r\n        default:\r\n            return measureFactory.sum(attribute, updatedTitle, format);\r\n    }\r\n};\r\n/**\r\n * Creates a measure from the provided parameters\r\n *\r\n * @returns calculated measure\r\n * @internal\r\n */\r\nexport const createCalculatedMeasureHelper = (jaql) => {\r\n    var _a;\r\n    const context = mapValues((_a = jaql.context) !== null && _a !== void 0 ? _a : {}, (jaqlContextValue) => {\r\n        if (typeof jaqlContextValue === 'string') {\r\n            return jaqlContextValue;\r\n        }\r\n        return jaqlContextValue && createDimensionalElementFromJaql(jaqlContextValue);\r\n    });\r\n    return measureFactory.customFormula(jaql.title, jaql.formula, context);\r\n};\r\n/**\r\n * Creates a dimensional element from a JAQL object.\r\n *\r\n * @param jaql - The JAQL object.\r\n * @param datetimeFormat - The datetime format.\r\n * @returns The created dimensional element.\r\n * @internal\r\n */\r\nexport function createDimensionalElementFromJaql(jaql, datetimeFormat, panel) {\r\n    const isFilterJaql = 'filter' in jaql;\r\n    if (isFilterJaql) {\r\n        return createFilterFromJaql(jaql);\r\n    }\r\n    const isFormulaJaql = 'formula' in jaql;\r\n    if (isFormulaJaql) {\r\n        return createCalculatedMeasureHelper(jaql);\r\n    }\r\n    const dataSource = 'datasource' in jaql ? jaql.datasource : undefined;\r\n    const hasAggregation = !!jaql.agg;\r\n    if (hasAggregation) {\r\n        return createMeasureHelper({\r\n            expression: jaql.dim,\r\n            dataType: jaql.datatype,\r\n            agg: jaql.agg || '',\r\n            granularity: getGranularityFromJaql(jaql),\r\n            format: datetimeFormat,\r\n            sort: jaql.sort,\r\n            title: jaql.title,\r\n            dataSource,\r\n        });\r\n    }\r\n    return createAttributeHelper({\r\n        expression: jaql.dim,\r\n        dataType: jaql.datatype,\r\n        granularity: getGranularityFromJaql(jaql),\r\n        format: datetimeFormat,\r\n        sort: jaql.sort,\r\n        title: jaql.title,\r\n        panel: panel,\r\n        dataSource,\r\n    });\r\n}\r\n/**\r\n * Returns the granularity from the provided JAQL object.\r\n *\r\n * @param jaql - The JAQL object.\r\n * @returns string.\r\n * @internal\r\n */\r\nexport function getGranularityFromJaql(jaql) {\r\n    return (jaql === null || jaql === void 0 ? void 0 : jaql.datatype) && isDatetime(jaql.datatype)\r\n        ? DimensionalLevelAttribute.translateJaqlToGranularity(jaql)\r\n        : undefined;\r\n}\r\n//# sourceMappingURL=utils.js.map","/* eslint-disable max-params */\r\n/* eslint-disable no-underscore-dangle */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\r\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\r\n/* eslint-disable sonarjs/no-nested-switch */\r\nimport { parseExpression } from '../utils.js';\r\nimport { DimensionalElement, normalizeName } from './base.js';\r\nimport { DATA_MODEL_MODULE_NAME } from './consts.js';\r\nimport { simpleColumnType } from './simple-column-types.js';\r\nimport { DateLevels, MetadataTypes, Sort, } from './types.js';\r\n/**\r\n * @internal\r\n */\r\nexport const jaqlSimpleColumnType = (datatype) => simpleColumnType(datatype).replace('number', 'numeric');\r\n/**\r\n * @internal\r\n */\r\nexport class DimensionalAttribute extends DimensionalElement {\r\n    constructor(name, expression, type, desc, sort, dataSource, composeCode, panel) {\r\n        super(name, type || MetadataTypes.Attribute, desc, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalAttribute';\r\n        this._sort = Sort.None;\r\n        this.expression = expression;\r\n        // if composeCode is not explicitly set by the caller, extract it from expression\r\n        if (!composeCode && expression) {\r\n            const { table, column } = parseExpression(expression);\r\n            this.composeCode = normalizeAttributeName(table, column, '', DATA_MODEL_MODULE_NAME);\r\n        }\r\n        // panel is not needed in most cases, this is to support break by columns functionality\r\n        if (panel === 'columns') {\r\n            this.panel = panel;\r\n        }\r\n        this._sort = sort || Sort.None;\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        return this.expression;\r\n    }\r\n    /**\r\n     * Gets the sort definition of this instance\r\n     *\r\n     * @returns The Sort definition of this instance\r\n     */\r\n    getSort() {\r\n        return this._sort;\r\n    }\r\n    /**\r\n     * Gets a sorted {@link Attribute} with the given definition\r\n     *\r\n     * @param sort - Sort definition\r\n     * @returns An instance representing the sorted {@link Attribute} of this instance\r\n     */\r\n    sort(sort) {\r\n        return new DimensionalAttribute(this.name, this.expression, this.type, this.description, sort, this.dataSource, this.composeCode, this.panel);\r\n    }\r\n    /**\r\n     * Gets the JAQL representation of this instance\r\n     *\r\n     * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element\r\n     */\r\n    jaql(nested) {\r\n        const result = {\r\n            jaql: {\r\n                title: this.name,\r\n                dim: this.expression,\r\n                datatype: jaqlSimpleColumnType(this.type),\r\n            },\r\n        };\r\n        if (this.panel) {\r\n            result.panel = this.panel;\r\n        }\r\n        if (this._sort != Sort.None) {\r\n            result.jaql.sort = this._sort == Sort.Ascending ? 'asc' : 'desc';\r\n        }\r\n        return nested === true ? result.jaql : result;\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.expression = this.expression;\r\n        if (this.getSort() !== Sort.None) {\r\n            result.sort = this.getSort();\r\n        }\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const isDimensionalAttribute = (v) => {\r\n    return Boolean(v && v.__serializable === 'DimensionalAttribute');\r\n};\r\n/**\r\n * @internal\r\n */\r\nexport class DimensionalLevelAttribute extends DimensionalAttribute {\r\n    constructor(name, expression, granularity, format, desc, sort, dataSource, composeCode, panel) {\r\n        super(name, expression, MetadataTypes.DateLevel, desc, sort, dataSource, composeCode);\r\n        /**\r\n         * @internal\r\n         */\r\n        this.__serializable = 'DimensionalLevelAttribute';\r\n        this._format = format;\r\n        this.granularity = granularity;\r\n        // if composeCode is not explicitly set by the caller, extract it from expression and granularity\r\n        if (!composeCode && expression) {\r\n            const { table, column } = parseExpression(expression);\r\n            this.composeCode = normalizeAttributeName(table, column, granularity, DATA_MODEL_MODULE_NAME);\r\n        }\r\n        // panel is not needed in most cases, this is to support break by columns functionality\r\n        if (panel === 'columns') {\r\n            this.panel = panel;\r\n        }\r\n    }\r\n    /**\r\n     * gets the element's ID\r\n     */\r\n    get id() {\r\n        let id = `${this.expression}`;\r\n        const { level = '', dateTimeLevel = '', bucket } = this.translateGranularityToJaql();\r\n        id += `_${(level || dateTimeLevel).toLowerCase()}`;\r\n        if (bucket) {\r\n            id += `_${bucket}`;\r\n        }\r\n        return id;\r\n    }\r\n    /**\r\n     * Gets the sort definition of this instance\r\n     *\r\n     * @returns The Sort definition of this instance\r\n     */\r\n    getSort() {\r\n        return this._sort;\r\n    }\r\n    /**\r\n     * Gets a sorted {@link LevelAttribute} with the given definition\r\n     *\r\n     * @param sort - Sort definition\r\n     * @returns An instance representing the sorted {@link LevelAttribute} of this instance\r\n     */\r\n    sort(sort) {\r\n        return new DimensionalLevelAttribute(this.name, this.expression, this.granularity, this._format, this.description, sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * The string formatting of this instance\r\n     *\r\n     * @returns string formatting\r\n     */\r\n    getFormat() {\r\n        return this._format;\r\n    }\r\n    /**\r\n     * Gets a formatted {@link LevelAttribute} with the given definition\r\n     *\r\n     * @param format - Format string\r\n     * @returns An instance representing the formatted {@link LevelAttribute} of this instance\r\n     */\r\n    format(format) {\r\n        return new DimensionalLevelAttribute(this.name, this.expression, this.granularity, format, this.description, this._sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * Gets a {@link LevelAttribute} with the given granularity\r\n     *\r\n     * @param granularity - Date granularity\r\n     * @returns New instance representing {@link LevelAttribute} with provided granularity\r\n     */\r\n    setGranularity(granularity) {\r\n        return new DimensionalLevelAttribute(this.name, this.expression, granularity, this._format, this.description, this._sort, this.dataSource, this.composeCode);\r\n    }\r\n    /**\r\n     * Gets a serializable representation of the element\r\n     */\r\n    serialize() {\r\n        const result = super.serialize();\r\n        result.granularity = this.granularity;\r\n        if (this.getFormat() !== undefined) {\r\n            result.format = this.getFormat();\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Gets the JAQL representation of this instance\r\n     *\r\n     * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element\r\n     */\r\n    jaql(nested) {\r\n        const r = {\r\n            jaql: Object.assign({ title: this.name, dim: this.expression, datatype: jaqlSimpleColumnType(this.type) }, this.translateGranularityToJaql()),\r\n        };\r\n        if (this.panel) {\r\n            r.panel = this.panel;\r\n        }\r\n        if (this._format !== undefined) {\r\n            const levelName = r.jaql.dateTimeLevel || r.jaql.level;\r\n            r.format = { mask: {} };\r\n            r.format.mask[levelName] = this._format;\r\n        }\r\n        if (this._sort != Sort.None) {\r\n            r.jaql.sort = this._sort == Sort.Ascending ? 'asc' : 'desc';\r\n        }\r\n        return nested === true ? r.jaql : r;\r\n    }\r\n    /**\r\n     * Obtain the JAQL representation of the level that depends on the granularity\r\n     */\r\n    translateGranularityToJaql() {\r\n        const MINUTES_LEVEL = 'minutes';\r\n        const SECONDS_LEVEL = 'seconds';\r\n        switch (this.granularity) {\r\n            case DateLevels.Years:\r\n            case DateLevels.Quarters:\r\n            case DateLevels.Months:\r\n            case DateLevels.Weeks:\r\n            case DateLevels.Days:\r\n                return { level: this.granularity.toLowerCase() };\r\n            case DateLevels.Hours:\r\n                return {\r\n                    dateTimeLevel: MINUTES_LEVEL,\r\n                    bucket: '60',\r\n                };\r\n            case DateLevels.MinutesRoundTo30:\r\n                return {\r\n                    dateTimeLevel: MINUTES_LEVEL,\r\n                    bucket: '30',\r\n                };\r\n            case DateLevels.MinutesRoundTo15:\r\n                return {\r\n                    dateTimeLevel: MINUTES_LEVEL,\r\n                    bucket: '15',\r\n                };\r\n            case DateLevels.Minutes:\r\n                return {\r\n                    dateTimeLevel: MINUTES_LEVEL,\r\n                    bucket: '1',\r\n                };\r\n            case DateLevels.Seconds:\r\n                return {\r\n                    dateTimeLevel: SECONDS_LEVEL,\r\n                    bucket: '0',\r\n                };\r\n            case DateLevels.AggHours:\r\n                return {\r\n                    level: MINUTES_LEVEL,\r\n                    bucket: '60',\r\n                };\r\n            case DateLevels.AggMinutesRoundTo30:\r\n                return {\r\n                    level: MINUTES_LEVEL,\r\n                    bucket: '30',\r\n                };\r\n            case DateLevels.AggMinutesRoundTo15:\r\n                return {\r\n                    level: MINUTES_LEVEL,\r\n                    bucket: '15',\r\n                };\r\n            case DateLevels.AggMinutesRoundTo1:\r\n                return {\r\n                    level: MINUTES_LEVEL,\r\n                    bucket: '1',\r\n                };\r\n            default:\r\n                console.warn('Unsupported level');\r\n                return { level: this.granularity };\r\n        }\r\n    }\r\n    static translateJaqlToGranularity(json) {\r\n        const returnUnsupported = (lvl) => {\r\n            console.warn('Unsupported granularity', lvl);\r\n            return lvl;\r\n        };\r\n        if (json.dateTimeLevel) {\r\n            if (json.dateTimeLevel !== 'minutes' && json.dateTimeLevel !== 'seconds') {\r\n                return returnUnsupported(json.dateTimeLevel);\r\n            }\r\n            switch (json.bucket) {\r\n                case '60':\r\n                    return DateLevels.Hours;\r\n                case '30':\r\n                    return DateLevels.MinutesRoundTo30;\r\n                case '15':\r\n                    return DateLevels.MinutesRoundTo15;\r\n                case '1':\r\n                    return DateLevels.Minutes;\r\n                case '0':\r\n                    return DateLevels.Seconds;\r\n                default:\r\n                    return returnUnsupported(json.dateTimeLevel);\r\n            }\r\n        }\r\n        switch (json.level) {\r\n            case 'years':\r\n                return DateLevels.Years;\r\n            case 'quarters':\r\n                return DateLevels.Quarters;\r\n            case 'months':\r\n                return DateLevels.Months;\r\n            case 'weeks':\r\n                return DateLevels.Weeks;\r\n            case 'days':\r\n                return DateLevels.Days;\r\n            case 'minutes':\r\n                switch (json.bucket) {\r\n                    case '60':\r\n                        return DateLevels.AggHours;\r\n                    case '30':\r\n                        return DateLevels.AggMinutesRoundTo30;\r\n                    case '15':\r\n                        return DateLevels.AggMinutesRoundTo15;\r\n                    case '1':\r\n                        return DateLevels.AggMinutesRoundTo1;\r\n                    default:\r\n                        return returnUnsupported(json.level);\r\n                }\r\n            default:\r\n                return returnUnsupported(json.level);\r\n        }\r\n    }\r\n    static getDefaultFormatForGranularity(granularity) {\r\n        switch (granularity) {\r\n            case DateLevels.Years:\r\n                return 'yyyy';\r\n            case DateLevels.Quarters:\r\n                return 'Q yyyy';\r\n            case DateLevels.Months:\r\n                return 'yyyy-MM';\r\n            case DateLevels.Weeks:\r\n                return 'ww yyyy';\r\n            case DateLevels.Days:\r\n                return 'yyyy-MM-dd';\r\n            case DateLevels.Hours:\r\n                // eslint-disable-next-line sonarjs/no-duplicate-string\r\n                return 'yyyy-MM-dd HH:mm';\r\n            case DateLevels.MinutesRoundTo30:\r\n                return 'yyyy-MM-dd HH:mm';\r\n            case DateLevels.MinutesRoundTo15:\r\n                return 'yyyy-MM-dd HH:mm';\r\n            case DateLevels.Minutes:\r\n                return 'yyyy-MM-dd HH:mm';\r\n            case DateLevels.Seconds:\r\n                return 'yyyy-MM-dd HH:mm:ss';\r\n            case DateLevels.AggHours:\r\n                return 'HH:mm';\r\n            case DateLevels.AggMinutesRoundTo30:\r\n                return 'HH:mm';\r\n            case DateLevels.AggMinutesRoundTo15:\r\n                return 'HH:mm';\r\n            case DateLevels.AggMinutesRoundTo1:\r\n                return 'HH:mm';\r\n            default:\r\n                return '';\r\n        }\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const isDimensionalLevelAttribute = (v) => {\r\n    return Boolean(v && v.__serializable === 'DimensionalLevelAttribute');\r\n};\r\n/**\r\n * Creates an Attribute instance from the given JSON object.\r\n * If the JSON object contains a granularity property, a {@link LevelAttribute} instance is created.\r\n *\r\n * This function is used in the generated data model code to create dimension attributes from an input data source.\r\n *\r\n * See also functions {@link createDimension} and {@link createDateDimension}.\r\n *\r\n * @param json - JSON object representing the attribute\r\n * @returns An Attribute instance\r\n * @group Data Model Utilities\r\n */\r\nexport function createAttribute(json) {\r\n    if (json.granularity) {\r\n        return createLevel(json);\r\n    }\r\n    return new DimensionalAttribute(json.name || json.title, json.attribute || json.expression || json.dim, json.type, json.desc || json.description, json.sort, json.dataSource);\r\n}\r\n/**\r\n * Creates a LevelAttribute instance from the given JSON object.\r\n *\r\n * @param json - JSON object representing the level attribute\r\n * @internal\r\n */\r\nexport function createLevel(json) {\r\n    return new DimensionalLevelAttribute(json.name || json.title, json.attribute || json.expression || json.dim, json.granularity, json.format, json.desc || json.description, json.sort, json.dataSource);\r\n}\r\n/**\r\n * Normalize attribute name\r\n *\r\n * @param tableName - Table name (e.g., Commerce Sales)\r\n * @param columnName - Column name (e.g., Order Date)\r\n * @param dateLevel - Date level (e.g., Years)\r\n * @param modelName - module name (e.g., DM)\r\n * @return full normalized attribute name (e.g., DM.CommerceSales.OrderDate.Years)\r\n * @internal\r\n */\r\nexport function normalizeAttributeName(tableName, columnName, granularity, modelName) {\r\n    return ((modelName && modelName.length > 0 ? modelName + '.' : '') +\r\n        normalizeName(tableName) +\r\n        '.' +\r\n        normalizeName(columnName) +\r\n        (granularity && granularity.length > 0 ? '.' + granularity : ''));\r\n}\r\n//# sourceMappingURL=attributes.js.map","/**\r\n * Runs type guard check for LevelAttribute.\r\n *\r\n * @param arg - object to check\r\n * @internal\r\n */\r\nexport function isLevelAttribute(arg) {\r\n    return 'granularity' in arg;\r\n}\r\n/**\r\n * Runs type guard check for PivotAttribute.\r\n *\r\n * @param arg - object to check\r\n * @internal\r\n */\r\nexport function isPivotAttribute(arg) {\r\n    return 'attribute' in arg;\r\n}\r\n/**\r\n * Runs type guard check for PivotMeasure.\r\n *\r\n * @param arg - object to check\r\n * @internal\r\n */\r\nexport function isPivotMeasure(arg) {\r\n    return 'measure' in arg;\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const DEFAULT_PIVOT_GRAND_TOTALS = {\r\n    rows: false,\r\n    columns: false,\r\n};\r\n//# sourceMappingURL=interfaces.js.map","/* eslint-disable @typescript-eslint/default-param-last */\r\nimport cloneDeep from 'lodash-es/cloneDeep.js';\r\nimport isArray from 'lodash-es/isArray.js';\r\nimport { DimensionalLevelAttribute, filterFactory, isCascadingFilter, } from '../../index.js';\r\nimport { TranslatableError } from '../../translation/translatable-error.js';\r\n/**\r\n * Type guard for checking if the provided filters are FilterRelations.\r\n *\r\n * @param filters - The filters to check.\r\n * @returns `true` if the filters are FilterRelations, `false` otherwise.\r\n * @group Filter Utilities\r\n */\r\nexport function isFilterRelations(filters) {\r\n    return (!!filters &&\r\n        'operator' in filters &&\r\n        (filters.operator === 'AND' || filters.operator === 'OR') &&\r\n        !!filters.right &&\r\n        !!filters.left);\r\n}\r\n/**\r\n * Merges source filters with target filters and recalculates relations.\r\n *\r\n * @param sourceFilters - The source filters or filter relations to merge.\r\n * @param targetFilters - The target filters or filter relations to merge with.\r\n * @returns Updated source filters merged with target filters. If the source filters are FilterRelations, the relations are recalculated.\r\n * @internal\r\n */\r\nexport function mergeFiltersOrFilterRelations(sourceFilters = [], targetFilters = []) {\r\n    if (!isFilterRelations(sourceFilters) && !isFilterRelations(targetFilters)) {\r\n        return mergeFilters(sourceFilters, targetFilters);\r\n    }\r\n    const { filters: pureSourceFilters, relations: sourceRelations } = splitFiltersAndRelations(sourceFilters);\r\n    const pureTargetFilters = getFiltersArray(targetFilters);\r\n    const mergedFilters = mergeFilters(pureSourceFilters, pureTargetFilters);\r\n    const mergedRelations = calculateNewRelations(pureSourceFilters, sourceRelations, mergedFilters);\r\n    return combineFiltersAndRelations(mergedFilters, mergedRelations);\r\n}\r\n/**\r\n * Splits filters or filter relations into filters and relations rules.\r\n *\r\n * @internal\r\n */\r\nexport function splitFiltersAndRelations(filtersOrFilterRelations) {\r\n    if (!filtersOrFilterRelations) {\r\n        return { filters: [], relations: null };\r\n    }\r\n    if (isArray(filtersOrFilterRelations)) {\r\n        return { filters: filtersOrFilterRelations, relations: null };\r\n    }\r\n    const filtersSet = new Set();\r\n    function traverse(node) {\r\n        if (isFilterNode(node)) {\r\n            filtersSet.add(node);\r\n            return { instanceid: node.config.guid };\r\n        }\r\n        if (isFilterRelations(node)) {\r\n            const left = traverse(node.left);\r\n            const right = traverse(node.right);\r\n            return { left, right, operator: node.operator };\r\n        }\r\n        throw new UnknownRelationsNodeError();\r\n    }\r\n    const relations = traverse(filtersOrFilterRelations);\r\n    return {\r\n        filters: Array.from(filtersSet),\r\n        relations,\r\n    };\r\n}\r\n/**\r\n * Returns pure filters array from the given filters or filter relations.\r\n *\r\n * @internal\r\n */\r\nexport function getFiltersArray(filtersOrFilterRelations) {\r\n    if (!filtersOrFilterRelations) {\r\n        return [];\r\n    }\r\n    return splitFiltersAndRelations(filtersOrFilterRelations).filters;\r\n}\r\n/**\r\n * Combines filters and relations into a single FilterRelations object.\r\n * If the relations are empty or relations are trivial (single node), the filters are returned as is.\r\n *\r\n * @internal\r\n */\r\nexport function combineFiltersAndRelations(filters, relations) {\r\n    if (!relations || isTrivialSingleNodeRelations(relations)) {\r\n        return filters;\r\n    }\r\n    const resultRelations = traverse(relations);\r\n    return isFilterNode(resultRelations) ? [resultRelations] : resultRelations;\r\n    function traverse(node) {\r\n        if (isRelationsRuleIdNode(node)) {\r\n            return filters.find((filter) => filter.config.guid === node.instanceid);\r\n        }\r\n        if (isRelationsRule(node)) {\r\n            const func = node.operator === 'AND' ? filterFactory.logic.and : filterFactory.logic.or;\r\n            return func(traverse(node.left), traverse(node.right));\r\n        }\r\n        throw new UnknownRelationsNodeError();\r\n    }\r\n}\r\n/**\r\n * Type guard for checking if a node is a single relations node (trivial case when relations are needless).\r\n *\r\n * @internal\r\n */\r\nexport function isTrivialSingleNodeRelations(relations) {\r\n    return !!relations && 'instanceid' in relations;\r\n}\r\n/**\r\n * Calculates new relations based on the changes in filters.\r\n *\r\n * @internal\r\n */\r\nexport function calculateNewRelations(prevFilters, prevRelations, newFilters) {\r\n    // If there are no previous relations - no need to recalculate them\r\n    if (prevRelations === null) {\r\n        return null;\r\n    }\r\n    const performedActions = diffFilters(prevFilters, newFilters);\r\n    if (performedActions.length === 0) {\r\n        return prevRelations;\r\n    }\r\n    return performedActions.reduce((relations, action) => {\r\n        switch (action.type) {\r\n            case 'add':\r\n                return addFilterToRelations(action.payload, relations);\r\n            case 'remove':\r\n                return removeFilterFromRelations(action.payload, relations);\r\n        }\r\n    }, prevRelations);\r\n}\r\n/**\r\n * Compares two filters and determines if they are equal in terms of relations.\r\n */\r\nfunction areFiltersEqualForRelations(filter1, filter2) {\r\n    return filter1.config.guid === filter2.config.guid;\r\n}\r\n/**\r\n * Replaces a filter in the relations tree with a new filter.\r\n *\r\n * @internal\r\n */\r\nexport function getRelationsWithReplacedFilter(relations, filterToReplace, newFilter) {\r\n    if (!relations) {\r\n        return null;\r\n    }\r\n    const replacedRelations = traverse(relations);\r\n    return replacedRelations;\r\n    function traverse(node) {\r\n        if (isRelationsRuleIdNode(node)) {\r\n            return node.instanceid === filterToReplace.config.guid\r\n                ? { instanceid: newFilter.config.guid }\r\n                : node;\r\n        }\r\n        if (isRelationsRule(node)) {\r\n            return {\r\n                left: traverse(node.left),\r\n                right: traverse(node.right),\r\n                operator: node.operator,\r\n            };\r\n        }\r\n        throw new UnknownRelationsNodeError();\r\n    }\r\n}\r\n/**\r\n * Compares two arrays of Filter objects and determines the actions needed\r\n * to transform prevFilters into newFilters.\r\n *\r\n * @param prevFilters - The original array of filters.\r\n * @param newFilters - The updated array of filters.\r\n * @param isEqualFilters - A function to determine if two filters are equal.\r\n * @returns An array of FilterAction objects representing the changes.\r\n */\r\nfunction diffFilters(prevFilters, newFilters) {\r\n    const actions = [];\r\n    // Clone the arrays to avoid mutating the original data\r\n    const prevFiltersCopy = [...prevFilters];\r\n    const newFiltersCopy = [...newFilters];\r\n    // Determine removals\r\n    prevFiltersCopy.forEach((prevFilter) => {\r\n        const existsInNew = newFiltersCopy.some((newFilter) => areFiltersEqualForRelations(prevFilter, newFilter));\r\n        if (!existsInNew) {\r\n            actions.push({ type: 'remove', payload: prevFilter });\r\n        }\r\n    });\r\n    // Determine additions\r\n    newFiltersCopy.forEach((newFilter) => {\r\n        const existsInPrev = prevFiltersCopy.some((prevFilter) => areFiltersEqualForRelations(newFilter, prevFilter));\r\n        if (!existsInPrev) {\r\n            actions.push({ type: 'add', payload: newFilter });\r\n        }\r\n    });\r\n    return actions;\r\n}\r\n/**\r\n * Adds a filter to root of relations tree as a new node connected with AND operator.\r\n * If the relations tree is empty, the filter is added as the root node.\r\n */\r\nfunction addFilterToRelations(filter, relations) {\r\n    if (!relations) {\r\n        return { instanceid: filter.config.guid };\r\n    }\r\n    return {\r\n        left: relations,\r\n        right: { instanceid: filter.config.guid },\r\n        operator: 'AND',\r\n    };\r\n}\r\n/**\r\n * Removes a filter from the relations tree.\r\n * If the filter is not found, the relations tree is returned as is.\r\n */\r\nfunction removeFilterFromRelations(filter, relations) {\r\n    if (!relations) {\r\n        return null;\r\n    }\r\n    if (isTrivialSingleNodeRelations(relations)) {\r\n        return relations.instanceid === filter.config.guid ? null : relations;\r\n    }\r\n    const leftAfterRemoval = removeFilterFromRelations(filter, relations.left);\r\n    const rightAfterRemoval = removeFilterFromRelations(filter, relations.right);\r\n    if (leftAfterRemoval === null && !!rightAfterRemoval) {\r\n        return rightAfterRemoval;\r\n    }\r\n    if (rightAfterRemoval === null && !!leftAfterRemoval) {\r\n        return leftAfterRemoval;\r\n    }\r\n    if (leftAfterRemoval === null && rightAfterRemoval === null) {\r\n        return null;\r\n    }\r\n    return {\r\n        left: leftAfterRemoval,\r\n        right: rightAfterRemoval,\r\n        operator: relations.operator,\r\n    };\r\n}\r\n/**\r\n * Converts filter relations model from Fusion to internal CSDK filter relations rules.\r\n *\r\n * @internal\r\n */\r\nexport function convertFilterRelationsModelToRelationRules(filterRelationsModel, filters) {\r\n    if (!filterRelationsModel) {\r\n        return null;\r\n    }\r\n    function traverse(node) {\r\n        if (isModelIdNode(node)) {\r\n            return { instanceid: node.instanceId };\r\n        }\r\n        if (isModelBracketNode(node)) {\r\n            return traverse(node.value);\r\n        }\r\n        if (isModelRelationNode(node)) {\r\n            const newNode = {\r\n                operator: node.operator,\r\n                left: traverse(node.left),\r\n                right: traverse(node.right),\r\n            };\r\n            return newNode;\r\n        }\r\n        if (isModelCascadeNode(node)) {\r\n            // CSDK filter relations model work with cascading filters as with a single node.\r\n            const cascadingFilterForThisCascade = filters.find((filter) => {\r\n                if (!isCascadingFilter(filter)) {\r\n                    return false;\r\n                }\r\n                const levelIds = filter.filters.map((f) => f.config.guid);\r\n                return node.levels.every((levelFilter) => levelIds.includes(levelFilter.instanceId));\r\n            });\r\n            if (cascadingFilterForThisCascade) {\r\n                return { instanceid: cascadingFilterForThisCascade.config.guid };\r\n            }\r\n            throw new Error('Broken filter relations model. Cascading filter not found.');\r\n        }\r\n        throw new Error('Broken filter relations model. Unknown node type.');\r\n    }\r\n    return traverse(filterRelationsModel);\r\n}\r\nfunction isModelIdNode(node) {\r\n    return 'instanceId' in node;\r\n}\r\nfunction isModelBracketNode(node) {\r\n    return 'value' in node;\r\n}\r\nfunction isModelRelationNode(node) {\r\n    return 'operator' in node;\r\n}\r\nfunction isModelCascadeNode(node) {\r\n    return 'levels' in node && isArray(node.levels);\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function isRelationsRuleIdNode(node) {\r\n    return 'instanceid' in node;\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function isRelationsRule(node) {\r\n    return 'operator' in node;\r\n}\r\nfunction isFilterNode(node) {\r\n    return 'config' in node && 'guid' in node.config;\r\n}\r\n/**\r\n * Converts internal CSDK filter relations rules to filter relations model for Fusion.\r\n *\r\n * @internal\r\n */\r\nexport function filterRelationRulesToFilterRelationsModel(filterRelationRules, filters) {\r\n    if (!filterRelationRules) {\r\n        return undefined;\r\n    }\r\n    function traverse(node) {\r\n        if (isRelationsRuleIdNode(node)) {\r\n            // Check if this instanceid corresponds to a cascading filter\r\n            const filter = filters.find((f) => f.config.guid === node.instanceid);\r\n            if (filter && isCascadingFilter(filter)) {\r\n                // Build a CascadingIdentifier node\r\n                const levels = filter.filters.map((levelFilter) => ({\r\n                    type: 'Identifier',\r\n                    instanceId: levelFilter.config.guid,\r\n                }));\r\n                return {\r\n                    type: 'CascadingIdentifier',\r\n                    levels,\r\n                };\r\n            }\r\n            else {\r\n                // Build an Identifier node\r\n                return {\r\n                    type: 'Identifier',\r\n                    instanceId: node.instanceid,\r\n                };\r\n            }\r\n        }\r\n        else if (isRelationsRule(node)) {\r\n            // Build a LogicalExpression node\r\n            return {\r\n                type: 'LogicalExpression',\r\n                operator: node.operator,\r\n                left: traverse(node.left),\r\n                right: traverse(node.right),\r\n            };\r\n        }\r\n        else {\r\n            throw new Error('Unknown node type in filter relations rules.');\r\n        }\r\n    }\r\n    return traverse(filterRelationRules);\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function findFilterByGuid(filters, guid) {\r\n    return filters.find((filter) => filter.config.guid === guid);\r\n}\r\n/**\r\n * Error thrown when an unknown node type is encountered in filter relations.\r\n *\r\n * @internal\r\n */\r\nexport class UnknownRelationsNodeError extends Error {\r\n    constructor() {\r\n        super('Broken filter relations. Unknown node type.');\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function isOpenBracketDescriptionNode(node) {\r\n    return node.nodeType === 'openBracket';\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function isCloseBracketDescriptionNode(node) {\r\n    return node.nodeType === 'closeBracket';\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function isAttributeDescriptionNode(node) {\r\n    return node.nodeType === 'attribute';\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function isOperatorDescriptionNode(node) {\r\n    return node.nodeType === 'operator';\r\n}\r\n/**\r\n * Gets a unique identifier for a filter, combining its attribute expression and granularity if available.\r\n *\r\n * @param {Filter} filter - The filter object to generate the unique identifier for.\r\n * @returns {string} - The unique identifier for the filter.\r\n * @internal\r\n */\r\nexport function getFilterCompareId(filter) {\r\n    if (isCascadingFilter(filter)) {\r\n        return filter.filters.map(getFilterCompareId).join('-');\r\n    }\r\n    // TODO: remove fallback on 'filter.jaql()' after removing temporal 'jaql()' workaround from filter translation layer\r\n    const { attribute: filterAttribute } = filter;\r\n    const filterJaql = filter.jaql().jaql;\r\n    const expression = filterAttribute.expression || filterJaql.dim;\r\n    const granularity = filterAttribute.granularity ||\r\n        ((filterJaql === null || filterJaql === void 0 ? void 0 : filterJaql.datatype) === 'datetime'\r\n            ? DimensionalLevelAttribute.translateJaqlToGranularity(filterJaql)\r\n            : '');\r\n    return `${expression}${granularity}`;\r\n}\r\n/**\r\n * Merges two arrays of filter objects, prioritizing 'targetFilters' over 'sourceFilters',\r\n * and removes duplicates based on filter compare id.\r\n *\r\n * Saves the 'sourceFilters' filters order, while adds new filters to the end of the array.\r\n *\r\n * @param {Filter[]} [sourceFilters=[]] - The source array of filter objects.\r\n * @param {Filter[]} [targetFilters=[]] - The target array of filter objects.\r\n * @returns {Filter[]} - The merged array of filter objects.\r\n * @internal\r\n */\r\nexport function mergeFilters(sourceFilters = [], targetFilters = []) {\r\n    const filters = [...sourceFilters];\r\n    targetFilters.forEach((filter) => {\r\n        // filters will always have findIndex as sourceFilters fall back to an empty array\r\n        const existingFilterIndex = filters.findIndex((existingFilter) => getFilterCompareId(filter) === getFilterCompareId(existingFilter));\r\n        const isFilterAlreadyExist = existingFilterIndex !== -1;\r\n        if (isFilterAlreadyExist) {\r\n            filters[existingFilterIndex] = filter;\r\n        }\r\n        else {\r\n            filters.push(filter);\r\n        }\r\n    });\r\n    return filters;\r\n}\r\n/**\r\n * Replaces nodes of filter reations tree with fetched filters by instance id.\r\n *\r\n * @param filters - The filters.\r\n * @param highlights - The highlights\r\n * @param filterRelations - Fetched filter relations.\r\n * @returns Filter relations with filters in nodes.\r\n * @internal\r\n */\r\n/* eslint-disable-next-line sonarjs/cognitive-complexity */\r\nexport function getFilterRelationsFromJaql(filters, highlights, filterRelations) {\r\n    if (!filterRelations) {\r\n        return filters;\r\n    }\r\n    // If highlights are present, nodes in filter relations reference both filters and highlights\r\n    // and thus cannot be replaced with filters. Return filters in this case.\r\n    if (highlights.length) {\r\n        return filters;\r\n    }\r\n    const mergedFilterRelations = cloneDeep(filterRelations);\r\n    function traverse(node) {\r\n        if ('instanceid' in node) {\r\n            const filter = filters.find((filter) => filter.config.guid === node.instanceid);\r\n            if (!filter) {\r\n                throw new TranslatableError('errors.unknownFilterInFilterRelations');\r\n            }\r\n            return filter;\r\n        }\r\n        if ('operator' in node) {\r\n            const newNode = { operator: node.operator };\r\n            if ('left' in node) {\r\n                newNode.left = traverse(node.left);\r\n            }\r\n            if ('right' in node) {\r\n                newNode.right = traverse(node.right);\r\n            }\r\n            return newNode;\r\n        }\r\n        return node;\r\n    }\r\n    return traverse(mergedFilterRelations);\r\n}\r\n/**\r\n * Converts filter relations model to filter relations jaql.\r\n *\r\n * @param filterRelations - Filter relations model.\r\n * @returns Filter relations jaql.\r\n * @internal\r\n */\r\nexport function convertFilterRelationsModelToJaql(filterRelations) {\r\n    if (!filterRelations) {\r\n        return filterRelations;\r\n    }\r\n    const convertedFilterRelations = cloneDeep(filterRelations);\r\n    function traverse(node) {\r\n        if ('instanceId' in node) {\r\n            return { instanceid: node.instanceId };\r\n        }\r\n        if ('value' in node) {\r\n            return traverse(node.value);\r\n        }\r\n        if ('operator' in node) {\r\n            const newNode = { operator: node.operator };\r\n            if ('left' in node) {\r\n                newNode.left = traverse(node.left);\r\n            }\r\n            if ('right' in node) {\r\n                newNode.right = traverse(node.right);\r\n            }\r\n            return newNode;\r\n        }\r\n        return node;\r\n    }\r\n    return traverse(convertedFilterRelations);\r\n}\r\n//# sourceMappingURL=filter-relations.js.map","// istanbul ignore next\r\nconst isObject = (obj) => {\r\n    if (typeof obj === \"object\" && obj !== null) {\r\n        if (typeof Object.getPrototypeOf === \"function\") {\r\n            const prototype = Object.getPrototypeOf(obj);\r\n            return prototype === Object.prototype || prototype === null;\r\n        }\r\n        return Object.prototype.toString.call(obj) === \"[object Object]\";\r\n    }\r\n    return false;\r\n};\r\nconst merge = (...objects) => objects.reduce((result, current) => {\r\n    if (Array.isArray(current)) {\r\n        throw new TypeError(\"Arguments provided to ts-deepmerge must be objects, not arrays.\");\r\n    }\r\n    Object.keys(current).forEach((key) => {\r\n        if ([\"__proto__\", \"constructor\", \"prototype\"].includes(key)) {\r\n            return;\r\n        }\r\n        if (Array.isArray(result[key]) && Array.isArray(current[key])) {\r\n            result[key] = merge.options.mergeArrays\r\n                ? Array.from(new Set(result[key].concat(current[key])))\r\n                : current[key];\r\n        }\r\n        else if (isObject(result[key]) && isObject(current[key])) {\r\n            result[key] = merge(result[key], current[key]);\r\n        }\r\n        else {\r\n            result[key] = current[key];\r\n        }\r\n    });\r\n    return result;\r\n}, {});\r\nconst defaultOptions = {\r\n    mergeArrays: true,\r\n};\r\nmerge.options = defaultOptions;\r\nmerge.withOptions = (options, ...objects) => {\r\n    merge.options = Object.assign({ mergeArrays: true }, options);\r\n    const result = merge(...objects);\r\n    merge.options = defaultOptions;\r\n    return result;\r\n};\r\nexport default merge;\r\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n  randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;","export function applyHighlightFilters(metadataItem, highlights) {\r\n    const filter = highlights === null || highlights === void 0 ? void 0 : highlights.find((f) => getMetadataItemId(metadataItem) === f.attribute.id);\r\n    if (filter && !filter.config.disabled) {\r\n        if (filter.isScope) {\r\n            filter.isScope = false;\r\n        }\r\n        metadataItem.jaql.in = {\r\n            selected: filter.jaql(),\r\n        };\r\n    }\r\n    return metadataItem;\r\n}\r\nexport function matchHighlightsWithAttributes(attributesMetadata, highlights) {\r\n    const highlightsWithAttributes = [];\r\n    const highlightsWithoutAttributes = [];\r\n    highlights.forEach((filter) => {\r\n        const isMatch = attributesMetadata.some((d) => getMetadataItemId(d) === filter.attribute.id);\r\n        if (isMatch) {\r\n            highlightsWithAttributes.push(filter);\r\n        }\r\n        else {\r\n            highlightsWithoutAttributes.push(filter);\r\n        }\r\n    });\r\n    return [highlightsWithAttributes, highlightsWithoutAttributes];\r\n}\r\nexport function getMetadataItemId(metadataItem) {\r\n    const { dim, level, dateTimeLevel, bucket } = metadataItem.jaql;\r\n    let id = `${dim}`;\r\n    if (level || dateTimeLevel) {\r\n        id += `_${level || dateTimeLevel}`;\r\n    }\r\n    if (bucket) {\r\n        id += `_${bucket}`;\r\n    }\r\n    return id;\r\n}\r\n//# sourceMappingURL=highlights.js.map","var __rest = (this && this.__rest) || function (s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n};\r\n/**\r\n * Calculates statistics about the pivot table metadata.\r\n */\r\nexport function getPivotMetadataStats(rowsAttributes, columnsAttributes, measures) {\r\n    return {\r\n        rowsCount: rowsAttributes.length,\r\n        columnsCount: columnsAttributes.length,\r\n        measuresCount: measures.length,\r\n    };\r\n}\r\n/**\r\n * Converts sort direction to JAQL sort direction.\r\n */\r\nexport function convertSortDirectionToJaqlSort(direction) {\r\n    switch (direction) {\r\n        case 'sortAsc':\r\n            return 'asc';\r\n        case 'sortDesc':\r\n            return 'desc';\r\n        default:\r\n            return 'none';\r\n    }\r\n}\r\n/**\r\n * Prepares JAQL sort options for pivot table row.\r\n */\r\nexport function preparePivotRowJaqlSortOptions(sort, rowIndex, metadataStats) {\r\n    const sortDirection = convertSortDirectionToJaqlSort(sort.direction);\r\n    const isLastRow = rowIndex === metadataStats.rowsCount - 1;\r\n    const sortDetails = {\r\n        dir: sortDirection,\r\n        initialized: true,\r\n        field: sort.by && 'valuesIndex' in sort.by\r\n            ? metadataStats.rowsCount + metadataStats.columnsCount + sort.by.valuesIndex\r\n            : rowIndex,\r\n    };\r\n    if (isLastRow) {\r\n        sortDetails.sortingLastDimension = true;\r\n    }\r\n    if (sort.by) {\r\n        sortDetails.measurePath = (sort.by.columnsMembersPath || []).reduce((path, columnMember, columnIndex) => (Object.assign(Object.assign({}, path), { [metadataStats.rowsCount + columnIndex]: columnMember })), {});\r\n    }\r\n    return {\r\n        sort: sortDirection,\r\n        sortDetails,\r\n    };\r\n}\r\n/**\r\n * Normalizes sorting for the last row of the pivot table.\r\n *\r\n * According to the existing pivot JAQL structure, the sorting configuration of the last row\r\n * should be located inside the target measure metadata in some cases.\r\n * This function moves the sorting configuration from the last row metadata to the target measure metadata\r\n * if it actually related to that measure.\r\n */\r\nexport function normalizeLastRowSorting(metadata, metadataStats) {\r\n    if (metadataStats.rowsCount === 0) {\r\n        return;\r\n    }\r\n    const lastRowIndex = metadataStats.rowsCount - 1;\r\n    const lastRowMetadata = metadata[lastRowIndex];\r\n    const _a = lastRowMetadata.jaql, { sortDetails, sort } = _a, jaqlWithoutSortOptions = __rest(_a, [\"sortDetails\", \"sort\"]);\r\n    const isSortedByMeasure = sortDetails && sortDetails.field !== lastRowIndex && sortDetails.field < metadata.length;\r\n    if (isSortedByMeasure) {\r\n        const targetMeasureMetadata = metadata[sortDetails.field];\r\n        targetMeasureMetadata.jaql.sortDetails = sortDetails;\r\n        targetMeasureMetadata.jaql.sort = sort;\r\n        lastRowMetadata.jaql = jaqlWithoutSortOptions;\r\n    }\r\n}\r\n//# sourceMappingURL=pivot-query-utils.js.map","import { convertJaqlDataSource, DEFAULT_PIVOT_GRAND_TOTALS, isPivotAttribute, isPivotMeasure, } from '@sisense/sdk-data';\r\nimport merge from 'ts-deepmerge';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { applyHighlightFilters, matchHighlightsWithAttributes } from './metadata/highlights.js';\r\nimport { getPivotMetadataStats, normalizeLastRowSorting, preparePivotRowJaqlSortOptions, } from './pivot/pivot-query-utils.js';\r\nconst JAQL_BY_CSDK = 'ComposeSDK';\r\n/**\r\n * @internal\r\n */\r\nexport function getJaqlQueryPayload(queryDescription, shouldSkipHighlightsWithoutAttributes) {\r\n    const { attributes, measures, filters, filterRelations, highlights, dataSource, count, offset, ungroup, } = queryDescription;\r\n    // \"ungroup: true\" will be set in JAQL when two conditions are met:\r\n    // (1) ungroup is set to true\r\n    // AND\r\n    // (2) the query has no measures (unaggregated query)\r\n    const includeUngroup = ungroup && measures.length === 0;\r\n    const queryPayload = Object.assign({ metadata: prepareQueryMetadata({ attributes, measures, filters, filterRelations, highlights }, shouldSkipHighlightsWithoutAttributes) }, prepareQueryOptions(dataSource, count, offset, includeUngroup));\r\n    if (filterRelations) {\r\n        return Object.assign(Object.assign({}, queryPayload), { filterRelations });\r\n    }\r\n    return queryPayload;\r\n}\r\nfunction prepareFilterMetadata(attributesMetadata, filters, filterRelations, highlights, shouldSkipHighlightsWithoutAttributes) {\r\n    const [highlightsWithAttributes, highlightsWithoutAttributes] = matchHighlightsWithAttributes(attributesMetadata, highlights);\r\n    attributesMetadata.forEach((d) => applyHighlightFilters(d, highlightsWithAttributes));\r\n    const getFilterJaql = (f) => {\r\n        const jaql = f.jaql();\r\n        if (filterRelations) {\r\n            // instanceid is needed for filter relations only\r\n            if (Array.isArray(jaql)) {\r\n                return jaql.map((j) => (Object.assign(Object.assign({}, j), { instanceid: f.config.guid })));\r\n            }\r\n            else {\r\n                return Object.assign(Object.assign({}, jaql), { instanceid: f.config.guid });\r\n            }\r\n        }\r\n        return jaql;\r\n    };\r\n    const filtersMetadata = (shouldSkipHighlightsWithoutAttributes\r\n        ? filters.flatMap((d) => getFilterJaql(d))\r\n        : [...filters, ...highlightsWithoutAttributes].flatMap((d) => getFilterJaql(d))).filter((f) => {\r\n        return Object.keys(f.jaql.filter || {}).length !== 0;\r\n    });\r\n    if (shouldSkipHighlightsWithoutAttributes && highlightsWithoutAttributes.length > 0) {\r\n        console.warn(`The following highlight filters were not applied due to missing attributes: [${highlightsWithoutAttributes\r\n            .map((f) => f.attribute.name)\r\n            .join(', ')}].`);\r\n    }\r\n    return filtersMetadata;\r\n}\r\n/**\r\n * WORKAROUND\r\n *\r\n * Ensures that any `text`-typed context fields with `agg: \"count\"`\r\n * in analytic functions like `trend` or `forecast` are converted to `numeric`.\r\n *\r\n * This helps maintain compatibility with analytic functions that expect\r\n * numeric input for aggregation.\r\n *\r\n * @param {MetadataItem} metadataItem - The metadata item to check and adjust.\r\n * @returns {MetadataItem} A cloned and modified metadata item if needed, or the original one.\r\n *\r\n * @internal\r\n */\r\nfunction ensureNumericCountInContext(metadataItem) {\r\n    var _a, _b;\r\n    const formula = (_a = metadataItem.jaql) === null || _a === void 0 ? void 0 : _a.formula;\r\n    if (!formula || (!formula.includes('trend') && !formula.includes('forecast'))) {\r\n        return metadataItem;\r\n    }\r\n    const clonedItem = structuredClone(metadataItem);\r\n    const context = (_b = clonedItem.jaql) === null || _b === void 0 ? void 0 : _b.context;\r\n    if (context) {\r\n        for (const key in context) {\r\n            const item = context[key];\r\n            if (item.datatype === 'text' && item.agg === 'count') {\r\n                item.datatype = 'numeric';\r\n            }\r\n        }\r\n    }\r\n    return clonedItem;\r\n}\r\nfunction prepareQueryMetadata(metadataDescription, shouldSkipHighlightsWithoutAttributes) {\r\n    const { attributes, measures, filters, filterRelations, highlights } = metadataDescription;\r\n    const attributesMetadata = attributes.map((d) => d.jaql());\r\n    const measuresMetadata = measures.map((d) => ensureNumericCountInContext(d.jaql()));\r\n    const filtersMetadata = prepareFilterMetadata(attributesMetadata, filters, filterRelations, highlights, shouldSkipHighlightsWithoutAttributes);\r\n    return [...attributesMetadata, ...measuresMetadata, ...filtersMetadata];\r\n}\r\nexport function prepareQueryOptions(dataSource, count, offset, includeUngroup) {\r\n    return Object.assign(Object.assign(Object.assign({ datasource: convertJaqlDataSource(dataSource), by: JAQL_BY_CSDK, queryGuid: uuid() }, (includeUngroup ? { ungroup: true } : {})), (count ? { count } : {})), (offset ? { offset } : {}));\r\n}\r\n/**\r\n * Converts a pivot query description to a JAQL query payload.\r\n *\r\n * @param pivotQueryDescription\r\n * @param shouldSkipHighlightsWithoutAttributes\r\n * @returns jaql query payload\r\n */\r\nexport function getPivotJaqlQueryPayload(pivotQueryDescription, shouldSkipHighlightsWithoutAttributes) {\r\n    const { rowsAttributes, columnsAttributes, measures, filters, filterRelations, grandTotals, highlights, dataSource, count, offset, } = pivotQueryDescription;\r\n    const queryPayload = Object.assign({ metadata: preparePivotQueryMetadata({ rowsAttributes, columnsAttributes, measures, filters, highlights, filterRelations }, shouldSkipHighlightsWithoutAttributes) }, preparePivotQueryOptions(dataSource, grandTotals, count, offset));\r\n    if (filterRelations) {\r\n        return Object.assign(Object.assign({}, queryPayload), { filterRelations });\r\n    }\r\n    return queryPayload;\r\n}\r\nfunction jaqlPivotAttribute(a, panel, index, metadataStats) {\r\n    const isSortedRowAttribute = panel === 'rows' && isPivotAttribute(a) && a.sort && a.sort.direction !== 'sortNone';\r\n    const jaql = Object.assign(Object.assign({}, (isPivotAttribute(a) ? a.attribute.jaql(true) : a.jaql(true))), (isSortedRowAttribute && preparePivotRowJaqlSortOptions(a.sort, index, metadataStats)));\r\n    return Object.assign(Object.assign({ jaql }, (isPivotAttribute(a) && a.includeSubTotals ? { format: { subtotal: true } } : {})), { panel, field: { index: index, id: `${panel}-${index}` } });\r\n}\r\nfunction jaqlPivotMeasure(m, panel, index) {\r\n    return Object.assign(Object.assign({}, (isPivotMeasure(m)\r\n        ? merge(m.measure.jaql(), {\r\n            jaql: { subtotalAgg: m.totalsCalculation },\r\n            format: Object.assign({ databars: m.dataBars || false }, (m.shouldRequestMinMax && {\r\n                color: { type: 'range' },\r\n            })),\r\n        })\r\n        : m.jaql())), { panel, field: { index: index, id: `${panel}-${index}` } });\r\n}\r\n/**\r\n * Prepares the metadata part of the JAQL payload for a pivot query.\r\n *\r\n * @param pivotMetadataDescription\r\n * @param shouldSkipHighlightsWithoutAttributes\r\n * @returns array of metadata items of the JAQL payload\r\n */\r\nfunction preparePivotQueryMetadata(pivotMetadataDescription, shouldSkipHighlightsWithoutAttributes) {\r\n    const { rowsAttributes, columnsAttributes, measures, filters, filterRelations, highlights } = pivotMetadataDescription;\r\n    const metadataStats = getPivotMetadataStats(rowsAttributes, columnsAttributes, measures);\r\n    let fieldIndex = 0; // used as a global counter to build field.index in Jaql MetadataItem\r\n    const rowsAttributesMetadata = rowsAttributes.map((a, index) => jaqlPivotAttribute(a, 'rows', index + fieldIndex, metadataStats));\r\n    fieldIndex = fieldIndex + rowsAttributes.length;\r\n    const columnsAttributesMetadata = columnsAttributes.map((a, index) => jaqlPivotAttribute(a, 'columns', index + fieldIndex, metadataStats));\r\n    fieldIndex = fieldIndex + columnsAttributes.length;\r\n    const attributesMetadata = [\r\n        ...rowsAttributesMetadata,\r\n        ...columnsAttributesMetadata,\r\n    ];\r\n    const measuresMetadata = measures.map((m, index) => jaqlPivotMeasure(m, 'measures', index + fieldIndex));\r\n    const filtersMetadata = prepareFilterMetadata(attributesMetadata, filters, filterRelations, highlights, shouldSkipHighlightsWithoutAttributes);\r\n    const metadata = [...attributesMetadata, ...measuresMetadata, ...filtersMetadata];\r\n    normalizeLastRowSorting(metadata, metadataStats);\r\n    return metadata;\r\n}\r\n/**\r\n * Prepares the options part of the JAQL payload for a pivot query.\r\n *\r\n * @param dataSource\r\n * @param grandTotals\r\n * @param count\r\n * @param offset\r\n */\r\nfunction preparePivotQueryOptions(dataSource, grandTotals, count, offset) {\r\n    return Object.assign(Object.assign(Object.assign({ datasource: convertJaqlDataSource(dataSource), by: JAQL_BY_CSDK, queryGuid: uuid(), dashboard: JAQL_BY_CSDK, widget: JAQL_BY_CSDK, format: 'pivot' }, (count ? { count } : {})), (offset ? { offset } : {})), { grandTotals: Object.assign(Object.assign({}, DEFAULT_PIVOT_GRAND_TOTALS), grandTotals) });\r\n}\r\n//# sourceMappingURL=get-jaql-query-payload.js.map","import { AbstractTranslatableError } from '@sisense/sdk-common';\r\nimport { i18nextInstance } from './initialize-i18n';\r\nimport { PACKAGE_NAMESPACE } from './resources';\r\n\r\nexport class TranslatableError extends AbstractTranslatableError<typeof PACKAGE_NAMESPACE> {\r\n  constructor(translationKey: string, interpolationOptions?: Record<string, string>) {\r\n    super(\r\n      PACKAGE_NAMESPACE,\r\n      {\r\n        key: translationKey,\r\n        interpolationOptions: interpolationOptions,\r\n      },\r\n      i18nextInstance.t,\r\n    );\r\n  }\r\n}\r\n","import { TranslatableError } from '@/translation/translatable-error';\r\n\r\nexport type CacheKey = string;\r\n\r\n/**\r\n * Function to create cache key from params of the async function you want to cache\r\n */\r\nexport type CreateCacheKeyFn<AsyncFnToCache extends AsyncFn> = (\r\n  ...params: Parameters<AsyncFnToCache>\r\n) => CacheKey;\r\n\r\ntype AsyncFn = (...params: any[]) => Promise<any>;\r\n\r\nexport type CreateCacheFn = <AsyncFnToCache extends AsyncFn>(\r\n  createCacheKey: CreateCacheKeyFn<AsyncFnToCache>,\r\n  options?: CacheOptions,\r\n) => {\r\n  withCache: (fn: AsyncFnToCache) => AsyncFnToCache;\r\n  clearCache: (specificKey?: CacheKey) => void;\r\n};\r\n\r\ntype CacheMeta = {\r\n  createdAt: Date;\r\n};\r\n\r\ntype ReadyCacheValue<Value> = { value: Value } & CacheMeta;\r\ntype PromisedCacheValue<Value> = { valuePromise: Promise<Value> } & CacheMeta;\r\ntype CacheValue<Value> = (ReadyCacheValue<Value> | PromisedCacheValue<Value>) & CacheMeta;\r\n\r\nfunction isReadyCacheValue<Value>(\r\n  cacheValue: CacheValue<Value>,\r\n): cacheValue is ReadyCacheValue<Value> {\r\n  return 'value' in cacheValue;\r\n}\r\nfunction isPromisedCacheValue<Value>(\r\n  cacheValue: CacheValue<Value>,\r\n): cacheValue is PromisedCacheValue<Value> {\r\n  return 'valuePromise' in cacheValue;\r\n}\r\n\r\ntype CacheMap<Value> = Map<string, CacheValue<Value>>;\r\ntype ResolveType<AsyncFnToCache extends AsyncFn> = Awaited<ReturnType<AsyncFnToCache>>;\r\n\r\ntype CacheOptions = {\r\n  cacheMaxSize?: number;\r\n};\r\n\r\n/**\r\n * Universal cache creator for any async function\r\n *\r\n * @param createCacheKey - function to create cache key from params of the async function you want to cache\r\n * @param options - optional object with cache options\r\n * @returns - object with two methods: withCache and clearCache.\r\n * \"withCache\" is a function that wraps the async function you want to cache.\r\n * \"clearCache\" is a function to clear the cache.\r\n * @example\r\n * const myAsyncFn = async (a: number, b: number) => a + b;\r\n *\r\n * // define here how to create cache-key for your function\r\n * const createExecuteQueryCacheKey: CreateCacheKeyFn<typeof myAsyncFn> = (a, b) => `${a}+${b}`;\r\n *\r\n * const { withCache, clearCache } = createCache(createExecuteQueryCacheKey);\r\n * const executeQueryWithCache = withCache(executeQuery);\r\n */\r\nexport const createCache: CreateCacheFn = <AsyncFnToCache extends AsyncFn>(\r\n  createCacheKey: CreateCacheKeyFn<AsyncFnToCache>,\r\n  options?: CacheOptions,\r\n) => {\r\n  const cache: CacheMap<ResolveType<AsyncFnToCache>> = new Map();\r\n\r\n  const withCache = (fn: AsyncFnToCache) => {\r\n    return (async (...params: Parameters<AsyncFnToCache>) => {\r\n      const key = createCacheKey(...params);\r\n      if (!cache.has(key)) {\r\n        const resultPromise = fn(...params) as Promise<ResolveType<AsyncFnToCache>>;\r\n        cache.set(key, { valuePromise: resultPromise, createdAt: new Date() });\r\n        return resultPromise.then((result) => {\r\n          cache.set(key, { value: result, createdAt: new Date() });\r\n          if (options?.cacheMaxSize && cache.size > options.cacheMaxSize) {\r\n            clearOldestCacheValue(cache);\r\n          }\r\n          return result;\r\n        });\r\n      } else {\r\n        const cacheValue = cache.get(key)!;\r\n        if (isReadyCacheValue(cacheValue)) {\r\n          return cacheValue.value;\r\n        } else if (isPromisedCacheValue(cacheValue)) {\r\n          return cacheValue.valuePromise;\r\n        }\r\n        throw new TranslatableError('errors.unexpectedCacheValue');\r\n      }\r\n    }) as AsyncFnToCache;\r\n  };\r\n\r\n  const clearCache = (specificKey?: CacheKey) => {\r\n    if (specificKey) {\r\n      cache.delete(specificKey);\r\n      return;\r\n    }\r\n    cache.clear();\r\n  };\r\n\r\n  return { withCache, clearCache };\r\n};\r\n\r\n/**\r\n * Function to clear the oldest cache value\r\n *\r\n * @param cache - cache map\r\n */\r\nfunction clearOldestCacheValue(cache: CacheMap<any>) {\r\n  const cacheKeys = Array.from(cache.keys());\r\n  const oldestKey = cacheKeys.reduce((oldestKey, key) => {\r\n    const cacheValue = cache.get(key)!;\r\n    const oldestCacheValue = cache.get(oldestKey)!;\r\n    return cacheValue.createdAt < oldestCacheValue.createdAt ? key : oldestKey;\r\n  }, cacheKeys[0]);\r\n  cache.delete(oldestKey);\r\n}\r\n","import { CreateCacheKeyFn, createCache } from '@/utils/create-cache';\r\nimport {\r\n  Attribute,\r\n  DataSource,\r\n  Measure,\r\n  PivotAttribute,\r\n  PivotMeasure,\r\n  PivotQueryResultData,\r\n  QueryResultData,\r\n} from '@sisense/sdk-data';\r\nimport type {\r\n  QueryDescription as InternalQueryDescription,\r\n  PivotQueryDescription as InternalPivotQueryDescription,\r\n  QueryExecutionConfig,\r\n} from '@sisense/sdk-query-client';\r\nimport { ClientApplication } from '../app/client-application';\r\nimport { TranslatableError } from '../translation/translatable-error';\r\nimport { getJaqlQueryPayload } from '@sisense/sdk-query-client';\r\n\r\n/**\r\n * All the properties that fully describe a query you want to send.\r\n *\r\n * We use \"dimensions\" in public interface because the term is closer to the query and charting\r\n * as used in the industry (Sisense included).\r\n * internally, \"dimensions\" are represented by attributes as the latter is closer to the data model.\r\n */\r\nexport type QueryDescription = Partial<Omit<InternalQueryDescription, 'attributes'>> & {\r\n  dimensions?: Attribute[];\r\n};\r\n\r\n/**\r\n * All the properties that fully describe a pivot query you want to send.\r\n *\r\n * We use \"dimensions\" in public interface because the term is closer to the query and charting\r\n * as used in the industry (Sisense included).\r\n * internally, \"dimensions\" are represented by attributes as the latter is closer to the data model.\r\n *\r\n */\r\nexport type PivotQueryDescription = Partial<\r\n  Omit<InternalPivotQueryDescription, 'rowsAttributes' | 'columnsAttributes' | 'measures'>\r\n> & {\r\n  rows?: (Attribute | PivotAttribute)[];\r\n  columns?: (Attribute | PivotAttribute)[];\r\n  values?: (Measure | PivotMeasure)[];\r\n};\r\n\r\n/** @internal */\r\nexport const prepareQueryParams = (\r\n  queryDescription: QueryDescription,\r\n  defaultDataSource?: DataSource,\r\n): InternalQueryDescription => {\r\n  const {\r\n    dataSource,\r\n    dimensions = [],\r\n    measures = [],\r\n    filters = [],\r\n    filterRelations,\r\n    highlights = [],\r\n    count,\r\n    offset,\r\n    ungroup,\r\n  } = queryDescription;\r\n\r\n  if (filters) {\r\n    filters.forEach((f) => (f.isScope = true));\r\n  }\r\n  if (highlights) {\r\n    highlights.forEach((f) => (f.isScope = true));\r\n  }\r\n\r\n  // if data source is not explicitly specified, use the default data source\r\n  // specified in the Sisense context provider\r\n  const dataSourceToQuery = dataSource || defaultDataSource;\r\n  if (!dataSourceToQuery) {\r\n    throw new TranslatableError('errors.executeQueryNoDataSource');\r\n  }\r\n\r\n  return {\r\n    dataSource: dataSourceToQuery,\r\n    attributes: dimensions, // internally, dimensions are represented by attributes\r\n    measures,\r\n    filters,\r\n    filterRelations,\r\n    highlights,\r\n    count,\r\n    offset,\r\n    ungroup,\r\n  };\r\n};\r\n\r\n/** @internal */\r\nexport function executeQuery(\r\n  queryDescription: QueryDescription,\r\n  app: ClientApplication,\r\n  executionConfig?: QueryExecutionConfig,\r\n): Promise<QueryResultData> {\r\n  const queryParams = prepareQueryParams(queryDescription, app?.defaultDataSource);\r\n  return app.queryClient\r\n    .executeQuery(queryParams, executionConfig)\r\n    .resultPromise.catch((error: Error) => {\r\n      const isSecondsTimeLevelUnsuppored = error.message.includes(\r\n        'SecondsLevelIsNotSupportedException',\r\n      );\r\n      if (isSecondsTimeLevelUnsuppored) {\r\n        throw new TranslatableError('errors.secondsDateTimeLevelSupportedOnlyForLive');\r\n      }\r\n      throw error;\r\n    });\r\n}\r\n\r\n/** @internal */\r\nexport const executeCsvQuery = (\r\n  queryDescription: QueryDescription,\r\n  app: ClientApplication,\r\n  executionConfig?: QueryExecutionConfig,\r\n): Promise<Blob> => {\r\n  const queryParams = prepareQueryParams(queryDescription, app?.defaultDataSource);\r\n\r\n  return app.queryClient.executeCsvQuery(queryParams, executionConfig).resultPromise;\r\n};\r\n\r\n/** @internal */\r\nexport const executePivotQuery = (\r\n  queryDescription: PivotQueryDescription,\r\n  app: ClientApplication,\r\n  executionConfig?: QueryExecutionConfig,\r\n): Promise<PivotQueryResultData> => {\r\n  const {\r\n    dataSource,\r\n    rows = [],\r\n    columns = [],\r\n    values = [],\r\n    grandTotals = {},\r\n    filters = [],\r\n    filterRelations,\r\n    highlights = [],\r\n    count,\r\n    offset,\r\n  } = queryDescription;\r\n\r\n  if (filters) {\r\n    filters.forEach((f) => (f.isScope = true));\r\n  }\r\n  if (highlights) {\r\n    highlights.forEach((f) => (f.isScope = true));\r\n  }\r\n\r\n  // if data source is not explicitly specified, use the default data source\r\n  // specified in the Sisense context provider\r\n  const dataSourceToQuery = dataSource || app?.defaultDataSource;\r\n  if (!dataSourceToQuery) {\r\n    throw new TranslatableError('errors.executeQueryNoDataSource');\r\n  }\r\n\r\n  return app.queryClient.executePivotQuery(\r\n    {\r\n      dataSource: dataSourceToQuery,\r\n      // internally, for clarity, dimensions for \"rows\" and \"columns\"\r\n      // are represented by \"rowsAttributes\" and \"columnsAttributes\"\r\n      rowsAttributes: rows,\r\n      columnsAttributes: columns,\r\n      // internally, \"values\" is represented by \"measures\", which is used in JAQL\r\n      measures: values,\r\n      grandTotals,\r\n      filters,\r\n      filterRelations,\r\n      highlights,\r\n      count,\r\n      offset,\r\n    },\r\n    executionConfig,\r\n  ).resultPromise;\r\n};\r\n\r\nconst stringifyQueryPayload = (params: InternalQueryDescription) => {\r\n  return JSON.stringify({\r\n    ...getJaqlQueryPayload(params, false),\r\n    queryGuid: '',\r\n  });\r\n};\r\n\r\nexport const createExecuteQueryCacheKey: CreateCacheKeyFn<typeof executeQuery> = (\r\n  queryDescription,\r\n  app,\r\n) => {\r\n  const queryParams = prepareQueryParams(queryDescription, app?.defaultDataSource);\r\n  return stringifyQueryPayload(queryParams);\r\n};\r\n\r\nconst QUERY_RESULTS_CACHE_MAX_SIZE = 250;\r\nconst { withCache, clearCache } = createCache(createExecuteQueryCacheKey, {\r\n  cacheMaxSize: QUERY_RESULTS_CACHE_MAX_SIZE,\r\n});\r\nexport const executeQueryWithCache = withCache(executeQuery);\r\nexport const clearExecuteQueryCache = clearCache;\r\n"],"names":["consoleLogger","args","type","Logger","concreteLogger","options","_len","_key","_len2","_key2","_len3","_key3","_len4","_key4","lvl","prefix","debugOnly","moduleName","__spreadValues","baseLogger","EventEmitter","events","listener","event","l","observer","defer","res","rej","promise","resolve","reject","makeString","object","copy","a","s","t","m","getLastOfPath","path","Empty","cleanKey","key","canNotTraverseDeeper","stack","setPath","newValue","obj","k","pushPath","concat","getPath","getPathWithDefaults","data","defaultData","value","deepExtend","target","source","overwrite","prop","regexEscape","str","_entityMap","escape","chars","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","c","r","matched","ki","deepFind","paths","current","i","j","p","mix","joinedPath","getCleanedCode","code","ResourceStore","ns","index","lng","ignoreJSONStructure","result","resources","deep","pack","v","postProcessor","module","processors","translator","processor","checkedLoadedFor","Translator","services","resolved","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","parts","keys","lastKey","returnDetails","namespace","appendNamespaceToCIMode","resUsedKey","resExactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","__spreadProps","resTypeIsArray","newKeyToUse","deepKey","usedDefault","usedKey","needsPluralHandling","hasDefaultValue","defaultValueSuffix","defaultValueSuffixOrdinalFallback","defaultValue","resForMissing","updateMissing","fk","lngs","fallbackLngs","send","specificDefaultValue","defaultForMissing","language","suffix","_this","skipOnVariables","nestBef","nb","na","nestAft","postProcess","postProcessorNames","found","exactUsedKey","usedLng","usedNS","extracted","needsZeroSuffixLookup","needsContextHandling","codes","finalKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","possibleKey","option","capitalize","string","LanguageUtil","specialCases","part","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","fc","sets","_rulesPluralsTypes","n","nonIntlVersions","intlVersions","suffixesOrder","createRules","rules","set","PluralResolver","languageUtils","e","rule","pluralCategory1","pluralCategory2","pluralCategory","number","count","idx","returnSuffix","deepFindWithDefaults","Interpolator","iOpts","regexpStr","regexpUnescapeStr","nestingRegexpStr","match","replaces","regexSafe","val","handleFormat","f","missingInterpolationHandler","todo","matchedVar","temp","safeValue","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","doReduce","elem","parseFormatStr","formatStr","formatName","formatOptions","optStr","opt","rest","createCachedFormatter","fn","cache","formatter","Formatter","name","format","mem","formatted","valOptions","error","removePending","q","Connector","backend","store","languages","callback","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","err","loaded","loadedKeys","fcName","tried","wait","resolver","next","fallbackValue","isUpdate","clb","opts","get","ret","transformOptions","noop","bindMemberFunctions","inst","I18n","defOpts","createClassOnDemand","ClassOrObject","lu","deferred","load","finish","usedCallback","append","li","lngInLngs","_this2","setLngProps","done","setLng","keyPrefix","_this3","fixedT","resultKey","fallbackLng","lastLng","loadNotPending","loadState","preResult","preloaded","newLngs","rtlLngs","forkResourceStore","mergedOptions","clone","instance","translation","PACKAGE_NAMESPACE","enDictionary","ukDictionary","basicI18nextInstance","i18next","insertNamespaceIntoResource","defaultResources","basicI18Next","alreadyLoadedNamespaces","initI18next","config","plugin","newI18next","initPromise","resource","acc","AbstractTranslatableError","errorParams","defaultTFunction","interpolationOptions","tFunction","extendedInterpolationObject","message","escapeSingleQuotes","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","unescape","text","defaultOptions","setDefaults","getDefaults","i18nInstance","setI18n","getI18n","initReactI18next","errors","noSisenseContext","restApiNotReady","componentRenderError","sisenseContextNoAuthentication","chartNoSisenseContext","widgetByIdNoSisenseContext","widgetByIdInvalidIdentifier","dashboardWidgetsInvalidIdentifiers","executeQueryNoSisenseContext","executeQueryNoDataSource","dataOptions","noDimensionsAndMeasures","attributeNotFound","measureNotFound","filterAttributeNotFound","highlightAttributeNotFound","optionsTranslation","invalidStyleOptions","invalidInternalDataOptions","themeNotFound","paletteNotFound","chartTypeNotSupported","chartInvalidProps","unsupportedWidgetType","sisenseContextNotFound","dashboardInvalidIdentifier","sharedFormula","identifierExpected","failedToFetch","widgetModel","incomleteWidget","unsupportedWidgetTypeDto","pivotWidgetNotSupported","textWidgetNotSupported","onlyTableWidgetSupported","onlyPivotWidgetSupported","onlyTextWidgetSupported","onlyCustomWidgetSupported","unsupportedFusionWidgetType","unknownFilterInFilterRelations","filterRelationsNotSupported","invalidFilterType","secondsDateTimeLevelSupportedOnlyForLive","missingMenuRoot","missingModalRoot","missingDataSource","incorrectOnDataReadyHandler","undefinedDataSource","emptyModel","missingMetadata","missingModelTitle","httpClientNotFound","serverSettingsNotLoaded","requiredColumnMissing","unexpectedChartType","noRowNumColumn","ticIntervalCalculationFailed","polarChartDesignOptionsExpected","polarChartDesignOptionsNotExpected","indicatorInvalidRelativeSize","unsupportedMapType","mapLoadingFailed","cascadingFilterOriginalNotFound","dashboardLoadFailed","widgetLoadFailed","dashboardWithOidNotFound","failedToAddWidget","widgetWithOidNotFound","widgetWithOidNotFoundInDashboard","widgetEmptyResponse","dateFilterIncorrectOperator","synchronizedFilterInvalidProps","methodNotImplemented","noPivotClient","unexpectedCacheValue","notAMembersFilter","drilldownNoInitialDimension","otherWidgetTypesNotSupported","dataBrowser","dimensionNotFound","addFilterPopover","noDataSources","tabberInvalidConfiguration","errorBoxText","chartNoData","filters","widgetDetails","cancel","includeAll","formatting","abbreviations","thousand","million","billion","trillion","criteriaFilter","displayModePrefix","equals","notEquals","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","between","notBetween","top","bottom","is","isNot","contains","notContains","startsWith","notStartsWith","endsWith","notEndsWith","like","byMeasure","by","dateFilter","last","from","to","select","today","days","weeks","months","quarters","years","earliestDate","latestDate","todayOutOfRange","dateRange","fromTo","boxplot","tooltip","whiskers","box","min","median","max","treemap","ofTotal","of","advanced","forecastValue","forecast","trend","trendLocalValue","confidenceInterval","trendType","trendDataKey","trendData","average","arearange","unsupportedFilterMessage","unsupportedFilter","commonFilter","clearSelectionButton","selectMenuItem","unselectMenuItem","customFilterTileMessage","filterRelations","and","or","andOrFormulaApplied","drilldown","drillMenuItem","breadcrumbsAllSuffix","breadcrumbsPrev","breadcrumbsNext","popover","members","table","column","widgetHeader","info","details","menu","deleteWidget","distributeEqualWidth","customWidgets","registerPrompt","ai","analyticsChatbot","dataTopics","chatbotDescription","topicSelectPrompt","preview","clearHistoryPrompt","inputPromptText","welcomeText","suggestionsWelcomeText","buttons","insights","correctResponse","incorrectResponse","clearChat","refresh","readMore","collapse","yes","no","seeMore","disclaimer","poweredByAi","rateRequest","chatUnavailable","fetchHistory","recommendationsNotAvailable","insightsNotAvailable","VectorDBEmptyResponseError","LlmBadConfigurationError","ChartTypeUnsupportedError","BlockedByLlmContentFiltering","LlmContextLengthExceedsLimitError","UserPromptExeedsLimitError","unexpectedChatResponse","unexpected","unknownResponse","invalidInput","noAvailableDataTopics","attribute","datetimeName","hours","minutes","filterEditor","apply","selectAll","clearAll","labels","allowMultiSelection","includeCurrent","placeholders","selectFromList","enterEntry","enterValue","conditions","exclude","notContain","isEmpty","isNotEmpty","isWithin","validationErrors","invalidNumber","invalidNumericRange","datetimeLevels","year","quarter","month","week","day","aggrigatedHour","aggrigatedMinutesRoundTo15","relativeTypes","this","datetimePositions","before","after","addFilter","selectField","configureFilter","noResults","searchPlaceholder","pivotTable","grandTotal","subTotal","dashboard","toolbar","undo","redo","editLayout","viewMode","jumpToDashboard","defaultCaption","jumpableTooltip","noDrillTargets","calendarHeatmap","navigation","firstMonth","lastMonth","previousMonth","nextMonth","previousGroup","nextGroup","en","uk","initializeI18n","plugins","i18nextInstance","listCacheClear","eq","other","assocIndexOf","array","length","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","entry","stackClear","stackDelete","stackGet","stackHas","freeGlobal","freeSelf","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObject","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getValue","getNative","Map","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","arrayEach","iteratee","defineProperty","baseAssignValue","assignValue","objValue","copyObject","props","customizer","isNew","baseTimes","isObjectLike","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","isArray","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","MAX_SAFE_INTEGER","reIsUint","isIndex","isLength","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","isPrototype","Ctor","proto","overArg","transform","arg","nativeKeys","baseKeys","isArrayLike","baseAssign","nativeKeysIn","baseKeysIn","isProto","keysIn","baseAssignIn","allocUnsafe","cloneBuffer","buffer","isDeep","copyArray","arrayFilter","predicate","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","copySymbols","arrayPush","values","offset","getPrototype","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","WeakMap","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolProto","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","symbolTag","initCloneByTag","objectCreate","baseCreate","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","bitmask","isFlat","isFull","isFunc","stacked","subValue","cloneDeep","createBaseFor","fromRight","iterable","baseFor","baseForOwn","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","equalByTag","convert","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","isSymbol","reIsDeepProp","reIsPlainProp","isKey","FUNC_ERROR_TEXT","memoize","memoized","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","quote","subString","arrayMap","INFINITY","symbolToString","baseToString","toString","castPath","toKey","baseGet","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","identity","baseProperty","basePropertyDeep","property","baseIteratee","mapValues","hash","hashA","hashB","charCode","SEPARATOR","XML_ELEMENT_REGEXP","CLASSES","ARRAY_LIKE_CLASSES","NON_ENUMERABLE_CLASSES","PRIMITIVE_WRAPPER_CLASSES","TYPED_ARRAY_CLASSES","RECURSIVE_CLASSES","HASHABLE_TYPES","sortByKey","first","second","sortBySelf","sort","subIndex","namespaceComplexValue","classType","NON_ENUMERABLE_CLASS_CACHE","refId","getUnsupportedHash","cached","toCache","stringifyComplexType","state","stringifyRecursiveAsJson","stringifyDocumentFragment","element","stringifyObject","stringifyArray","stringifyMap","stringifySet","stringifyArrayBuffer","stringify","stringifyArrayBufferModern","stringifyArrayBufferFallback","stringifyArrayBufferNone","fragment","children","innerHTML","properties","hashIt","assignMergeValue","isArrayLikeObject","objectCtorString","isPlainObject","safeGet","toPlainObject","baseMergeDeep","srcIndex","mergeFunc","isCommon","isTyped","baseMerge","thisArg","nativeMax","overRest","start","otherArgs","constant","baseSetToString","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","setToString","baseRest","isIterateeCall","createAssigner","assigner","sources","guard","merge","baseSlice","end","parent","baseUnset","customOmitClone","spreadableSymbol","isFlattenable","baseFlatten","depth","isStrict","flatten","flatRest","omit","translationKey","DimensionalElement","desc","dataSource","composeCode","normalizeName","normalizedName","DATA_MODEL_MODULE_NAME","AggregationTypes","Sort","MetadataTypes","o","DateLevels","DataType","JaqlSortDirection","CurrencyPosition","stringifyHelper","excludeProps","item","trimTrailingUndefined","withComposeCode","factoryName","funcName","trimmedArgs","argValues","signature","withComposeCodeForFilter","withComposeCodeForFilterRelations","withComposeCodeForAnalytics","withComposeCodeForMeasure","RankingTypes","RankingSortTypes","addToFormula","builder","context","measureFunction","measure","DimensionalCalculatedMeasure","customFormula","title","formula","newContext","arithmetic","operand1","operator","operand2","withParentheses","exp","aggregate","aggregationType","DimensionalBaseMeasure","sum","avg","countDistinct","measuredValue","add","value1","value2","subtract","multiply","divide","yearToDateSum","quarterToDateSum","monthToDateSum","weekToDateSum","runningSum","_continuous","growth","growthRate","growthPastWeek","growthPastMonth","growthPastQuarter","growthPastYear","difference","diffPastWeek","diffPastMonth","diffPastQuarter","diffPastYear","pastDay","pastWeek","pastMonth","pastQuarter","pastYear","contribution","params","adjustValues","adjustedOptions","startDate","endDate","rank","rankType","groupBy","groupByAttr","AbstractMeasure","agg","nested","attributeJaql","isDimensionalBaseMeasure","expression","isDimensionalCalculatedMeasure","DimensionalMeasureTemplate","m.sum","m.average","m.median","m.min","m.max","m.count","m.countDistinct","isDimensionalMeasureTemplate","isEqual","getDefaultBaseFilterConfig","guidFast","getDefaultMembersFilterConfig","isMembersFilterConfig","simplifyFilterConfig","defaultConfig","TextOperators","NumericOperators","DateOperators","LogicalOperators","RankingOperators","FilterTypes","AbstractFilter","att","filterType","level","granularityJaql","granularity","TranslatableError","LogicalAttributeFilter","MembersFilter","membersFilterJaql","filterJaql","CascadingFilter","disabled","locked","filter","ExcludeFilter","input","exclusion","DoubleOperatorFilter","operatorA","valueA","operatorB","valueB","MeasureFilter","RankingFilter","NumericFilter","TextFilter","DateRangeFilter","levelAttribute","valueFrom","valueTo","RelativeDateFilter","anchor","CustomFilter","jaql","isCustomFilter","isMembersFilter","isNumericFilter","isRankingFilter","isMeasureFilter","isExcludeFilter","isLogicalAttributeFilter","isCascadingFilter","isRelativeDateFilter","isTextFilter","isDateRangeFilter","union","intersection","doesntContain","doesntEndWith","doesntStartWith","doesntEqual","numeric","betweenNotEqual","dateFrom","dateTo","dateRelative","dateRelativeFrom","dateRelativeTo","thisYear","dimension","thisMonth","thisQuarter","measureBase","measureEquals","measureGreaterThan","measureGreaterThanOrEqual","measureLessThanOrEqual","measureLessThan","measureBetween","measureBetweenNotEqual","topRanking","bottomRanking","relate","node","cascading","logic","left","right","customFilter","createAttributeFromFilterJaql","dim","datatype","createAttributeHelper","getGranularityFromJaql","createMeasureFromFilterJaql","dataType","createMeasureHelper","createMeasureFromRankingFilterJaql","rankingMessage","createCalculatedMeasureHelper","GeneralFilterType","DateTimeFilterType","NumericFilterType","DatetimeLevel","FilterModalType","nonSupportedMinutesBuckets","FILTER_TYPES","DEFAULT_FILTER_JAQL_BY_TYPE_MAP","DEFAULT_FILTER_JAQL_WRAPPER","ConditionFilterType","isTopCondition","isBottomCondition","isExcludeCondition","_a","isMembersCondition","isWithinCondition","_b","isGreaterThanCondition","isGreaterThanOrEqualCondition","isLessThanCondition","isLessThanOrEqualCondition","isEqualsCondition","isNotEqualCondition","isEmptyCondition","isNotEmptyCondition","isContainsCondition","isDoesntContainCondition","isStartsWithCondition","isDoesntStartsWithCondition","isEndsWithCondition","isDoesntEndWithCondition","isBetweenCondition","isNotBetweenCondition","isMultipleCondition","getSelectedConditionOption","createAttributeFilterFromConditionFilterJaql","conditionFilterJaql","guid","_c","_d","_e","_f","_g","filterFactory.bottomRanking","filterFactory.equals","filterFactory.doesntEqual","filterFactory.greaterThan","filterFactory.greaterThanOrEqual","filterFactory.topRanking","filterFactory.startsWith","filterFactory.doesntStartWith","filterFactory.endsWith","filterFactory.doesntEndWith","filterFactory.contains","filterFactory.doesntContain","filterFactory.lessThan","filterFactory.lessThanOrEqual","filterFactory.between","filterFactory.exclude","filterFactory.intersection","filterFactory.union","deactivatedMembers","selectedMembers","member","filterFactory.members","createMeasureFilterFromConditionFilterJaql","filterFactory.measureEquals","filterFactory.measureGreaterThan","filterFactory.measureGreaterThanOrEqual","filterFactory.measureLessThan","filterFactory.measureLessThanOrEqual","filterFactory.measureBetween","getCorrectTimeLevel","bucket","newLevel","isIncludeAllFilter","getInnerPeriodFilter","isPeriodFilter","isSpecificItemsFilter","isFromOrToDefined","fromRange","toRange","isFromAndToEmpty","isNumericRangeFilter","isConditionFilter","isAdvancedFilter","isTimeLevelNotSupported","timeData","isInvalidFilter","getFilterType","extractFilterTypeFromFilterJaql","filterLevel","filterFromJaql","filterToReturn","backgroundFilter","createGenericFilter","baseFilter","createFilterIncludeAll","createFilterFromSpecificItemsFilterJaql","specificItemsFilterJaql","multiSelection","getDeactivatedMembersFromFilterJaql","activeMembers","getActiveMembersFromFilterJaql","allMembers","createFilterFromDateRangeFilterJaql","rangeFilterJaql","filterFactory.dateRange","createFilterFromNumericRangeJaql","createFilterFromPeriodFilterJaql","periodFilterJaql","filterFactory.dateRelativeTo","filterFactory.dateRelativeFrom","createFilterFromCustomFilterJaql","customFilterJaql","filterFactory.customFilter","createFilterFromJaqlInternal","filterJaqlWrapperWithType","filterJaqlWithType","isInteger","isDecimal","isNumber","isText","isDatetime","isBoolean","simpleColumnType","len","uuid","rnd","getFilterListAndRelationsJaql","traverseCascade","cascade","firstFilter","restFilters","traverse","isFilter","copiedFilterRelations","relations","getDataSourceName","isDataSourceInfo","convertDataSource","jaqlDataSource","convertJaqlDataSource","convertJaqlDataSourceForDto","convertSort","convertSortDirectionToSort","sortDirection","createFilterFromJaql","instanceid","hasBackgroundFilter","parseExpression","getTableNameFromAttribute","getColumnNameFromAttribute","getSortType","jaqlSort","panel","sortEnum","DimensionalLevelAttribute","attributeType","DimensionalAttribute","tranformedAgg","updatedTitle","measureFactory.sum","measureFactory.avg","measureFactory.min","measureFactory.max","measureFactory.count","measureFactory.countDistinct","measureFactory.median","measureFactory.aggregate","jaqlContextValue","createDimensionalElementFromJaql","measureFactory.customFormula","datetimeFormat","jaqlSimpleColumnType","normalizeAttributeName","isDimensionalAttribute","id","dateTimeLevel","levelName","MINUTES_LEVEL","SECONDS_LEVEL","json","returnUnsupported","isDimensionalLevelAttribute","createAttribute","createLevel","tableName","columnName","modelName","isLevelAttribute","isPivotAttribute","isPivotMeasure","DEFAULT_PIVOT_GRAND_TOTALS","isFilterRelations","mergeFiltersOrFilterRelations","sourceFilters","targetFilters","mergeFilters","pureSourceFilters","sourceRelations","splitFiltersAndRelations","pureTargetFilters","getFiltersArray","mergedFilters","mergedRelations","calculateNewRelations","combineFiltersAndRelations","filtersOrFilterRelations","filtersSet","isFilterNode","UnknownRelationsNodeError","isTrivialSingleNodeRelations","resultRelations","isRelationsRuleIdNode","isRelationsRule","filterFactory.logic","prevFilters","prevRelations","newFilters","performedActions","diffFilters","action","addFilterToRelations","removeFilterFromRelations","areFiltersEqualForRelations","filter1","filter2","getRelationsWithReplacedFilter","filterToReplace","newFilter","actions","prevFiltersCopy","newFiltersCopy","prevFilter","leftAfterRemoval","rightAfterRemoval","convertFilterRelationsModelToRelationRules","filterRelationsModel","isModelIdNode","isModelBracketNode","isModelRelationNode","isModelCascadeNode","cascadingFilterForThisCascade","levelIds","levelFilter","filterRelationRulesToFilterRelationsModel","filterRelationRules","findFilterByGuid","isOpenBracketDescriptionNode","isCloseBracketDescriptionNode","isAttributeDescriptionNode","isOperatorDescriptionNode","getFilterCompareId","filterAttribute","existingFilterIndex","existingFilter","convertFilterRelationsModelToJaql","convertedFilterRelations","newNode","prototype","objects","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","arr","randomUUID","native","v4","buf","rnds","applyHighlightFilters","metadataItem","highlights","getMetadataItemId","matchHighlightsWithAttributes","attributesMetadata","highlightsWithAttributes","highlightsWithoutAttributes","d","__rest","getPivotMetadataStats","rowsAttributes","columnsAttributes","measures","convertSortDirectionToJaqlSort","direction","preparePivotRowJaqlSortOptions","rowIndex","metadataStats","isLastRow","sortDetails","columnMember","columnIndex","normalizeLastRowSorting","metadata","lastRowIndex","lastRowMetadata","jaqlWithoutSortOptions","targetMeasureMetadata","JAQL_BY_CSDK","getJaqlQueryPayload","queryDescription","shouldSkipHighlightsWithoutAttributes","attributes","ungroup","includeUngroup","queryPayload","prepareQueryMetadata","prepareQueryOptions","prepareFilterMetadata","getFilterJaql","filtersMetadata","ensureNumericCountInContext","clonedItem","metadataDescription","measuresMetadata","getPivotJaqlQueryPayload","pivotQueryDescription","grandTotals","preparePivotQueryMetadata","preparePivotQueryOptions","jaqlPivotAttribute","isSortedRowAttribute","jaqlPivotMeasure","pivotMetadataDescription","fieldIndex","rowsAttributesMetadata","columnsAttributesMetadata","constructor","isReadyCacheValue","cacheValue","isPromisedCacheValue","createCache","createCacheKey","withCache","has","valuePromise","resultPromise","createdAt","Date","then","cacheMaxSize","clearOldestCacheValue","clearCache","specificKey","delete","clear","cacheKeys","Array","oldestKey","reduce","oldestCacheValue","prepareQueryParams","defaultDataSource","dimensions","forEach","isScope","dataSourceToQuery","executeQuery","app","executionConfig","queryParams","queryClient","catch","includes","executeCsvQuery","executePivotQuery","rows","columns","stringifyQueryPayload","JSON","queryGuid","createExecuteQueryCacheKey","QUERY_RESULTS_CACHE_MAX_SIZE","executeQueryWithCache","clearExecuteQueryCache"],"mappings":"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","x_google_ignoreList":[0,7,8,9,10,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,204,219,220,221,222,223]}