{"version":3,"sources":["../../../src/utils/index.ts"],"sourcesContent":["import type { Primitive, NestedParam, Hash, NestedParamArray } from '../types'\nimport type Process from 'node:process'\n\nlet _process: typeof Process,\n  getNanoSeconds: (() => number) | undefined,\n  loadTime: number | undefined\n\ntry {\n  _process = eval(\n    'typeof __TEST_WEB__ === \"undefined\" && typeof process === \"object\" ? process : undefined'\n  )\n} catch (_e) {} // eslint-disable-line no-empty\n\nconst hasProcessHrtime = () => {\n  return typeof _process !== 'undefined' && _process !== null && _process.hrtime\n}\n\nif (hasProcessHrtime()) {\n  getNanoSeconds = () => {\n    const hr = _process.hrtime()\n    return hr[0] * 1e9 + hr[1]\n  }\n  loadTime = getNanoSeconds()\n}\n\nconst R20 = /%20/g\n\nconst isNeitherNullNorUndefined = <T>(x: T | undefined | null): x is T =>\n  x !== null && x !== undefined\n\nexport const validKeys = (entry: Record<string, unknown>) =>\n  Object.keys(entry).filter((key) => isNeitherNullNorUndefined(entry[key]))\n\nexport const buildRecursive = (\n  key: string,\n  value: Primitive | NestedParam | NestedParamArray,\n  suffix = '',\n  encoderFn = encodeURIComponent\n): string => {\n  if (Array.isArray(value)) {\n    return value.map((v) => buildRecursive(key, v, suffix + '[]', encoderFn)).join('&')\n  }\n\n  if (typeof value !== 'object') {\n    return `${encoderFn(key + suffix)}=${encoderFn(value)}`\n  }\n\n  return Object.keys(value)\n    .map((nestedKey) => {\n      const nestedValue = value[nestedKey]\n      if (isNeitherNullNorUndefined(nestedValue)) {\n        return buildRecursive(key, nestedValue, suffix + '[' + nestedKey + ']', encoderFn)\n      }\n      return null\n    })\n    .filter(isNeitherNullNorUndefined)\n    .join('&')\n}\n\nexport const toQueryString = (\n  entry: undefined | null | Primitive | NestedParam,\n  encoderFn = encodeURIComponent\n) => {\n  if (!isPlainObject(entry)) {\n    return entry\n  }\n\n  return Object.keys(entry)\n    .map((key) => {\n      const value = entry[key]\n      if (isNeitherNullNorUndefined(value)) {\n        return buildRecursive(key, value, '', encoderFn)\n      }\n      return null\n    })\n    .filter(isNeitherNullNorUndefined)\n    .join('&')\n    .replace(R20, '+')\n}\n\n/**\n * Gives time in milliseconds, but with sub-millisecond precision for Browser\n * and Nodejs\n */\nexport const performanceNow = () => {\n  if (hasProcessHrtime() && getNanoSeconds !== undefined) {\n    const now = getNanoSeconds()\n    if (now !== undefined && loadTime !== undefined) {\n      return (now - loadTime) / 1e6\n    }\n  }\n\n  return Date.now()\n}\n\n/**\n * borrowed from: {@link https://gist.github.com/monsur/706839}\n * XmlHttpRequest's getAllResponseHeaders() method returns a string of response\n * headers according to the format described here:\n * {@link http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders-method}\n * This method parses that string into a user-friendly key/value pair object.\n */\nexport const parseResponseHeaders = (headerStr: string) => {\n  const headers: Hash = {}\n  if (!headerStr) {\n    return headers\n  }\n\n  const headerPairs = headerStr.split('\\u000d\\u000a')\n  for (let i = 0; i < headerPairs.length; i++) {\n    const headerPair = headerPairs[i]\n    // Can't use split() here because it does the wrong thing\n    // if the header value has the string \": \" in it.\n    const index = headerPair.indexOf('\\u003a\\u0020')\n    if (index > 0) {\n      const key = headerPair.substring(0, index).toLowerCase().trim()\n      const val = headerPair.substring(index + 2).trim()\n      headers[key] = val\n    }\n  }\n  return headers\n}\n\nexport const lowerCaseObjectKeys = (obj: Hash) => {\n  return Object.keys(obj).reduce((target, key) => {\n    target[key.toLowerCase()] = obj[key]\n    return target\n  }, {} as Hash)\n}\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty\nexport const assign =\n  Object.assign ||\n  function (target: Hash) {\n    for (let i = 1; i < arguments.length; i++) {\n      // eslint-disable-next-line prefer-rest-params\n      const source = arguments[i]\n      for (const key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          target[key] = source[key]\n        }\n      }\n    }\n    return target\n  }\n\nconst toString = Object.prototype.toString\nexport const isPlainObject = (value: unknown): value is Record<string, unknown> => {\n  return (\n    toString.call(value) === '[object Object]' &&\n    Object.getPrototypeOf(value) === Object.getPrototypeOf({})\n  )\n}\n\nexport const isObject = (value: unknown): value is Record<string, unknown> => {\n  return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * borrowed from: {@link https://github.com/davidchambers/Base64.js}\n */\nconst CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nexport const btoa = (input: object | Primitive | null) => {\n  let output = ''\n  let map = CHARS\n  const str = String(input)\n  for (\n    // initialize result and counter\n    let block = 0, charCode: number, idx = 0;\n    // if the next str index does not exist:\n    //   change the mapping table to \"=\"\n    //   check if d has no fractional digits\n    str.charAt(idx | 0) || ((map = '='), idx % 1);\n    // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n    output += map.charAt(63 & (block >> (8 - (idx % 1) * 8)))\n  ) {\n    charCode = str.charCodeAt((idx += 3 / 4))\n    if (charCode > 0xff) {\n      throw new Error(\n        \"[Mappersmith] 'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\"\n      )\n    }\n    block = (block << 8) | charCode\n  }\n  return output\n}\n"],"mappings":"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","names":[]}