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
3 years ago
|
// 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
|
||
|
}
|