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/compat.js | |
| parent | c5a5384e846f242e901e859fe600d695d8990a9a (diff) | |
added babel
Diffstat (limited to 'node_modules/core-js-compat/compat.js')
| -rw-r--r-- | node_modules/core-js-compat/compat.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/node_modules/core-js-compat/compat.js b/node_modules/core-js-compat/compat.js new file mode 100644 index 00000000..b179e7fd --- /dev/null +++ b/node_modules/core-js-compat/compat.js @@ -0,0 +1,89 @@ +'use strict'; +const { compare, filterOutStabilizedProposals, has, intersection } = require('./helpers'); +const data = require('./data'); +const entries = require('./entries'); +const getModulesListForTargetVersion = require('./get-modules-list-for-target-version'); +const allModules = require('./modules'); +const targetsParser = require('./targets-parser'); + +function throwInvalidFilter(filter) { + throw new TypeError(`Specified invalid module name or pattern: ${ filter }`); +} + +function atLeastSomeModules(modules, filter) { + if (!modules.length) throwInvalidFilter(filter); + return modules; +} + +function getModules(filter) { + if (typeof filter == 'string') { + if (has(entries, filter)) return entries[filter]; + return atLeastSomeModules(allModules.filter(it => it.startsWith(filter)), filter); + } else if (filter instanceof RegExp) return atLeastSomeModules(allModules.filter(it => filter.test(it)), filter); + throwInvalidFilter(filter); +} + +function normalizeModules(option) { + // TODO: use `.flatMap` in core-js@4 + return new Set(Array.isArray(option) ? [].concat(...option.map(getModules)) : getModules(option)); +} + +function checkModule(name, targets) { + const result = { + required: !targets, + targets: {}, + }; + + if (!targets) return result; + + const requirements = data[name]; + + for (const [engine, version] of targets) { + if (!has(requirements, engine) || compare(version, '<', requirements[engine])) { + result.required = true; + result.targets[engine] = version; + } + } + + return result; +} + +module.exports = function ({ + filter = null, // TODO: Obsolete, remove from `core-js@4` + modules = null, + exclude = [], + targets = null, + version = null, + inverse = false, +} = {}) { + if (modules === null || modules === undefined) modules = filter; + inverse = !!inverse; + + const parsedTargets = targets ? targetsParser(targets) : null; + + const result = { + list: [], + targets: {}, + }; + + exclude = normalizeModules(exclude); + + modules = modules ? [...normalizeModules(modules)] : allModules; + + if (exclude.size) modules = modules.filter(it => !exclude.has(it)); + + modules = intersection(modules, version ? getModulesListForTargetVersion(version) : allModules); + + if (!inverse) modules = filterOutStabilizedProposals(modules); + + for (const key of modules) { + const check = checkModule(key, parsedTargets); + + if (check.required ^ inverse) { + result.list.push(key); + result.targets[key] = check.targets; + } + } + + return result; +}; |
