diff options
Diffstat (limited to 'node_modules/@babel/preset-env/lib/targets-parser.js')
| -rw-r--r-- | node_modules/@babel/preset-env/lib/targets-parser.js | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/node_modules/@babel/preset-env/lib/targets-parser.js b/node_modules/@babel/preset-env/lib/targets-parser.js new file mode 100644 index 00000000..5202a4a4 --- /dev/null +++ b/node_modules/@babel/preset-env/lib/targets-parser.js @@ -0,0 +1,172 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = exports.semverMin = void 0; + +function _browserslist() { + const data = _interopRequireDefault(require("browserslist")); + + _browserslist = function _browserslist() { + return data; + }; + + return data; +} + +function _semver() { + const data = _interopRequireDefault(require("semver")); + + _semver = function _semver() { + return data; + }; + + return data; +} + +var _utils = require("./utils"); + +var _normalizeOptions = require("./normalize-options"); + +var _builtInModules = _interopRequireDefault(require("../data/built-in-modules.json")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const browserNameMap = { + android: "android", + chrome: "chrome", + and_chr: "chrome", + edge: "edge", + firefox: "firefox", + ie: "ie", + ios_saf: "ios", + safari: "safari" +}; + +const isBrowsersQueryValid = browsers => typeof browsers === "string" || Array.isArray(browsers); + +const semverMin = (first, second) => { + return first && _semver().default.lt(first, second) ? first : second; +}; + +exports.semverMin = semverMin; + +const mergeBrowsers = (fromQuery, fromTarget) => { + return Object.keys(fromTarget).reduce((queryObj, targKey) => { + if (targKey !== "browsers") { + queryObj[targKey] = fromTarget[targKey]; + } + + return queryObj; + }, fromQuery); +}; + +const getLowestVersions = browsers => { + return browsers.reduce((all, browser) => { + const _browser$split = browser.split(" "), + browserName = _browser$split[0], + browserVersion = _browser$split[1]; + + const normalizedBrowserName = browserNameMap[browserName]; + + if (!normalizedBrowserName) { + return all; + } + + try { + const splitVersion = browserVersion.split("-")[0].toLowerCase(); + + if ((0, _utils.isUnreleasedVersion)(splitVersion, browserName)) { + all[normalizedBrowserName] = (0, _utils.getLowestUnreleased)(all[normalizedBrowserName], splitVersion, browserName); + } + + const parsedBrowserVersion = (0, _utils.semverify)(splitVersion); + all[normalizedBrowserName] = semverMin(all[normalizedBrowserName], parsedBrowserVersion); + } catch (e) {} + + return all; + }, {}); +}; + +const outputDecimalWarning = decimalTargets => { + if (!decimalTargets || !decimalTargets.length) { + return; + } + + console.log("Warning, the following targets are using a decimal version:"); + console.log(""); + decimalTargets.forEach(({ + target, + value + }) => console.log(` ${target}: ${value}`)); + console.log(""); + console.log("We recommend using a string for minor/patch versions to avoid numbers like 6.10"); + console.log("getting parsed as 6.1, which can lead to unexpected behavior."); + console.log(""); +}; + +const targetParserMap = { + __default: (target, value) => { + const version = (0, _utils.isUnreleasedVersion)(value, target) ? value.toLowerCase() : (0, _utils.semverify)(value); + return [target, version]; + }, + node: (target, value) => { + const parsed = value === true || value === "current" ? process.versions.node : (0, _utils.semverify)(value); + return [target, parsed]; + } +}; + +const getTargets = (targets = {}, options = {}) => { + const targetOpts = {}; + + if (targets.esmodules) { + const supportsESModules = _builtInModules.default["es6.module"]; + targets.browsers = Object.keys(supportsESModules).map(browser => `${browser} ${supportsESModules[browser]}`).join(", "); + } + + const queryIsValid = isBrowsersQueryValid(targets.browsers); + const browsersquery = queryIsValid ? targets.browsers : null; + + if (queryIsValid || !options.ignoreBrowserslistConfig) { + _browserslist().default.defaults = (0, _normalizeOptions.objectToBrowserslist)(targets); + const browsers = (0, _browserslist().default)(browsersquery, { + path: options.configPath + }); + const queryBrowsers = getLowestVersions(browsers); + targets = mergeBrowsers(queryBrowsers, targets); + } + + const parsed = Object.keys(targets).filter(value => value !== "esmodules").sort().reduce((results, target) => { + if (target !== "browsers") { + const value = targets[target]; + + if (typeof value === "number" && value % 1 !== 0) { + results.decimalWarnings.push({ + target, + value + }); + } + + const parser = targetParserMap[target] || targetParserMap.__default; + + const _parser = parser(target, value), + parsedTarget = _parser[0], + parsedValue = _parser[1]; + + if (parsedValue) { + results.targets[parsedTarget] = parsedValue; + } + } + + return results; + }, { + targets: targetOpts, + decimalWarnings: [] + }); + outputDecimalWarning(parsed.decimalWarnings); + return parsed.targets; +}; + +var _default = getTargets; +exports.default = _default;
\ No newline at end of file |
