{"mappings":";AAYA;;;;;;GAMG;AACH,qBAAsB,SAAQ,UAAU;;IAKtC,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,EAAE,EAAE,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;IACZ,EAAE,EAAE,EAAE,CAAC;IACP,MAAM,EAAE,GAAG,CAAC;IACZ,GAAG,EAAE,EAAE,CAAC;IACR,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;;OAOG;gBACS,EAAE,GAAE,MAAM,GAAG,IAAW,EAAE,MAAM,UAAO,EAAE,QAAQ,UAAQ,EAAE,cAAc,SAAQ;IAsC7F;;;;;OAKG;IACH,YAAY;IAgBZ;;;;;OAKG;IACH,WAAW;IAcX;;;;;OAKG;IACH,YAAY;IAcZ;;;;;OAKG;IACH,OAAO;IAeP;;;;;OAKG;IACH,WAAW;IAUX;;;;;OAKG;IACH,QAAQ;IAcR;;;;;OAKG;IACH,QAAQ;IAUR;;;;;OAKG;IACH,aAAa;IAeb;;;;;OAKG;IACH,WAAW;CAeZ","sources":["packages/detector/lib/lib/detector.ts","packages/detector/lib/detector.ts"],"sourcesContent":[null,"/*jshint expr: true */\nimport { FlagsClass } from '@detector-js/core';\n\n//! Features\nimport { Feature, AudioFeature, VideoFeature } from '@detector-js/feature';\n\n//! Hardware\nimport { Platform, Device, CPU, GPU } from '@detector-js/hardware';\n\n//! Software\nimport { Browser, Engine, OS } from '@detector-js/software';\n\n/**\n *\n *\n * @export\n * @class Detector\n * @extends {FlagsClass}\n */\nexport class Detector extends FlagsClass {\n  #values: boolean;\n  #cssFlags: string[] | null;\n  #cssFlagsPrefix: string;\n\n  feature: any;\n  browser: {};\n  engine: any;\n  os: {};\n  device: any;\n  cpu: {};\n  gpu: any;\n  platform: string;\n\n  /**\n   * Creates an instance of Detector.\n   * @param {boolean} [cssFlags=false]\n   * @param {string} [cssFlagsPrefix='djs']\n   * @param {any} [ua=null]\n   *\n   * @memberOf Detector\n   */\n  constructor(ua: string | null = null, values = true, cssFlags = false, cssFlagsPrefix = 'djs') {\n    super(ua);\n\n    this.#values = values;\n    this.#cssFlags = !!cssFlags ? [] : null;\n    this.#cssFlagsPrefix = cssFlagsPrefix + (!!cssFlagsPrefix ? '--' : '');\n\n    //! Features\n    this.checkFeature();\n\n    //! Software\n    this.checkEngine();\n    this.checkBrowser();\n    this.checkOS();\n\n    //! Hardware\n    // this.checkDevice();\n    this.checkCPU();\n    this.checkGPU();\n    this.checkPlatform();\n\n    this.setCssFlags();\n\n    // remove unnecessary memory usage\n    // delete this.booleanFlagsValuePropertyName;\n    // delete this._values;\n    // delete this._cssFlags;\n    // delete this._cssFlagsPrefix;\n    // delete this.root;\n    // delete this.process;\n    // delete this.navigator;\n    // delete this.document;\n    // delete this.ua;\n\n    // console.warn('DetectorJS initialized', this.toFlags());\n  }\n\n  //! Feature\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkFeature() {\n    const feature = new Feature(this.ua);\n    const audio = new AudioFeature(this.ua);\n    const video = new VideoFeature(this.ua);\n\n    this.feature = feature.toFlags().merge({\n      audio: audio.toFlags(),\n      video: video.toFlags()\n    });\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(feature.toCssFlags(), audio.toCssFlags(), video.toCssFlags());\n    }\n  }\n\n  //! Software\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkEngine() {\n    const engine = new Engine(this.ua, this.toFlags());\n\n    if (this.#values) {\n      this.engine = engine.toValues();\n    } else {\n      this.engine = engine.toFlags();\n    }\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(engine.toCssFlags());\n    }\n  }\n\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkBrowser() {\n    const browser = new Browser(this.ua, this.toFlags());\n\n    if (this.#values) {\n      this.browser = browser.toValues();\n    } else {\n      this.browser = browser.toFlags();\n    }\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(browser.toCssFlags());\n    }\n  }\n\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkOS() {\n    const os = new OS(this.ua, this.toFlags());\n\n    if (this.#values) {\n      this.os = os.toValues();\n    } else {\n      this.os = os.toFlags();\n    }\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(os.toCssFlags());\n    }\n  }\n\n  //! Hardware\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkDevice() {\n    const device = new Device(this.ua, this.toFlags());\n\n    this.device = device.toFlags();\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(device.toCssFlags());\n    }\n  }\n\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkCPU() {\n    const cpu = new CPU(this.ua, this.toFlags());\n\n    if (this.#values) {\n      this.cpu = cpu.toValues();\n    } else {\n      this.cpu = cpu.toFlags();\n    }\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(cpu.toCssFlags());\n    }\n  }\n\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkGPU() {\n    const gpu = new GPU(this.ua, this.toFlags());\n\n    this.gpu = gpu.toFlags();\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(gpu.toCssFlags());\n    }\n  }\n\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  checkPlatform() {\n    const platform = new Platform(this.ua, this.toFlags());\n\n    if (this.#values) {\n      this.platform = platform.toValues();\n    } else {\n      this.platform = platform.toFlags();\n    }\n\n    if (!!this.#cssFlags) {\n      this.#cssFlags = this.#cssFlags.concat(platform.toCssFlags());\n    }\n  }\n\n  //! CSS Flags\n  /**\n   *\n   *\n   *\n   * @memberOf Detector\n   */\n  setCssFlags() {\n    if (!!this.#cssFlags) {\n      const cssFlagsPrefixed = this.#cssFlags.map((cssFlag) => {\n        return this.#cssFlagsPrefix + cssFlag;\n      });\n\n      const htmlElement = document.documentElement || document.querySelector('html');\n\n      cssFlagsPrefixed.forEach((cssFlag) => {\n        return htmlElement.className.replace(cssFlag, '');\n      });\n\n      htmlElement.className += cssFlagsPrefixed.join(' ').trim();\n    }\n  }\n}\n\nif (process.env.NODE_ENV === 'development') {\n  const packageJSON = require('../package.json');\n\n  console.log(`${packageJSON.description} v${packageJSON.version} initialized`);\n}\n"],"names":[],"version":3,"file":"detector.types.d.ts.map"}