CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
browsers.js80 linesDownload Raw Back to lib
1let browserslist = require('browserslist')2let { agents } = require('caniuse-lite/dist/unpacker/agents')3 4let utils = require('./utils')5 6class Browsers {7  constructor(data, requirements, options, browserslistOpts) {8    this.data = data9    this.options = options || {}10    this.browserslistOpts = browserslistOpts || {}11    this.selected = this.parse(requirements)12  }13 14  /**15   * Return all prefixes for default browser data16   */17  static prefixes() {18    if (this.prefixesCache) {19      return this.prefixesCache20    }21 22    this.prefixesCache = []23    for (let name in agents) {24      this.prefixesCache.push(`-${agents[name].prefix}-`)25    }26 27    this.prefixesCache = utils28      .uniq(this.prefixesCache)29      .sort((a, b) => b.length - a.length)30 31    return this.prefixesCache32  }33 34  /**35   * Check is value contain any possible prefix36   */37  static withPrefix(value) {38    if (!this.prefixesRegexp) {39      this.prefixesRegexp = new RegExp(this.prefixes().join('|'))40    }41 42    return this.prefixesRegexp.test(value)43  }44 45  /**46   * Is browser is selected by requirements47   */48  isSelected(browser) {49    return this.selected.includes(browser)50  }51 52  /**53   * Return browsers selected by requirements54   */55  parse(requirements) {56    let opts = {}57    for (let i in this.browserslistOpts) {58      opts[i] = this.browserslistOpts[i]59    }60    opts.path = this.options.from61    return browserslist(requirements, opts)62  }63 64  /**65   * Return prefix for selected browser66   */67  prefix(browser) {68    let [name, version] = browser.split(' ')69    let data = this.data[name]70 71    let prefix = data.prefix_exceptions && data.prefix_exceptions[version]72    if (!prefix) {73      prefix = data.prefix74    }75    return `-${prefix}-`76  }77}78 79module.exports = Browsers80