{
  "version": 3,
  "sources": ["src/index.ts", "src/parse/index.ts", "src/toNumber/index.ts", "src/uaVendorsList/index.ts"],
  "sourcesContent": ["import { parse } from \"./parse\";\nimport { toNumber } from \"./toNumber\";\nimport { uaVendorsList } from \"./uaVendorsList\";\n\n/**\n * Known vendor names in level of priority\n * Used to prioritize Chromium based browsers the name even though the name \"Chromium\" may appear first in the list\n */\nconst vendors: string[] = [\n  \"Chrome\",\n  \"Google Chrome\",\n  \"Microsoft Edge\",\n  \"Brave\",\n  \"HeadlessChrome\",\n  \"YaBrowser\",\n];\n\nconst HEADERS: Record<string, string> = {\n  BITNESS: \"sec-ch-ua-bitness\",\n  CONTENT_DPR: \"content-dpr\",\n  DEVICE_MEMORY: \"device-memory\",\n  DOWNLINK: \"downlink\",\n  DPR: \"dpr\",\n  ECT: \"ect\",\n  FETCH_DEST: \"sec-fetch-dest\",\n  FETCH_MODE: \"sec-fetch-mode\",\n  FETCH_SITE: \"sec-fetch-site\",\n  FETCH_USER: \"sec-fetch-user\",\n  GPC: \"sec-gpc\",\n  MOBILE: \"sec-ch-ua-mobile\",\n  PREFERS_COLOR_SCHEME: \"sec-ch-prefers-color-scheme\",\n  PREFERS_REDUCED_MOTION: \"sec-ch-prefers-reduced-motion\",\n  PREFERS_REDUCED_TRANSPARENCY: \"sec-ch-prefers-reduced-transparency\",\n  PURPOSE: \"sec-purpose\",\n  USER_AGENT_ARCH: \"sec-ch-ua-arch\",\n  USER_AGENT_MODEL: \"sec-ch-ua-model\",\n  USER_AGENT_PLATFORM_VERSION: \"sec-ch-ua-platform-version\",\n  USER_AGENT_PLATFORM: \"sec-ch-ua-platform\",\n  USER_AGENT_VERSION_LIST: \"sec-ch-ua-full-version-list\",\n  USER_AGENT_VERSION: \"sec-ch-ua-full-version\",\n  USER_AGENT: \"sec-ch-ua\",\n  VIEWPORT_WIDTH: \"viewport-width\",\n  WIDTH: \"width\",\n};\n\n/**\n * Parse client hints headers and provide a convenient API to access device information and user preferences\n */\nexport class ClientHints {\n  entries: [string, string][];\n  constructor(input: Request | Headers | object) {\n    const headers =\n      input instanceof Request ? (input as Request).headers : input;\n    const entries =\n      headers instanceof Headers\n        ? Array.from((headers as globalThis.Headers).entries())\n        : Object.entries(headers);\n    this.entries = entries.map(([key, value]) => [key.toLowerCase(), value]);\n  }\n\n  #store = new Map();\n\n  /**\n   * @param name: header name\n   * @returns comma separted list of header values\n   */\n  #get(name: string): string | undefined {\n    const list = this.entries\n      .filter(([key]) => key === name)\n      .map(([, value]) => value);\n    return list.length ? list.join(\", \") : undefined;\n  }\n\n  get #uaVendorsList(): { name: string; v?: string; version?: string }[] {\n    if (!this.#store.has(\"uaVendorsList\")) {\n      const header =\n        this.#get(HEADERS.USER_AGENT_VERSION_LIST) ||\n        this.#get(HEADERS.USER_AGENT);\n      if (header) {\n        this.#store.set(\"uaVendorsList\", uaVendorsList(header));\n      } else {\n        this.#store.set(\"uaVendorsList\", []);\n      }\n    }\n    return this.#store.get(\"uaVendorsList\");\n  }\n\n  /**\n   * Convert to a JSONable object. Also used in the implementation of JSON.stringify\n   * @example\n   * console.log(new ClientHints(request)) // {\"mobile\":true,\"vendorName\":\"Chrome\",\"vendorVersion\":\"91\",...}\n   */\n  toJSON(): Record<string, string | number | boolean> {\n    return Object.getOwnPropertyNames(Object.getPrototypeOf(this))\n      .filter((name) => name !== \"constructor\")\n      .reduce(\n        (acc, name) =>\n          this[name] !== \"\" ? Object.assign(acc, { [name]: this[name] }) : acc,\n        {},\n      );\n  }\n\n  /**\n   * The browser is on a mobile device\n   */\n  get mobile(): boolean | undefined {\n    const value = this.#get(HEADERS.MOBILE);\n    return value ? value.includes(\"?1\") : undefined;\n  }\n\n  /**\n   * Browser brand name\n   */\n  get vendorName(): string | undefined {\n    const names = this.#uaVendorsList\n      .map(({ name }) => name)\n      .filter((name) => !/^[\\W]*not/i.test(name));\n    return vendors.find((vendor) => names.includes(vendor)) ?? names.at(0);\n  }\n\n  /**\n   * Browser version\n   */\n  get vendorVersion(): string | undefined {\n    const header = this.#get(HEADERS.USER_AGENT_VERSION);\n    if (header) {\n      return parse(header);\n    }\n    const entry = this.#uaVendorsList.find(\n      ({ name }) => name === this.vendorName,\n    );\n    return entry?.v || entry?.version || undefined;\n  }\n\n  /**\n   * Operating system name\n   */\n  get platform(): string | undefined {\n    return parse(this.#get(HEADERS.USER_AGENT_PLATFORM));\n  }\n\n  /**\n   * Operating system version\n   */\n  get platformVersion(): string | undefined {\n    return parse(this.#get(HEADERS.USER_AGENT_PLATFORM_VERSION));\n  }\n\n  /**\n   * Relationship to origin\n   */\n  get fetchSite(): string | undefined {\n    return parse(this.#get(HEADERS.FETCH_SITE));\n  }\n\n  /**\n   * Navigation type (navigate, nested-navigate, same-origin, cross-origin, ...)\n   */\n  get fetchMode(): string | undefined {\n    return parse(this.#get(HEADERS.FETCH_MODE));\n  }\n\n  /**\n   * Resource type (document, iframe, script, image, ...)\n   */\n  get fetchDest(): string | undefined {\n    return parse(this.#get(HEADERS.FETCH_DEST));\n  }\n\n  /**\n   * Resource type (document, iframe, script, image, ...)\n   */\n  get fetchDestination(): string | undefined {\n    return parse(this.#get(HEADERS.FETCH_DEST));\n  }\n\n  /**\n   * User activation\n   */\n  get fetchUser(): boolean | undefined {\n    const value = this.#get(HEADERS.FETCH_USER);\n    return value ? value.includes(\"?1\") : undefined;\n  }\n\n  /**\n   * CPU architecture (ARM, x86)\n   */\n  get arch(): string | undefined {\n    return parse(this.#get(HEADERS.USER_AGENT_ARCH));\n  }\n\n  /**\n   * CPU architecture (ARM, x86)\n   */\n  get architecture(): string | undefined {\n    return parse(this.#get(HEADERS.USER_AGENT_ARCH));\n  }\n\n  /**\n   * CPU bitness (32, 64)\n   */\n  get bitness(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.BITNESS)));\n  }\n\n  /**\n   * Device model name\n   */\n  get model(): string | undefined {\n    return parse(this.#get(HEADERS.USER_AGENT_MODEL));\n  }\n\n  /**\n   * Device amount of RAM (approximate)\n   */\n  get deviceMemory(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.DEVICE_MEMORY)));\n  }\n\n  /**\n   * [Deprecated] Image density suitable for the screen\n   */\n  get contentDevicePixelRatio(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.CONTENT_DPR)));\n  }\n\n  /**\n   * [Deprecated] Image density suitable for the screen\n   */\n  get contentDpr(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.CONTENT_DPR)));\n  }\n\n  /**\n   * [Deprecated] Screen pixel density\n   */\n  get devicePixelRatio(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.DPR)));\n  }\n\n  /**\n   * [Deprecated] Screen pixel density\n   */\n  get dpr(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.DPR)));\n  }\n\n  /**\n   * Connection type name (slow-2g, 2g, 3g, 4g, ...)\n   */\n  get effectiveConnectionType(): string | undefined {\n    return parse(this.#get(HEADERS.ECT));\n  }\n\n  /**\n   * Connection type name (slow-2g, 2g, 3g, 4g, ...)\n   */\n  get ect(): string | undefined {\n    return parse(this.#get(HEADERS.ECT));\n  }\n\n  /**\n   * Approximate bandwidth of the connection\n   */\n  get downlink(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.DOWNLINK)));\n  }\n\n  /**\n   * [Deprecated] Screen width in pixels\n   */\n  get width(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.WIDTH)));\n  }\n\n  /**\n   * [Deprecated] Viewport width in pixels\n   */\n  get viewportWidth(): number | undefined {\n    return toNumber(parse(this.#get(HEADERS.VIEWPORT_WIDTH)));\n  }\n\n  /**\n   * Accesibility; Preferred color scheme (light, dark)\n   */\n  get prefersColorScheme(): \"light\" | \"dark\" | undefined {\n    return parse(this.#get(HEADERS.PREFERS_COLOR_SCHEME));\n  }\n\n  /**\n   * Accesibility; Preferred reduced motion setting\n   */\n  get prefersReducedMotion(): boolean | undefined {\n    switch (this.#get(HEADERS.PREFERS_REDUCED_MOTION)) {\n      case \"no-preference\":\n        return false;\n      case \"reduce\":\n        return true;\n      default:\n        return undefined;\n    }\n  }\n\n  /**\n   * Accesibility; Preferred reduced transparency setting\n   */\n  get prefersReducedTransparency(): boolean | undefined {\n    switch (this.#get(HEADERS.PREFERS_REDUCED_TRANSPARENCY)) {\n      case \"no-preference\":\n        return false;\n      case \"reduce\":\n        return true;\n      default:\n        return undefined;\n    }\n  }\n\n  /**\n   * Purpose of the request (prefetch, ...)\n   */\n  get purpose(): string | undefined {\n    return parse(this.#get(HEADERS.PURPOSE));\n  }\n\n  /**\n   * [Non-standard] Global privacy control (GPC) setting\n   */\n  get gpc(): boolean | undefined {\n    const value = this.#get(HEADERS.GPC);\n    return value ? value === \"1\" : undefined;\n  }\n}\n", "/**\n * Try to parse as JSON but return original argument if it fails\n */\nexport function parse(input: any): any {\n  try {\n    if (!input) return undefined;\n    return JSON.parse(input)?.trim();\n  } catch (error) {\n    return input ?? undefined;\n  }\n}\n", "const NULLABLES: (null | undefined | \"\")[] = [null, undefined, \"\"];\n\n/**\n * Convert numeric to numbers and others to undefined\n */\nexport function toNumber(input: any): number {\n  if (NULLABLES.includes(input)) {\n    return undefined;\n  }\n  const result = Number(input);\n  if (Number.isNaN(result)) {\n    return undefined;\n  }\n  return result;\n}\n", "import { parse } from \"../parse\";\n\n/**\n * Make an array of each two cells of an array\n */\nconst pairs = (array: any[]): any[][] =>\n  array.reduce(\n    (accumulator, value, index, array) =>\n      index % 2 === 0\n        ? [...accumulator, array.slice(index, index + 2)]\n        : accumulator,\n    [],\n  );\n\n/**\n * Replace tokens by index\n */\nconst extractTokens = (string: string, tokens: string[]): string =>\n  string.replace(/__TOKEN\\[(\\d*)]__/g, (input, match) =>\n    match ? tokens[match] : input,\n  );\n\n/**\n * Get all indexes of a substring within a string\n */\nfunction getIndexes(string: string, substring: string): number[] {\n  const indexes = [];\n  let index = -1;\n  while (true) {\n    // eslint-disable-line no-constant-condition\n    index = string.indexOf(substring, index + 1);\n    if (index === -1) {\n      break;\n    } else {\n      indexes.push(index);\n    }\n  }\n  return indexes;\n}\n\n/**\n * Break comma separated string into an array\n */\nfunction getEntries(string: string): string[] {\n  const tokens = pairs(getIndexes(string, '\"'))\n    .map(([start, end]) => string.slice(start, end + 1))\n    .map((token, index) => {\n      string = string.replace(token, `__TOKEN[${index}]__`);\n      return token;\n    });\n\n  return string.split(\",\").map((cell) => extractTokens(cell, tokens).trim());\n}\n\n/**\n * Extract user agent list from user agent header\n */\nexport const uaVendorsList = (string: string): Record<string, any> =>\n  getEntries(string).map((entry) => {\n    const tokens = pairs(getIndexes(entry, '\"'))\n      .map(([start, end]) => entry.substring(start, end + 1))\n      .map((token, index) => {\n        entry = entry.replace(token, `__TOKEN[${index}]__`);\n        return parse(token);\n      });\n\n    return Object.fromEntries(\n      entry.split(\";\").map((cell) => {\n        const parts = cell.split(\"=\");\n        return parts.length > 1\n          ? [extractTokens(parts[0], tokens), extractTokens(parts[1], tokens)]\n          : [\"name\", extractTokens(parts[0], tokens)];\n      }),\n    );\n  });\n"],
  "mappings": "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",
  "names": ["array"]
}
