71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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
 | |
| }
 |