@babel/preset-env
Advanced tools
Comparing version 7.3.4 to 7.4.0
# Contributing | ||
## Adding a new plugin to support (when approved in the next ECMAScript version) | ||
## Adding a new plugin or polyfill to support (when approved in the next ECMAScript version) | ||
@@ -30,3 +30,3 @@ ### Update [`plugin-features.js`](https://github.com/babel/babel/blob/master/packages/babel-preset-env/data/plugin-features.js) | ||
### Update [`built-in-features.js`](https://github.com/babel/babel/blob/master/packages/babel-preset-env/data/built-in-features.js) | ||
### Update data for `core-js@2` polyfilling | ||
@@ -42,10 +42,10 @@ *Example:* | ||
Find the corresponding module on [core-js](https://github.com/zloirock/core-js/tree/master/modules): | ||
Find the corresponding module on [`core-js@2`](https://github.com/zloirock/core-js/tree/v2/modules): | ||
`es7.object.values.js` | ||
Find required ES version in [`built-in-features.js`](https://github.com/babel/babel/blob/master/packages/babel-preset-env/data/built-in-features.js) and add the new feature: | ||
Find required ES version in [`corejs2-built-in-features.js`](https://github.com/babel/babel/blob/master/packages/babel-preset-env/data/corejs2-built-in-features.js) and add the new feature: | ||
```js | ||
const es2017 = { | ||
const es = { | ||
//... | ||
@@ -56,2 +56,12 @@ "es7.object.values": "Object static methods / Object.values" | ||
If you wan to transform a new built-in by `useBuiltIns: 'usage'`, add mapping to related `core-js` modules to [this file](https://github.com/babel/babel/blob/master/packages/babel-preset-env/polyfills/corejs2/built-in-definitions.js). | ||
### Update data for `core-js@3` polyfilling | ||
Just update the version of [`core-js-compat`](https://github.com/zloirock/core-js/tree/master/packages/core-js-compat) in dependencies. | ||
If you wan to transform a new built-in by `useBuiltIns: 'usage'`, add mapping to related [`core-js`](https://github.com/zloirock/core-js/tree/master/packages/core-js/modules) modules to [this file](https://github.com/babel/babel/blob/master/packages/babel-preset-env/polyfills/corejs3/built-in-definitions.js). | ||
If you want to mark a new proposal as shipped, add it to [this list](https://github.com/babel/babel/blob/master/packages/babel-preset-env/polyfills/corejs3/shipped-proposals.js). | ||
### Update [`plugins.json`](https://github.com/babel/babel/blob/master/packages/babel-preset-env/data/plugins.json) | ||
@@ -58,0 +68,0 @@ |
@@ -9,4 +9,4 @@ { | ||
"ios_saf": "10.3", | ||
"and_ff": "60" | ||
"and_ff": "64" | ||
} | ||
} |
@@ -6,5 +6,4 @@ { | ||
"firefox": "34", | ||
"safari": "9", | ||
"node": "4", | ||
"ios": "9", | ||
"samsung": "3.4", | ||
"opera": "28", | ||
@@ -20,2 +19,3 @@ "electron": "0.24" | ||
"ios": "9", | ||
"samsung": "4", | ||
"opera": "31", | ||
@@ -30,2 +30,3 @@ "electron": "0.31" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "38", | ||
@@ -41,2 +42,3 @@ "electron": "1.2" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "34", | ||
@@ -53,2 +55,3 @@ "electron": "0.36" | ||
"ios": "10", | ||
"samsung": "3.4", | ||
"opera": "28", | ||
@@ -64,2 +67,3 @@ "electron": "0.24" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "33", | ||
@@ -75,2 +79,3 @@ "electron": "0.36" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "33", | ||
@@ -86,2 +91,3 @@ "electron": "0.36" | ||
"ios": "9", | ||
"samsung": "4", | ||
"opera": "30", | ||
@@ -97,2 +103,3 @@ "electron": "0.29" | ||
"ios": "9", | ||
"samsung": "3.4", | ||
"opera": "29", | ||
@@ -108,2 +115,3 @@ "electron": "0.27" | ||
"ios": "8", | ||
"samsung": "4", | ||
"opera": "31", | ||
@@ -119,2 +127,3 @@ "electron": "0.31" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "38", | ||
@@ -130,2 +139,3 @@ "electron": "1.2" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "36", | ||
@@ -139,4 +149,5 @@ "electron": "1" | ||
"ios": "11.3", | ||
"samsung": "8.2", | ||
"opera": "49", | ||
"electron": "3" | ||
"electron": "3.1" | ||
}, | ||
@@ -150,2 +161,3 @@ "transform-unicode-regex": { | ||
"ios": "12", | ||
"samsung": "5", | ||
"opera": "37", | ||
@@ -161,2 +173,3 @@ "electron": "1.1" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "33", | ||
@@ -172,2 +185,3 @@ "electron": "0.36" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "36", | ||
@@ -183,2 +197,3 @@ "electron": "1" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "38", | ||
@@ -194,2 +209,3 @@ "electron": "1.2" | ||
"ios": "10.3", | ||
"samsung": "5", | ||
"opera": "36", | ||
@@ -205,2 +221,3 @@ "electron": "1" | ||
"ios": "9", | ||
"samsung": "3", | ||
"opera": "25", | ||
@@ -216,2 +233,3 @@ "electron": "0.2" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "33", | ||
@@ -227,2 +245,3 @@ "electron": "0.36" | ||
"ios": "10", | ||
"samsung": "5", | ||
"opera": "37", | ||
@@ -238,2 +257,3 @@ "electron": "1.1" | ||
"ios": "10.3", | ||
"samsung": "6.2", | ||
"opera": "39", | ||
@@ -249,2 +269,3 @@ "electron": "1.3" | ||
"ios": "11", | ||
"samsung": "6.2", | ||
"opera": "42", | ||
@@ -257,6 +278,7 @@ "electron": "1.6" | ||
"safari": "12", | ||
"node": "10.0", | ||
"node": "10", | ||
"ios": "12", | ||
"samsung": "8.2", | ||
"opera": "50", | ||
"electron": "3" | ||
"electron": "3.1" | ||
}, | ||
@@ -269,2 +291,3 @@ "proposal-object-rest-spread": { | ||
"ios": "11.3", | ||
"samsung": "8.2", | ||
"opera": "47", | ||
@@ -276,6 +299,6 @@ "electron": "2.1" | ||
"safari": "11.1", | ||
"node": "10.0", | ||
"node": "10", | ||
"ios": "11.3", | ||
"opera": "51", | ||
"electron": "3" | ||
"electron": "3.1" | ||
}, | ||
@@ -286,6 +309,6 @@ "proposal-json-strings": { | ||
"safari": "12", | ||
"node": "10.0", | ||
"node": "10", | ||
"ios": "12", | ||
"opera": "53", | ||
"electron": "3" | ||
"electron": "3.1" | ||
}, | ||
@@ -296,6 +319,6 @@ "proposal-optional-catch-binding": { | ||
"safari": "11.1", | ||
"node": "10.0", | ||
"node": "10", | ||
"ios": "11.3", | ||
"opera": "53", | ||
"electron": "3" | ||
"electron": "3.1" | ||
}, | ||
@@ -305,7 +328,7 @@ "transform-named-capturing-groups-regex": { | ||
"safari": "11.1", | ||
"node": "10.0", | ||
"node": "10", | ||
"ios": "11.3", | ||
"opera": "51", | ||
"electron": "3" | ||
"electron": "3.1" | ||
} | ||
} |
@@ -1,10 +0,6 @@ | ||
// These mappings represent the builtin/feature proposals that have been | ||
// These mappings represent the syntax proposals that have been | ||
// shipped by browsers, and are enabled by the `shippedProposals` option. | ||
const builtIns = { | ||
"es7.array.flat-map": "Array.prototype.{flat, flatMap} / Array.prototype.flatMap" | ||
}; | ||
const proposalPlugins = {}; | ||
const features = {}; | ||
const pluginSyntaxMap = new Map([ | ||
@@ -18,2 +14,2 @@ ["proposal-async-generator-functions", "syntax-async-generators"], | ||
module.exports = { builtIns, features, pluginSyntaxMap }; | ||
module.exports = { proposalPlugins, pluginSyntaxMap }; |
@@ -6,3 +6,3 @@ "use strict"; | ||
}); | ||
exports.logUsagePolyfills = exports.logEntryPolyfills = exports.logPlugin = exports.logMessage = void 0; | ||
exports.logUsagePolyfills = exports.logEntryPolyfills = exports.logPluginOrPolyfill = void 0; | ||
@@ -27,11 +27,3 @@ function _semver() { | ||
const logMessage = (message, context) => { | ||
const pre = context ? `[${context}] ` : ""; | ||
const logStr = ` ${pre}${message}`; | ||
console.log(logStr); | ||
}; | ||
exports.logMessage = logMessage; | ||
const logPlugin = (item, targetVersions, list, context) => { | ||
const logPluginOrPolyfill = (item, targetVersions, list) => { | ||
const minVersions = list[item] || {}; | ||
@@ -48,3 +40,3 @@ const filteredList = Object.keys(targetVersions).reduce((result, env) => { | ||
if (!targetIsUnreleased && (minIsUnreleased || _semver().default.lt(targetVersion, (0, _utils.semverify)(minVersion)))) { | ||
if (!targetIsUnreleased && (minIsUnreleased || _semver().default.lt(targetVersion.toString(), (0, _utils.semverify)(minVersion)))) { | ||
result[env] = (0, _utils.prettifyVersion)(targetVersion); | ||
@@ -57,11 +49,10 @@ } | ||
const formattedTargets = JSON.stringify(filteredList).replace(/,/g, ", ").replace(/^\{"/, '{ "').replace(/"\}$/, '" }'); | ||
logMessage(`${item} ${formattedTargets}`, context); | ||
console.log(` ${item} ${formattedTargets}`); | ||
}; | ||
exports.logPlugin = logPlugin; | ||
exports.logPluginOrPolyfill = logPluginOrPolyfill; | ||
const logEntryPolyfills = (importPolyfillIncluded, polyfills, filename, onDebug) => { | ||
const logEntryPolyfills = (polyfillName, importPolyfillIncluded, polyfills, filename, polyfillTargets, allBuiltInsList) => { | ||
if (!importPolyfillIncluded) { | ||
console.log(` | ||
[${filename}] \`import '@babel/polyfill'\` was not found.`); | ||
console.log(`\n[${filename}] Import of ${polyfillName} was not found.`); | ||
return; | ||
@@ -71,10 +62,11 @@ } | ||
if (!polyfills.size) { | ||
console.log(` | ||
[${filename}] Based on your targets, none were added.`); | ||
console.log(`\n[${filename}] Based on your targets, polyfills were not added.`); | ||
return; | ||
} | ||
console.log(` | ||
[${filename}] Replaced \`@babel/polyfill\` with the following polyfill${wordEnds(polyfills.size)}:`); | ||
onDebug(polyfills); | ||
console.log(`\n[${filename}] Replaced ${polyfillName} entries with the following polyfill${wordEnds(polyfills.size)}:`); | ||
for (const polyfill of polyfills) { | ||
logPluginOrPolyfill(polyfill, polyfillTargets, allBuiltInsList); | ||
} | ||
}; | ||
@@ -84,14 +76,15 @@ | ||
const logUsagePolyfills = (polyfills, filename, onDebug) => { | ||
const logUsagePolyfills = (polyfills, filename, polyfillTargets, allBuiltInsList) => { | ||
if (!polyfills.size) { | ||
console.log(` | ||
[${filename}] Based on your code and targets, none were added.`); | ||
console.log(`\n[${filename}] Based on your code and targets, core-js polyfills were not added.`); | ||
return; | ||
} | ||
console.log(` | ||
[${filename}] Added following polyfill${wordEnds(polyfills.size)}:`); | ||
onDebug(polyfills); | ||
console.log(`\n[${filename}] Added following core-js polyfill${wordEnds(polyfills.size)}:`); | ||
for (const polyfill of polyfills) { | ||
logPluginOrPolyfill(polyfill, polyfillTargets, allBuiltInsList); | ||
} | ||
}; | ||
exports.logUsagePolyfills = logUsagePolyfills; |
169
lib/index.js
@@ -6,32 +6,30 @@ "use strict"; | ||
}); | ||
exports.default = exports.transformIncludesAndExcludes = exports.isPluginRequired = void 0; | ||
exports.default = exports.transformIncludesAndExcludes = void 0; | ||
function _semver() { | ||
const data = _interopRequireDefault(require("semver")); | ||
var _debug = require("./debug"); | ||
_semver = function () { | ||
return data; | ||
}; | ||
var _getOptionSpecificExcludes = _interopRequireDefault(require("./get-option-specific-excludes")); | ||
return data; | ||
} | ||
var _filterItems = _interopRequireDefault(require("./filter-items")); | ||
var _builtIns = _interopRequireDefault(require("../data/built-ins.json")); | ||
var _moduleTransformations = _interopRequireDefault(require("./module-transformations")); | ||
var _debug = require("./debug"); | ||
var _normalizeOptions = _interopRequireDefault(require("./normalize-options")); | ||
var _defaults = require("./defaults"); | ||
var _plugins = _interopRequireDefault(require("../data/plugins.json")); | ||
var _moduleTransformations = _interopRequireDefault(require("./module-transformations")); | ||
var _shippedProposals = require("../data/shipped-proposals"); | ||
var _normalizeOptions = _interopRequireDefault(require("./normalize-options.js")); | ||
var _usagePlugin = _interopRequireDefault(require("./polyfills/corejs2/usage-plugin")); | ||
var _plugins = _interopRequireDefault(require("../data/plugins.json")); | ||
var _usagePlugin2 = _interopRequireDefault(require("./polyfills/corejs3/usage-plugin")); | ||
var _shippedProposals = require("../data/shipped-proposals.js"); | ||
var _usagePlugin3 = _interopRequireDefault(require("./polyfills/regenerator/usage-plugin")); | ||
var _useBuiltInsEntryPlugin = _interopRequireDefault(require("./use-built-ins-entry-plugin")); | ||
var _entryPlugin = _interopRequireDefault(require("./polyfills/corejs2/entry-plugin")); | ||
var _useBuiltInsPlugin = _interopRequireDefault(require("./use-built-ins-plugin")); | ||
var _entryPlugin2 = _interopRequireDefault(require("./polyfills/corejs3/entry-plugin")); | ||
var _entryPlugin3 = _interopRequireDefault(require("./polyfills/regenerator/entry-plugin")); | ||
var _targetsParser = _interopRequireDefault(require("./targets-parser")); | ||
@@ -55,2 +53,4 @@ | ||
const pluginListWithoutProposals = (0, _utils.filterStageFromList)(_plugins.default, _shippedProposals.proposalPlugins); | ||
const getPlugin = pluginName => { | ||
@@ -66,50 +66,5 @@ const plugin = _availablePlugins.default[pluginName]; | ||
const builtInsListWithoutProposals = (0, _utils.filterStageFromList)(_builtIns.default, _shippedProposals.builtIns); | ||
const pluginListWithoutProposals = (0, _utils.filterStageFromList)(_plugins.default, _shippedProposals.features); | ||
const isPluginRequired = (supportedEnvironments, plugin) => { | ||
const targetEnvironments = Object.keys(supportedEnvironments); | ||
if (targetEnvironments.length === 0) { | ||
return true; | ||
} | ||
const isRequiredForEnvironments = targetEnvironments.filter(environment => { | ||
if (!plugin[environment]) { | ||
return true; | ||
} | ||
const lowestImplementedVersion = plugin[environment]; | ||
const lowestTargetedVersion = supportedEnvironments[environment]; | ||
if ((0, _utils.isUnreleasedVersion)(lowestTargetedVersion, environment)) { | ||
return false; | ||
} else if ((0, _utils.isUnreleasedVersion)(lowestImplementedVersion, environment)) { | ||
return true; | ||
} | ||
if (!_semver().default.valid(lowestTargetedVersion)) { | ||
throw new Error(`Invalid version passed for target "${environment}": "${lowestTargetedVersion}". ` + "Versions must be in semver format (major.minor.patch)"); | ||
} | ||
return _semver().default.gt((0, _utils.semverify)(lowestImplementedVersion), lowestTargetedVersion); | ||
}); | ||
return isRequiredForEnvironments.length > 0; | ||
}; | ||
exports.isPluginRequired = isPluginRequired; | ||
const getBuiltInTargets = targets => { | ||
const builtInTargets = Object.assign({}, targets); | ||
if (builtInTargets.uglify != null) { | ||
delete builtInTargets.uglify; | ||
} | ||
return builtInTargets; | ||
}; | ||
const transformIncludesAndExcludes = opts => { | ||
return opts.reduce((result, opt) => { | ||
const target = opt.match(/^(es\d+|web)\./) ? "builtIns" : "plugins"; | ||
const target = opt.match(/^(es|es6|es7|esnext|web)\./) ? "builtIns" : "plugins"; | ||
result[target].add(opt); | ||
@@ -126,28 +81,2 @@ return result; | ||
const filterItems = (list, includes, excludes, targets, defaultIncludes, defaultExcludes) => { | ||
const result = new Set(); | ||
for (const item in list) { | ||
if (!excludes.has(item) && (isPluginRequired(targets, list[item]) || includes.has(item))) { | ||
result.add(item); | ||
} else { | ||
const shippedProposalsSyntax = _shippedProposals.pluginSyntaxMap.get(item); | ||
if (shippedProposalsSyntax) { | ||
result.add(shippedProposalsSyntax); | ||
} | ||
} | ||
} | ||
if (defaultIncludes) { | ||
defaultIncludes.forEach(item => !excludes.has(item) && result.add(item)); | ||
} | ||
if (defaultExcludes) { | ||
defaultExcludes.forEach(item => !includes.has(item) && result.delete(item)); | ||
} | ||
return result; | ||
}; | ||
function supportsStaticESM(caller) { | ||
@@ -171,3 +100,7 @@ return !!(caller && caller.supportsStaticESM); | ||
targets: optionsTargets, | ||
useBuiltIns | ||
useBuiltIns, | ||
corejs: { | ||
version: corejs, | ||
proposals | ||
} | ||
} = (0, _normalizeOptions.default)(opts); | ||
@@ -199,13 +132,5 @@ let hasUglifyTarget = false; | ||
const transformTargets = forceAllTransforms || hasUglifyTarget ? {} : targets; | ||
const transformations = filterItems(shippedProposals ? _plugins.default : pluginListWithoutProposals, include.plugins, exclude.plugins, transformTargets, null, (0, _defaults.getOptionSpecificExcludesFor)({ | ||
const transformations = (0, _filterItems.default)(shippedProposals ? _plugins.default : pluginListWithoutProposals, include.plugins, exclude.plugins, transformTargets, null, (0, _getOptionSpecificExcludes.default)({ | ||
loose | ||
})); | ||
let polyfills; | ||
let polyfillTargets; | ||
if (useBuiltIns) { | ||
polyfillTargets = getBuiltInTargets(targets); | ||
polyfills = filterItems(shippedProposals ? _builtIns.default : builtInsListWithoutProposals, include.builtIns, exclude.builtIns, polyfillTargets, (0, _defaults.getPlatformSpecificDefaultFor)(polyfillTargets)); | ||
} | ||
}), _shippedProposals.pluginSyntaxMap); | ||
const plugins = []; | ||
@@ -225,3 +150,2 @@ const pluginUseBuiltIns = useBuiltIns !== false; | ||
}])); | ||
const regenerator = transformations.has("transform-regenerator"); | ||
@@ -235,3 +159,3 @@ if (debug) { | ||
transformations.forEach(transform => { | ||
(0, _debug.logPlugin)(transform, targets, _plugins.default); | ||
(0, _debug.logPluginOrPolyfill)(transform, targets, _plugins.default); | ||
}); | ||
@@ -242,4 +166,3 @@ | ||
} else { | ||
console.log(` | ||
Using polyfills with \`${useBuiltIns}\` option:`); | ||
console.log(`\nUsing polyfills with \`${useBuiltIns}\` option:`); | ||
} | ||
@@ -249,11 +172,37 @@ } | ||
if (useBuiltIns === "usage" || useBuiltIns === "entry") { | ||
const regenerator = transformations.has("transform-regenerator"); | ||
const pluginOptions = { | ||
debug, | ||
polyfills, | ||
corejs, | ||
polyfillTargets: targets, | ||
include: include.builtIns, | ||
exclude: exclude.builtIns, | ||
proposals, | ||
shippedProposals, | ||
regenerator, | ||
onDebug: (polyfills, context) => { | ||
polyfills.forEach(polyfill => (0, _debug.logPlugin)(polyfill, polyfillTargets, _builtIns.default, context)); | ||
debug | ||
}; | ||
if (corejs) { | ||
if (useBuiltIns === "usage") { | ||
if (corejs.major === 2) { | ||
plugins.push([_usagePlugin.default, pluginOptions]); | ||
} else { | ||
plugins.push([_usagePlugin2.default, pluginOptions]); | ||
} | ||
if (regenerator) { | ||
plugins.push([_usagePlugin3.default, pluginOptions]); | ||
} | ||
} else { | ||
if (corejs.major === 2) { | ||
plugins.push([_entryPlugin.default, pluginOptions]); | ||
} else { | ||
plugins.push([_entryPlugin2.default, pluginOptions]); | ||
if (!regenerator) { | ||
plugins.push([_entryPlugin3.default, pluginOptions]); | ||
} | ||
} | ||
} | ||
}; | ||
plugins.push([useBuiltIns === "usage" ? _useBuiltInsPlugin.default : _useBuiltInsEntryPlugin.default, pluginOptions]); | ||
} | ||
} | ||
@@ -260,0 +209,0 @@ |
@@ -6,5 +6,16 @@ "use strict"; | ||
}); | ||
exports.normalizeCoreJSOption = normalizeCoreJSOption; | ||
exports.default = normalizeOptions; | ||
exports.validateUseBuiltInsOption = exports.objectToBrowserslist = exports.validateModulesOption = exports.validateIgnoreBrowserslistConfig = exports.validateBoolOption = exports.validateConfigPathOption = exports.checkDuplicateIncludeExcludes = exports.normalizePluginName = void 0; | ||
exports.validateUseBuiltInsOption = exports.validateModulesOption = exports.validateIgnoreBrowserslistConfig = exports.validateBoolOption = exports.validateConfigPathOption = exports.checkDuplicateIncludeExcludes = exports.normalizePluginName = void 0; | ||
function _data() { | ||
const data = _interopRequireDefault(require("core-js-compat/data")); | ||
_data = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _invariant() { | ||
@@ -20,6 +31,6 @@ const data = _interopRequireDefault(require("invariant")); | ||
function _browserslist() { | ||
const data = _interopRequireDefault(require("browserslist")); | ||
function _semver() { | ||
const data = require("semver"); | ||
_browserslist = function () { | ||
_semver = function () { | ||
return data; | ||
@@ -31,8 +42,12 @@ }; | ||
var _builtIns = _interopRequireDefault(require("../data/built-ins.json")); | ||
var _corejs2BuiltIns = _interopRequireDefault(require("../data/corejs2-built-ins.json")); | ||
var _defaultIncludes = require("./default-includes"); | ||
var _plugins = _interopRequireDefault(require("../data/plugins.json")); | ||
var _moduleTransformations = _interopRequireDefault(require("./module-transformations")); | ||
var _options = require("./options"); | ||
var _getPlatformSpecificDefault = require("./polyfills/corejs2/get-platform-specific-default"); | ||
var _targetsParser = require("./targets-parser"); | ||
@@ -42,12 +57,9 @@ | ||
var _plugins = _interopRequireDefault(require("../data/plugins.json")); | ||
var _options = require("./options"); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
const validateTopLevelOptions = options => { | ||
const validOptions = Object.keys(_options.TopLevelOptions); | ||
for (const option in options) { | ||
if (!_options.TopLevelOptions[option]) { | ||
const validOptions = (0, _utils.getValues)(_options.TopLevelOptions); | ||
throw new Error(`Invalid Option: ${option} is not a valid top-level option. | ||
@@ -59,3 +71,6 @@ Maybe you meant to use '${(0, _utils.findSuggestion)(validOptions, option)}'?`); | ||
const validIncludesAndExcludes = new Set([...Object.keys(_plugins.default), ...Object.keys(_moduleTransformations.default).map(m => _moduleTransformations.default[m]), ...Object.keys(_builtIns.default), ..._defaultIncludes.defaultWebIncludes]); | ||
const allPluginsList = [...Object.keys(_plugins.default), ...Object.keys(_moduleTransformations.default).map(m => _moduleTransformations.default[m])]; | ||
const validIncludesAndExcludesWithoutCoreJS = new Set(allPluginsList); | ||
const validIncludesAndExcludesWithCoreJS2 = new Set([...allPluginsList, ...Object.keys(_corejs2BuiltIns.default), ..._getPlatformSpecificDefault.defaultWebIncludes]); | ||
const validIncludesAndExcludesWithCoreJS3 = new Set([...allPluginsList, ...Object.keys(_data().default)]); | ||
@@ -72,9 +87,9 @@ const pluginToRegExp = plugin => { | ||
const selectPlugins = regexp => Array.from(validIncludesAndExcludes).filter(item => regexp instanceof RegExp && regexp.test(item)); | ||
const selectPlugins = (regexp, corejs) => Array.from(corejs ? corejs == 2 ? validIncludesAndExcludesWithCoreJS2 : validIncludesAndExcludesWithCoreJS3 : validIncludesAndExcludesWithoutCoreJS).filter(item => regexp instanceof RegExp && regexp.test(item)); | ||
const flatten = array => [].concat(...array); | ||
const expandIncludesAndExcludes = (plugins = [], type) => { | ||
const expandIncludesAndExcludes = (plugins = [], type, corejs) => { | ||
if (plugins.length === 0) return []; | ||
const selectedPlugins = plugins.map(plugin => selectPlugins(pluginToRegExp(plugin))); | ||
const selectedPlugins = plugins.map(plugin => selectPlugins(pluginToRegExp(plugin), corejs)); | ||
const invalidRegExpList = plugins.filter((p, i) => selectedPlugins[i].length === 0); | ||
@@ -86,4 +101,2 @@ (0, _invariant().default)(invalidRegExpList.length === 0, `Invalid Option: The plugins/built-ins '${invalidRegExpList.join(", ")}' passed to the '${type}' option are not | ||
const validBrowserslistTargets = [...Object.keys(_browserslist().default.data), ...Object.keys(_browserslist().default.aliases)]; | ||
const normalizePluginName = plugin => plugin.replace(/^(@babel\/|babel-)(plugin-)?/, ""); | ||
@@ -137,3 +150,3 @@ | ||
const validateModulesOption = (modulesOpt = _options.ModulesOption.auto) => { | ||
(0, _invariant().default)(_options.ModulesOption[modulesOpt] || _options.ModulesOption[modulesOpt] === _options.ModulesOption.false, `Invalid Option: The 'modules' option must be one of \n` + ` - 'false' to indicate no module processing\n` + ` - a specific module type: 'commonjs', 'amd', 'umd', 'systemjs'` + ` - 'auto' (default) which will automatically select 'false' if the current\n` + ` process is known to support ES module syntax, or "commonjs" otherwise\n`); | ||
(0, _invariant().default)(_options.ModulesOption[modulesOpt.toString()] || _options.ModulesOption[modulesOpt.toString()] === _options.ModulesOption.false, `Invalid Option: The 'modules' option must be one of \n` + ` - 'false' to indicate no module processing\n` + ` - a specific module type: 'commonjs', 'amd', 'umd', 'systemjs'` + ` - 'auto' (default) which will automatically select 'false' if the current\n` + ` process is known to support ES module syntax, or "commonjs" otherwise\n`); | ||
return modulesOpt; | ||
@@ -144,17 +157,4 @@ }; | ||
const objectToBrowserslist = object => { | ||
return Object.keys(object).reduce((list, targetName) => { | ||
if (validBrowserslistTargets.indexOf(targetName) >= 0) { | ||
const targetVersion = object[targetName]; | ||
return list.concat(`${targetName} ${targetVersion}`); | ||
} | ||
return list; | ||
}, []); | ||
}; | ||
exports.objectToBrowserslist = objectToBrowserslist; | ||
const validateUseBuiltInsOption = (builtInsOpt = false) => { | ||
(0, _invariant().default)(_options.UseBuiltInsOption[builtInsOpt] || _options.UseBuiltInsOption[builtInsOpt] === _options.UseBuiltInsOption.false, `Invalid Option: The 'useBuiltIns' option must be either | ||
(0, _invariant().default)(_options.UseBuiltInsOption[builtInsOpt.toString()] || _options.UseBuiltInsOption[builtInsOpt.toString()] === _options.UseBuiltInsOption.false, `Invalid Option: The 'useBuiltIns' option must be either | ||
'false' (default) to indicate no polyfill, | ||
@@ -168,9 +168,43 @@ '"entry"' to indicate replacing the entry polyfill, or | ||
function normalizeCoreJSOption(corejs, useBuiltIns) { | ||
let proposals = false; | ||
let rawVersion; | ||
if (useBuiltIns && corejs === undefined) { | ||
rawVersion = 2; | ||
console.log("\nWith `useBuiltIns` option, required direct setting of `corejs` option\n"); | ||
} else if (typeof corejs === "object" && corejs !== null) { | ||
rawVersion = corejs.version; | ||
proposals = Boolean(corejs.proposals); | ||
} else { | ||
rawVersion = corejs; | ||
} | ||
const version = rawVersion ? (0, _semver().coerce)(String(rawVersion)) : false; | ||
if (!useBuiltIns && version) { | ||
console.log("\n`corejs` option required only with `useBuiltIns` option\n"); | ||
} | ||
if (useBuiltIns && (!version || version.major < 2 || version.major > 3)) { | ||
throw new RangeError("Supported only core-js@2 and core-js@3."); | ||
} | ||
return { | ||
version, | ||
proposals | ||
}; | ||
} | ||
function normalizeOptions(opts) { | ||
validateTopLevelOptions(opts); | ||
const include = expandIncludesAndExcludes(opts.include, _options.TopLevelOptions.include); | ||
const exclude = expandIncludesAndExcludes(opts.exclude, _options.TopLevelOptions.exclude); | ||
const useBuiltIns = validateUseBuiltInsOption(opts.useBuiltIns); | ||
const corejs = normalizeCoreJSOption(opts.corejs, useBuiltIns); | ||
const include = expandIncludesAndExcludes(opts.include, _options.TopLevelOptions.include, !!corejs.version && corejs.version.major); | ||
const exclude = expandIncludesAndExcludes(opts.exclude, _options.TopLevelOptions.exclude, !!corejs.version && corejs.version.major); | ||
checkDuplicateIncludeExcludes(include, exclude); | ||
const shippedProposals = validateBoolOption(_options.TopLevelOptions.shippedProposals, opts.shippedProposals, false) || corejs.proposals; | ||
return { | ||
configPath: validateConfigPathOption(opts.configPath), | ||
corejs, | ||
debug: validateBoolOption(_options.TopLevelOptions.debug, opts.debug, false), | ||
@@ -183,7 +217,7 @@ include, | ||
modules: validateModulesOption(opts.modules), | ||
shippedProposals: validateBoolOption(_options.TopLevelOptions.shippedProposals, opts.shippedProposals, false), | ||
shippedProposals, | ||
spec: validateBoolOption(_options.TopLevelOptions.spec, opts.spec, false), | ||
targets: normalizeTargets(opts.targets), | ||
useBuiltIns: validateUseBuiltInsOption(opts.useBuiltIns) | ||
useBuiltIns: useBuiltIns | ||
}; | ||
} |
@@ -9,2 +9,3 @@ "use strict"; | ||
configPath: "configPath", | ||
corejs: "corejs", | ||
debug: "debug", | ||
@@ -51,4 +52,6 @@ exclude: "exclude", | ||
android: "android", | ||
electron: "electron" | ||
electron: "electron", | ||
samsung: "samsung", | ||
uglify: "uglify" | ||
}; | ||
exports.TargetNames = TargetNames; |
@@ -40,4 +40,2 @@ "use strict"; | ||
var _normalizeOptions = require("./normalize-options"); | ||
var _builtInModules = _interopRequireDefault(require("../data/built-in-modules.json")); | ||
@@ -51,8 +49,22 @@ | ||
const validateTargetNames = (validTargets, targets) => { | ||
const validBrowserslistTargets = [...Object.keys(_browserslist().default.data), ...Object.keys(_browserslist().default.aliases)]; | ||
const objectToBrowserslist = object => { | ||
return Object.keys(object).reduce((list, targetName) => { | ||
if (validBrowserslistTargets.indexOf(targetName) >= 0) { | ||
const targetVersion = object[targetName]; | ||
return list.concat(`${targetName} ${targetVersion}`); | ||
} | ||
return list; | ||
}, []); | ||
}; | ||
const validateTargetNames = targets => { | ||
const validTargets = Object.keys(_options.TargetNames); | ||
for (const target in targets) { | ||
if (!_options.TargetNames[target]) { | ||
const validOptions = (0, _utils.getValues)(_options.TargetNames); | ||
throw new Error(`Invalid Option: '${target}' is not a valid target | ||
Maybe you meant to use '${(0, _utils.findSuggestion)(validOptions, target)}'?`); | ||
Maybe you meant to use '${(0, _utils.findSuggestion)(validTargets, target)}'?`); | ||
} | ||
@@ -72,3 +84,4 @@ } | ||
opera: "opera", | ||
safari: "safari" | ||
safari: "safari", | ||
samsung: "samsung" | ||
}; | ||
@@ -186,3 +199,3 @@ | ||
if (shouldParseBrowsers || shouldSearchForConfig) { | ||
_browserslist().default.defaults = (0, _normalizeOptions.objectToBrowserslist)(targets); | ||
_browserslist().default.defaults = objectToBrowserslist(targets); | ||
const browsers = (0, _browserslist().default)(browsersquery, { | ||
@@ -189,0 +202,0 @@ path: options.configPath |
121
lib/utils.js
@@ -6,4 +6,28 @@ "use strict"; | ||
}); | ||
exports.isRequire = exports.createImport = exports.getModulePath = exports.isPolyfillSource = exports.filterStageFromList = exports.getLowestUnreleased = exports.isUnreleasedVersion = exports.prettifyTargets = exports.prettifyVersion = exports.findSuggestion = exports.getValues = exports.semverify = void 0; | ||
exports.getType = getType; | ||
exports.semverify = semverify; | ||
exports.intersection = intersection; | ||
exports.findSuggestion = findSuggestion; | ||
exports.prettifyVersion = prettifyVersion; | ||
exports.prettifyTargets = prettifyTargets; | ||
exports.isUnreleasedVersion = isUnreleasedVersion; | ||
exports.getLowestUnreleased = getLowestUnreleased; | ||
exports.filterStageFromList = filterStageFromList; | ||
exports.getImportSource = getImportSource; | ||
exports.getRequireSource = getRequireSource; | ||
exports.isPolyfillSource = isPolyfillSource; | ||
exports.getModulePath = getModulePath; | ||
exports.createImport = createImport; | ||
exports.has = void 0; | ||
function t() { | ||
const data = _interopRequireWildcard(require("@babel/types")); | ||
t = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _invariant() { | ||
@@ -55,5 +79,14 @@ const data = _interopRequireDefault(require("invariant")); | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } | ||
const has = Object.hasOwnProperty.call.bind(Object.hasOwnProperty); | ||
exports.has = has; | ||
function getType(target) { | ||
return Object.prototype.toString.call(target).slice(8, -1).toLowerCase(); | ||
} | ||
const versionRegExp = /^(\d+|\d+.\d+)$/; | ||
const semverify = version => { | ||
function semverify(version) { | ||
if (typeof version === "string" && _semver().default.valid(version)) { | ||
@@ -71,11 +104,15 @@ return version; | ||
return split.join("."); | ||
}; | ||
} | ||
exports.semverify = semverify; | ||
function intersection(first, second, third) { | ||
const result = new Set(); | ||
const getValues = object => Object.keys(object).map(key => object[key]); | ||
for (const el of first) { | ||
if (second.has(el) && third.has(el)) result.add(el); | ||
} | ||
exports.getValues = getValues; | ||
return result; | ||
} | ||
const findSuggestion = (options, option) => { | ||
function findSuggestion(options, option) { | ||
let levenshteinValue = Infinity; | ||
@@ -92,7 +129,5 @@ return options.reduce((suggestion, validOption) => { | ||
}, undefined); | ||
}; | ||
} | ||
exports.findSuggestion = findSuggestion; | ||
const prettifyVersion = version => { | ||
function prettifyVersion(version) { | ||
if (typeof version !== "string") { | ||
@@ -117,7 +152,5 @@ return version; | ||
return parts.join("."); | ||
}; | ||
} | ||
exports.prettifyVersion = prettifyVersion; | ||
const prettifyTargets = targets => { | ||
function prettifyTargets(targets) { | ||
return Object.keys(targets).reduce((results, target) => { | ||
@@ -134,14 +167,10 @@ let value = targets[target]; | ||
}, {}); | ||
}; | ||
} | ||
exports.prettifyTargets = prettifyTargets; | ||
const isUnreleasedVersion = (version, env) => { | ||
function isUnreleasedVersion(version, env) { | ||
const unreleasedLabel = _unreleasedLabels.default[env]; | ||
return !!unreleasedLabel && unreleasedLabel === version.toString().toLowerCase(); | ||
}; | ||
} | ||
exports.isUnreleasedVersion = isUnreleasedVersion; | ||
const getLowestUnreleased = (a, b, env) => { | ||
function getLowestUnreleased(a, b, env) { | ||
const unreleasedLabel = _unreleasedLabels.default[env]; | ||
@@ -155,7 +184,5 @@ const hasUnreleased = [a, b].some(item => item === unreleasedLabel); | ||
return (0, _targetsParser.semverMin)(a, b); | ||
}; | ||
} | ||
exports.getLowestUnreleased = getLowestUnreleased; | ||
const filterStageFromList = (list, stageList) => { | ||
function filterStageFromList(list, stageList) { | ||
return Object.keys(list).reduce((result, item) => { | ||
@@ -168,9 +195,25 @@ if (!stageList[item]) { | ||
}, {}); | ||
}; | ||
} | ||
exports.filterStageFromList = filterStageFromList; | ||
function getImportSource({ | ||
node | ||
}) { | ||
if (node.specifiers.length === 0) return node.source.value; | ||
} | ||
const isPolyfillSource = source => source === "@babel/polyfill" || source === "core-js"; | ||
function getRequireSource({ | ||
node | ||
}) { | ||
if (!t().isExpressionStatement(node)) return; | ||
const { | ||
expression | ||
} = node; | ||
const isRequire = t().isCallExpression(expression) && t().isIdentifier(expression.callee) && expression.callee.name === "require" && expression.arguments.length === 1 && t().isStringLiteral(expression.arguments[0]); | ||
if (isRequire) return expression.arguments[0].value; | ||
} | ||
exports.isPolyfillSource = isPolyfillSource; | ||
function isPolyfillSource(source) { | ||
return source === "@babel/polyfill" || source === "core-js"; | ||
} | ||
const modulePathMap = { | ||
@@ -180,12 +223,8 @@ "regenerator-runtime": "regenerator-runtime/runtime" | ||
const getModulePath = mod => modulePathMap[mod] || `core-js/modules/${mod}`; | ||
function getModulePath(mod) { | ||
return modulePathMap[mod] || `core-js/modules/${mod}`; | ||
} | ||
exports.getModulePath = getModulePath; | ||
const createImport = (path, mod) => (0, _helperModuleImports().addSideEffect)(path, getModulePath(mod)); | ||
exports.createImport = createImport; | ||
const isRequire = (t, path) => t.isExpressionStatement(path.node) && t.isCallExpression(path.node.expression) && t.isIdentifier(path.node.expression.callee) && path.node.expression.callee.name === "require" && path.node.expression.arguments.length === 1 && t.isStringLiteral(path.node.expression.arguments[0]) && isPolyfillSource(path.node.expression.arguments[0].value); | ||
exports.isRequire = isRequire; | ||
function createImport(path, mod) { | ||
return (0, _helperModuleImports().addSideEffect)(path, getModulePath(mod)); | ||
} |
{ | ||
"name": "@babel/preset-env", | ||
"version": "7.3.4", | ||
"version": "7.4.0", | ||
"description": "A Babel preset for each environment.", | ||
@@ -21,5 +21,5 @@ "author": "Henry Zhu <hi@henryzoo.com>", | ||
"@babel/plugin-proposal-json-strings": "^7.2.0", | ||
"@babel/plugin-proposal-object-rest-spread": "^7.3.4", | ||
"@babel/plugin-proposal-object-rest-spread": "^7.4.0", | ||
"@babel/plugin-proposal-optional-catch-binding": "^7.2.0", | ||
"@babel/plugin-proposal-unicode-property-regex": "^7.2.0", | ||
"@babel/plugin-proposal-unicode-property-regex": "^7.4.0", | ||
"@babel/plugin-syntax-async-generators": "^7.2.0", | ||
@@ -30,23 +30,23 @@ "@babel/plugin-syntax-json-strings": "^7.2.0", | ||
"@babel/plugin-transform-arrow-functions": "^7.2.0", | ||
"@babel/plugin-transform-async-to-generator": "^7.3.4", | ||
"@babel/plugin-transform-async-to-generator": "^7.4.0", | ||
"@babel/plugin-transform-block-scoped-functions": "^7.2.0", | ||
"@babel/plugin-transform-block-scoping": "^7.3.4", | ||
"@babel/plugin-transform-classes": "^7.3.4", | ||
"@babel/plugin-transform-block-scoping": "^7.4.0", | ||
"@babel/plugin-transform-classes": "^7.4.0", | ||
"@babel/plugin-transform-computed-properties": "^7.2.0", | ||
"@babel/plugin-transform-destructuring": "^7.2.0", | ||
"@babel/plugin-transform-destructuring": "^7.4.0", | ||
"@babel/plugin-transform-dotall-regex": "^7.2.0", | ||
"@babel/plugin-transform-duplicate-keys": "^7.2.0", | ||
"@babel/plugin-transform-exponentiation-operator": "^7.2.0", | ||
"@babel/plugin-transform-for-of": "^7.2.0", | ||
"@babel/plugin-transform-for-of": "^7.4.0", | ||
"@babel/plugin-transform-function-name": "^7.2.0", | ||
"@babel/plugin-transform-literals": "^7.2.0", | ||
"@babel/plugin-transform-modules-amd": "^7.2.0", | ||
"@babel/plugin-transform-modules-commonjs": "^7.2.0", | ||
"@babel/plugin-transform-modules-systemjs": "^7.3.4", | ||
"@babel/plugin-transform-modules-commonjs": "^7.4.0", | ||
"@babel/plugin-transform-modules-systemjs": "^7.4.0", | ||
"@babel/plugin-transform-modules-umd": "^7.2.0", | ||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", | ||
"@babel/plugin-transform-new-target": "^7.0.0", | ||
"@babel/plugin-transform-new-target": "^7.4.0", | ||
"@babel/plugin-transform-object-super": "^7.2.0", | ||
"@babel/plugin-transform-parameters": "^7.2.0", | ||
"@babel/plugin-transform-regenerator": "^7.3.4", | ||
"@babel/plugin-transform-parameters": "^7.4.0", | ||
"@babel/plugin-transform-regenerator": "^7.4.0", | ||
"@babel/plugin-transform-shorthand-properties": "^7.2.0", | ||
@@ -58,3 +58,5 @@ "@babel/plugin-transform-spread": "^7.2.0", | ||
"@babel/plugin-transform-unicode-regex": "^7.2.0", | ||
"browserslist": "^4.3.4", | ||
"@babel/types": "^7.4.0", | ||
"browserslist": "^4.4.2", | ||
"core-js-compat": "^3.0.0", | ||
"invariant": "^2.2.2", | ||
@@ -69,10 +71,11 @@ "js-levenshtein": "^1.1.3", | ||
"@babel/cli": "^7.2.3", | ||
"@babel/core": "^7.3.4", | ||
"@babel/core": "^7.4.0", | ||
"@babel/helper-fixtures": "^7.2.0", | ||
"@babel/helper-plugin-test-runner": "^7.0.0", | ||
"caniuse-db": "1.0.30000851", | ||
"compat-table": "kangax/compat-table#1e7b377fbdda9243cf9602872fcb493cdbdd565f", | ||
"electron-to-chromium": "1.3.79" | ||
"@babel/plugin-syntax-dynamic-import": "^7.2.0", | ||
"caniuse-db": "1.0.30000938", | ||
"compat-table": "kangax/compat-table#6d012ba020fa7415e8a2d29e87924bab79b128a3", | ||
"electron-to-chromium": "1.3.113" | ||
}, | ||
"gitHead": "1f6454cc90fe33e0a32260871212e2f719f35741" | ||
"gitHead": "f1328fb913b5a93d54dfc6e3728b1f56c8f4a804" | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
167925
32
4442
46
8
1
+ Added@babel/types@^7.4.0
+ Addedcore-js-compat@^3.0.0
+ Addedcore-js-compat@3.38.1(transitive)
+ Addedupdate-browserslist-db@1.1.1(transitive)
- Removedupdate-browserslist-db@1.1.0(transitive)
Updatedbrowserslist@^4.4.2