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.
70 lines
1.9 KiB
70 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 |
|
}
|
|
|