CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
info.js124 linesDownload Raw Back to lib
1let browserslist = require('browserslist')2 3function capitalize(str) {4  return str.slice(0, 1).toUpperCase() + str.slice(1)5}6 7const NAMES = {8  and_chr: 'Chrome for Android',9  and_ff: 'Firefox for Android',10  and_qq: 'QQ Browser',11  and_uc: 'UC for Android',12  baidu: 'Baidu Browser',13  ie: 'IE',14  ie_mob: 'IE Mobile',15  ios_saf: 'iOS Safari',16  kaios: 'KaiOS Browser',17  op_mini: 'Opera Mini',18  op_mob: 'Opera Mobile',19  samsung: 'Samsung Internet'20}21 22function prefix(name, prefixes, note) {23  let out = `  ${name}`24  if (note) out += ' *'25  out += ': '26  out += prefixes.map(i => i.replace(/^-(.*)-$/g, '$1')).join(', ')27  out += '\n'28  return out29}30 31module.exports = function (prefixes) {32  if (prefixes.browsers.selected.length === 0) {33    return 'No browsers selected'34  }35 36  let versions = {}37  for (let browser of prefixes.browsers.selected) {38    let parts = browser.split(' ')39    let name = parts[0]40    let version = parts[1]41 42    name = NAMES[name] || capitalize(name)43    if (versions[name]) {44      versions[name].push(version)45    } else {46      versions[name] = [version]47    }48  }49 50  let out = 'Browsers:\n'51  for (let browser in versions) {52    let list = versions[browser]53    list = list.sort((a, b) => parseFloat(b) - parseFloat(a))54    out += `  ${browser}: ${list.join(', ')}\n`55  }56 57  let coverage = browserslist.coverage(prefixes.browsers.selected)58  let round = Math.round(coverage * 100) / 100.059  out += `\nThese browsers account for ${round}% of all users globally\n`60 61  let atrules = []62  for (let name in prefixes.add) {63    let data = prefixes.add[name]64    if (name[0] === '@' && data.prefixes) {65      atrules.push(prefix(name, data.prefixes))66    }67  }68  if (atrules.length > 0) {69    out += `\nAt-Rules:\n${atrules.sort().join('')}`70  }71 72  let selectors = []73  for (let selector of prefixes.add.selectors) {74    if (selector.prefixes) {75      selectors.push(prefix(selector.name, selector.prefixes))76    }77  }78  if (selectors.length > 0) {79    out += `\nSelectors:\n${selectors.sort().join('')}`80  }81 82  let values = []83  let props = []84  let hadGrid = false85  for (let name in prefixes.add) {86    let data = prefixes.add[name]87    if (name[0] !== '@' && data.prefixes) {88      let grid = name.indexOf('grid-') === 089      if (grid) hadGrid = true90      props.push(prefix(name, data.prefixes, grid))91    }92 93    if (!Array.isArray(data.values)) {94      continue95    }96    for (let value of data.values) {97      let grid = value.name.includes('grid')98      if (grid) hadGrid = true99      let string = prefix(value.name, value.prefixes, grid)100      if (!values.includes(string)) {101        values.push(string)102      }103    }104  }105 106  if (props.length > 0) {107    out += `\nProperties:\n${props.sort().join('')}`108  }109  if (values.length > 0) {110    out += `\nValues:\n${values.sort().join('')}`111  }112  if (hadGrid) {113    out += '\n* - Prefixes will be added only on grid: true option.\n'114  }115 116  if (!atrules.length && !selectors.length && !props.length && !values.length) {117    out +=118      "\nAwesome! Your browsers don't require any vendor prefixes." +119      '\nNow you can remove Autoprefixer from build steps.'120  }121 122  return out123}124