You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.9 KiB
71 lines
1.9 KiB
// copied from @vue/babel-preset-app
|
|
|
|
const { semver } = require('@vue/cli-shared-utils')
|
|
const { default: getTargets } = require('@babel/helper-compilation-targets')
|
|
|
|
// See the result at <https://github.com/babel/babel/blob/v7.13.15/packages/babel-compat-data/data/native-modules.json>
|
|
const allModuleTargets = getTargets(
|
|
{ esmodules: true },
|
|
{ ignoreBrowserslistConfig: true }
|
|
)
|
|
|
|
function getIntersectionTargets (targets, constraintTargets) {
|
|
const intersection = Object.keys(constraintTargets).reduce(
|
|
(results, browser) => {
|
|
// exclude the browsers that the user does not need
|
|
if (!targets[browser]) {
|
|
return results
|
|
}
|
|
|
|
// if the user-specified version is higher the minimum version that supports esmodule, than use it
|
|
results[browser] = semver.gt(
|
|
semver.coerce(constraintTargets[browser]),
|
|
semver.coerce(targets[browser])
|
|
)
|
|
? constraintTargets[browser]
|
|
: targets[browser]
|
|
|
|
return results
|
|
},
|
|
{}
|
|
)
|
|
|
|
return intersection
|
|
}
|
|
|
|
function getModuleTargets (targets) {
|
|
// use the intersection of modern mode browsers and user defined targets config
|
|
return getIntersectionTargets(targets, allModuleTargets)
|
|
}
|
|
|
|
function doAllTargetsSupportModule (targets) {
|
|
const browserList = Object.keys(targets)
|
|
|
|
return browserList.every(browserName => {
|
|
if (!allModuleTargets[browserName]) {
|
|
return false
|
|
}
|
|
|
|
return semver.gte(
|
|
semver.coerce(targets[browserName]),
|
|
semver.coerce(allModuleTargets[browserName])
|
|
)
|
|
})
|
|
}
|
|
|
|
// get browserslist targets in current working directory
|
|
const projectTargets = getTargets()
|
|
const projectModuleTargets = getModuleTargets(projectTargets)
|
|
const allProjectTargetsSupportModule = doAllTargetsSupportModule(projectTargets)
|
|
|
|
module.exports = {
|
|
getTargets,
|
|
getModuleTargets,
|
|
getIntersectionTargets,
|
|
doAllTargetsSupportModule,
|
|
|
|
projectTargets,
|
|
projectModuleTargets,
|
|
allProjectTargetsSupportModule
|
|
}
|