|
| 1 | +/// <reference path="../types/types.js" /> |
| 2 | +import browserslist from 'browserslist' |
| 3 | +import { isFileDirExists } from '../utils/fs.js' |
| 4 | +import chalk from 'chalk' |
| 5 | + |
| 6 | +/** |
| 7 | + * #### get browserslist info from ${cwdPath}/.browserlistrc |
| 8 | + * @async |
| 9 | + * @param {LOCALDATA} data - local data |
| 10 | + * @returns undefined |
| 11 | + */ |
| 12 | +async function browsers (data) { |
| 13 | + if (await isFileDirExists(`${data.cwd.path}/.browserslistrc`)) { |
| 14 | + const browsrs = browserslist(undefined, { |
| 15 | + path: `${data.cwd.path}/.browserslistrc`, |
| 16 | + config: '.browserslistrc' |
| 17 | + }) |
| 18 | + const browserslistConfig = browserslist.readConfig(`${data.cwd.path}/.browserslistrc`) |
| 19 | + const configToString = browserslistConfig.defaults.join('__NEWLINE__').replace(/ /g, '+') |
| 20 | + const encodedString = encodeURI(configToString) |
| 21 | + const browserslistLink = encodedString.replace(/__NEWLINE__/g, '%0A') + '%0A' |
| 22 | + const global = browserslist.coverage(browserslist(browserslistConfig.defaults)) |
| 23 | + const eu = browserslist.coverage(browserslist(browserslistConfig.defaults), 'alt-EU') |
| 24 | + const se = browserslist.coverage(browserslist(browserslistConfig.defaults), 'SE') |
| 25 | + const chromeFirst = browsrs.find(e => e.includes('chrome')) |
| 26 | + const chromeLast = browsrs.slice().reverse().find(e => e.includes('chrome')) |
| 27 | + const firefoxFirst = browsrs.find(e => e.includes('firefox')) |
| 28 | + const firefoxLast = browsrs.slice().reverse().find(e => e.includes('firefox')) |
| 29 | + const iosSafFirst = browsrs.find(e => e.includes('ios_saf')) |
| 30 | + const iosSafLast = browsrs.slice().reverse().find(e => e.includes('ios_saf')) |
| 31 | + const safariFirst = browsrs.find(e => e.includes('safari')) |
| 32 | + const safariLast = browsrs.slice().reverse().find(e => e.includes('safari')) |
| 33 | + const edgeFirst = browsrs.find(e => e.includes('edge')) |
| 34 | + const edgeLast = browsrs.slice().reverse().find(e => e.includes('edge')) |
| 35 | + const samsungFirst = browsrs.find(e => e.includes('samsung')) |
| 36 | + const samsungLast = browsrs.slice().reverse().find(e => e.includes('samsung')) |
| 37 | + const andChrFirst = browsrs.find(e => e.includes('and_chr')) |
| 38 | + const andChrLast = browsrs.slice().reverse().find(e => e.includes('and_chr')) |
| 39 | + console.log(chalk.green('\nSupported browsers:')) |
| 40 | + console.log(`Chrome ${chromeLast?.split(' ')[1]}-${chromeFirst?.split(' ')[1]}`) |
| 41 | + console.log(`Firefox ${firefoxLast?.split(' ')[1]}-${firefoxFirst?.split(' ')[1]}`) |
| 42 | + console.log(`iOS Safari ${iosSafLast?.split(' ')[1]}-${iosSafFirst?.split(' ')[1]}`) |
| 43 | + console.log(`Safari ${safariLast?.split(' ')[1]}-${safariFirst?.split(' ')[1]}`) |
| 44 | + console.log(`Edge ${edgeLast?.split(' ')[1]}-${edgeFirst?.split(' ')[1]}`) |
| 45 | + if (samsungFirst === samsungLast) { |
| 46 | + console.log(`Samsung ${samsungFirst?.split(' ')[1]}`) |
| 47 | + } else { |
| 48 | + console.log(`Samsung ${samsungLast?.split(' ')[1]}-${samsungFirst?.split(' ')[1]}`) |
| 49 | + } |
| 50 | + if (andChrFirst === andChrLast) { |
| 51 | + console.log(`Android Chrome ${andChrFirst?.split(' ')[1]}`) |
| 52 | + } else { |
| 53 | + console.log(`Android Chrome ${andChrLast?.split(' ')[1]}-${andChrFirst?.split(' ')[1]}`) |
| 54 | + } |
| 55 | + console.log(chalk.bold('\nAudience coverage:')) |
| 56 | + console.log(`Global: ${chalk.green(`${Math.ceil(global)}%`)}`) |
| 57 | + console.log(`Europe: ${chalk.green(`${Math.ceil(eu)}%`)}`) |
| 58 | + console.log(`Sweden: ${chalk.green(`${Math.ceil(se)}%`)}`) |
| 59 | + |
| 60 | + console.log(`\nClick to open the browser compatibility list:\n${chalk.cyan(`https://browsersl.ist/?results#q=${browserslistLink}`)}`) |
| 61 | + } else { |
| 62 | + console.log(`No .browserslistrc found in ${data.cwd.path}`) |
| 63 | + } |
| 64 | +} |
| 65 | + |
| 66 | +export { browsers } |
0 commit comments