{"version":3,"file":"url.mjs","sources":["../../../src/utils/url.ts"],"sourcesContent":["/**\n * @preserve jquery-param (c) 2015 KNOWLEDGECODE | MIT\n */\n\nimport { isDateTime } from '../datetime/moment_wrapper';\nimport { ExploreUrlState, URLRange } from '../types/explore';\nimport { RawTimeRange } from '../types/time';\n\n/**\n * Type to represent the value of a single query variable.\n *\n * @public\n */\nexport type UrlQueryValue = string | number | boolean | string[] | number[] | boolean[] | undefined | null;\n\n/**\n * Type to represent the values parsed from the query string.\n *\n * @public\n */\nexport type UrlQueryMap = Record<string, UrlQueryValue>;\n\nfunction renderUrl(path: string, query: UrlQueryMap | undefined): string {\n  if (query && Object.keys(query).length > 0) {\n    path += '?' + toUrlParams(query);\n  }\n  return path;\n}\n\nfunction encodeURIComponentAsAngularJS(val: EncodeURIComponentParams, pctEncodeSpaces?: boolean) {\n  return encodeURIComponent(val)\n    .replace(/%40/gi, '@')\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%3B/gi, ';')\n    .replace(/%20/g, pctEncodeSpaces ? '%20' : '+')\n    .replace(/[!'()*]/g, function (c) {\n      return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n    });\n}\n\ntype EncodeURIComponentParams = Parameters<typeof encodeURIComponent>[0];\n/**\n *  Encodes URL parameters in the style of AngularJS.\n *  Use `serializeParams` to encode parameters using `encodeURIComponent` instead.\n */\nfunction toUrlParams(a: any, encodeAsAngularJS = true) {\n  const s: any[] = [];\n  const rbracket = /\\[\\]$/;\n\n  const encodingFunction = encodeAsAngularJS\n    ? (value: EncodeURIComponentParams, pctEncodeSpaces?: boolean) =>\n        encodeURIComponentAsAngularJS(value, pctEncodeSpaces)\n    : (value: EncodeURIComponentParams, _: boolean) => encodeURIComponent(value);\n\n  const isArray = (obj: unknown) => {\n    return Object.prototype.toString.call(obj) === '[object Array]';\n  };\n\n  const add = (k: string, v: any) => {\n    v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n    s[s.length] = encodingFunction(k, true) + '=' + encodingFunction(v, true);\n  };\n\n  const buildParams = (prefix: string, obj: any) => {\n    let i, len, key;\n\n    if (prefix) {\n      if (isArray(obj)) {\n        for (i = 0, len = obj.length; i < len; i++) {\n          if (rbracket.test(prefix)) {\n            add(prefix, obj[i]);\n          } else {\n            buildParams(prefix, obj[i]);\n          }\n        }\n      } else if (obj && String(obj) === '[object Object]') {\n        for (key in obj) {\n          buildParams(prefix + '[' + key + ']', obj[key]);\n        }\n      } else {\n        add(prefix, obj);\n      }\n    } else if (isArray(obj)) {\n      for (i = 0, len = obj.length; i < len; i++) {\n        add(obj[i].name, obj[i].value);\n      }\n    } else {\n      for (key in obj) {\n        buildParams(key, obj[key]);\n      }\n    }\n    return s;\n  };\n\n  return buildParams('', a).join('&');\n}\n\n/**\n * Converts params into a URL-encoded query string.\n *\n * @param params data to serialize\n * @returns A URL-encoded string representing the provided data.\n */\nfunction serializeParams(params: unknown): string {\n  return toUrlParams(params, false);\n}\n\nfunction appendQueryToUrl(url: string, stringToAppend: string) {\n  if (stringToAppend !== undefined && stringToAppend !== null && stringToAppend !== '') {\n    const pos = url.indexOf('?');\n    if (pos !== -1) {\n      if (url.length - pos > 1) {\n        url += '&';\n      }\n    } else {\n      url += '?';\n    }\n    url += stringToAppend;\n  }\n\n  return url;\n}\n\n/**\n * Return search part (as object) of current url\n */\nfunction getUrlSearchParams(): UrlQueryMap {\n  const search = window.location.search.substring(1);\n  const searchParamsSegments = search.split('&');\n  const params: UrlQueryMap = {};\n  for (const p of searchParamsSegments) {\n    const keyValuePair = p.split('=');\n    if (keyValuePair.length > 1) {\n      // key-value param\n      const key = decodeURIComponent(keyValuePair[0]);\n      const value = decodeURIComponent(keyValuePair[1]);\n      if (key in params) {\n        params[key] = [...(params[key] as any[]), value];\n      } else {\n        params[key] = [value];\n      }\n    } else if (keyValuePair.length === 1) {\n      // boolean param\n      const key = decodeURIComponent(keyValuePair[0]);\n      params[key] = true;\n    }\n  }\n  return params;\n}\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * Attribution: Code dervived from https://github.com/angular/angular.js/master/src/Angular.js#L1396\n * @returns {Object.<string,boolean|Array>}\n */\nexport function parseKeyValue(keyValue: string) {\n  const obj: any = {};\n  const parts = (keyValue || '').split('&');\n\n  for (let keyValue of parts) {\n    let splitPoint: number | undefined;\n    let key: string | undefined;\n    let val: string | undefined | boolean;\n\n    if (keyValue) {\n      key = keyValue = keyValue.replace(/\\+/g, '%20');\n      splitPoint = keyValue.indexOf('=');\n\n      if (splitPoint !== -1) {\n        key = keyValue.substring(0, splitPoint);\n        val = keyValue.substring(splitPoint + 1);\n      }\n\n      key = tryDecodeURIComponent(key);\n\n      if (key !== undefined) {\n        val = val !== undefined ? tryDecodeURIComponent(val as string) : true;\n\n        let parsedVal: any;\n        if (typeof val === 'string' && val !== '') {\n          parsedVal = val === 'true' || val === 'false' ? val === 'true' : val;\n        } else {\n          parsedVal = val;\n        }\n\n        if (!obj.hasOwnProperty(key)) {\n          obj[key] = isNaN(parsedVal) ? val : parsedVal;\n        } else if (Array.isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key], isNaN(parsedVal) ? val : parsedVal];\n        }\n      }\n    }\n  }\n\n  return obj;\n}\n\nfunction tryDecodeURIComponent(value: string): string | undefined {\n  try {\n    return decodeURIComponent(value);\n  } catch (e) {\n    return undefined;\n  }\n}\n\nexport const urlUtil = {\n  renderUrl,\n  toUrlParams,\n  appendQueryToUrl,\n  getUrlSearchParams,\n  parseKeyValue,\n  serializeParams,\n};\n\n/**\n * Create an string that is used in URL to represent the Explore state. This is basically just a stringified json\n * that is used as a state of a single Explore pane so it does not represent full Explore URL so some properties\n * may be omitted (they will be filled in with default values).\n *\n * @param urlState\n * @param compact this parameter is deprecated and will be removed in a future release.\n */\nexport function serializeStateToUrlParam(urlState: Partial<ExploreUrlState>, compact?: boolean): string {\n  if (compact !== undefined) {\n    console.warn('`compact` parameter is deprecated and will be removed in a future release');\n  }\n  return JSON.stringify(urlState);\n}\n\n/**\n * Converts RawTimeRange to a string that is stored in the URL\n * - relative - stays as it is (e.g. \"now\")\n * - absolute - converted to ms\n */\nexport const toURLRange = (range: RawTimeRange): URLRange => {\n  let from = range.from;\n  if (isDateTime(from)) {\n    from = from.valueOf().toString();\n  }\n\n  let to = range.to;\n  if (isDateTime(to)) {\n    to = to.valueOf().toString();\n  }\n\n  return {\n    from,\n    to,\n  };\n};\n"],"names":["keyValue"],"mappings":"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"}