diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:31:11 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:31:11 +0800 |
| commit | aa773172311dcada759dfbaac485f4bc6e00bc21 (patch) | |
| tree | ca6d9a5eff3ab8f689f9acb4f0df791d9486813d /node_modules/core-js-compat/targets-parser.js | |
| parent | c5a5384e846f242e901e859fe600d695d8990a9a (diff) | |
added babel
Diffstat (limited to 'node_modules/core-js-compat/targets-parser.js')
| -rw-r--r-- | node_modules/core-js-compat/targets-parser.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/node_modules/core-js-compat/targets-parser.js b/node_modules/core-js-compat/targets-parser.js new file mode 100644 index 00000000..826118c7 --- /dev/null +++ b/node_modules/core-js-compat/targets-parser.js @@ -0,0 +1,92 @@ +'use strict'; +const browserslist = require('browserslist'); +const { compare, has } = require('./helpers'); +const external = require('./external'); + +const aliases = new Map([ + ['and_chr', 'chrome-android'], + ['and_ff', 'firefox-android'], + ['ie_mob', 'ie'], + ['ios_saf', 'ios'], + ['oculus', 'quest'], + ['op_mob', 'opera-android'], + // TODO: Remove from `core-js@4` + ['opera_mobile', 'opera-android'], + ['react', 'react-native'], + ['reactnative', 'react-native'], +]); + +const validTargets = new Set([ + 'android', + 'bun', + 'chrome', + 'chrome-android', + 'deno', + 'edge', + 'electron', + 'firefox', + 'firefox-android', + 'hermes', + 'ie', + 'ios', + 'node', + 'opera', + 'opera-android', + 'phantom', + 'quest', + 'react-native', + 'rhino', + 'safari', + 'samsung', +]); + +const toLowerKeys = function (object) { + return Object.entries(object).reduce((accumulator, [key, value]) => { + accumulator[key.toLowerCase()] = value; + return accumulator; + }, {}); +}; + +module.exports = function (targets) { + const { browsers, esmodules, node, ...rest } = (typeof targets != 'object' || Array.isArray(targets)) + ? { browsers: targets } : toLowerKeys(targets); + + const list = Object.entries(rest); + + if (browsers) { + if (typeof browsers == 'string' || Array.isArray(browsers)) { + list.push(...browserslist(browsers).map(it => it.split(' '))); + } else { + list.push(...Object.entries(browsers)); + } + } + if (esmodules) { + list.push(...Object.entries(external.modules)); + } + if (node) { + list.push(['node', node === 'current' ? process.versions.node : node]); + } + + const normalized = list.map(([engine, version]) => { + if (has(browserslist.aliases, engine)) { + engine = browserslist.aliases[engine]; + } + if (aliases.has(engine)) { + engine = aliases.get(engine); + } + return [engine, String(version)]; + }).filter(([engine]) => { + return validTargets.has(engine); + }).sort(([a], [b]) => { + return a < b ? -1 : a > b ? 1 : 0; + }); + + const reducedByMinVersion = new Map(); + for (const [engine, version] of normalized) { + if (!reducedByMinVersion.has(engine) || compare(version, '<=', reducedByMinVersion.get(engine))) { + reducedByMinVersion.set(engine, version); + } + } + + return reducedByMinVersion; +}; |
