Created
November 7, 2017 08:51
-
-
Save brad-jones/2f9b9bf0d230ce916960eac933f9da36 to your computer and use it in GitHub Desktop.
Get a list of required polyfill.io features based on browserslist
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const semver = require('semver'); | |
const browserslist = require('browserslist'); | |
const polyFillService = require('polyfill-service'); | |
function browserVersionMatches(browsersListVersion, polyFillServiceVersion) | |
{ | |
// Do some quick and easy checks first | |
if (browsersListVersion === polyFillServiceVersion) return true; | |
if (polyFillServiceVersion === '*') return true; | |
if (browsersListVersion === 'all') return true; | |
// Otherwise convert the browser version into a semver. | |
let version = semver.clean(browsersListVersion, true); | |
if (version === null) version = semver.clean(browsersListVersion + '.0.0', true); | |
if (version === null) version = semver.clean(browsersListVersion + '.0', true); | |
if (version === null) throw new Error(`Could not convert '${browsersListVersion}' into semver`); | |
// Then check to see if it satisfies the polyFill range. | |
return semver.satisfies(version, polyFillServiceVersion, true); | |
} | |
(async () => | |
{ | |
let requirePolyFills = []; | |
var browsers = browserslist(); | |
for (let fill of await polyFillService.listAllPolyfills()) | |
{ | |
// The Locales add lots of noise, ignore for now | |
if (fill.startsWith('Intl')) continue; | |
let fillMeta = await polyFillService.describePolyfill(fill); | |
if (fillMeta.browsers) | |
{ | |
for (let browser of browsers) | |
{ | |
let segments = browser.split(' '); | |
let browserName = segments[0]; | |
if (fillMeta.browsers[browserName]) | |
{ | |
let browserVersions = segments[1].split('-'); | |
for (let browserVersion of browserVersions) | |
{ | |
if (browserVersionMatches(browserVersion, fillMeta.browsers[browserName])) | |
{ | |
if (requirePolyFills.indexOf(fill) === -1) | |
{ | |
requirePolyFills.push(fill); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
console.log(requirePolyFills); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment