diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/@babel/preset-env/lib/normalize-options.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/@babel/preset-env/lib/normalize-options.js')
| -rw-r--r-- | node_modules/@babel/preset-env/lib/normalize-options.js | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/node_modules/@babel/preset-env/lib/normalize-options.js b/node_modules/@babel/preset-env/lib/normalize-options.js new file mode 100644 index 00000000..178795a3 --- /dev/null +++ b/node_modules/@babel/preset-env/lib/normalize-options.js @@ -0,0 +1,152 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = normalizeOptions; +exports.validateUseBuiltInsOption = exports.objectToBrowserslist = exports.validateModulesOption = exports.validateIgnoreBrowserslistConfig = exports.validateBoolOption = exports.validateConfigPathOption = exports.checkDuplicateIncludeExcludes = exports.normalizePluginName = void 0; + +function _invariant() { + const data = _interopRequireDefault(require("invariant")); + + _invariant = function _invariant() { + return data; + }; + + return data; +} + +function _browserslist() { + const data = _interopRequireDefault(require("browserslist")); + + _browserslist = function _browserslist() { + return data; + }; + + return data; +} + +var _builtIns = _interopRequireDefault(require("../data/built-ins.json")); + +var _defaultIncludes = require("./default-includes"); + +var _moduleTransformations = _interopRequireDefault(require("./module-transformations")); + +var _plugins = _interopRequireDefault(require("../data/plugins.json")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const validIncludesAndExcludes = new Set([...Object.keys(_plugins.default), ...Object.keys(_moduleTransformations.default).map(m => _moduleTransformations.default[m]), ...Object.keys(_builtIns.default), ..._defaultIncludes.defaultWebIncludes]); + +const pluginToRegExp = plugin => { + if (plugin instanceof RegExp) return plugin; + + try { + return new RegExp(`^${normalizePluginName(plugin)}$`); + } catch (e) { + return null; + } +}; + +const selectPlugins = regexp => Array.from(validIncludesAndExcludes).filter(item => regexp instanceof RegExp && regexp.test(item)); + +const flatten = array => [].concat(...array); + +const expandIncludesAndExcludes = (plugins = [], type) => { + if (plugins.length === 0) return []; + const selectedPlugins = plugins.map(plugin => selectPlugins(pluginToRegExp(plugin))); + const invalidRegExpList = plugins.filter((p, i) => selectedPlugins[i].length === 0); + (0, _invariant().default)(invalidRegExpList.length === 0, `Invalid Option: The plugins/built-ins '${invalidRegExpList.join(", ")}' passed to the '${type}' option are not + valid. Please check data/[plugin-features|built-in-features].js in babel-preset-env`); + return flatten(selectedPlugins); +}; + +const validBrowserslistTargets = [...Object.keys(_browserslist().default.data), ...Object.keys(_browserslist().default.aliases)]; + +const normalizePluginName = plugin => plugin.replace(/^babel-plugin-/, ""); + +exports.normalizePluginName = normalizePluginName; + +const checkDuplicateIncludeExcludes = (include = [], exclude = []) => { + const duplicates = include.filter(opt => exclude.indexOf(opt) >= 0); + (0, _invariant().default)(duplicates.length === 0, `Invalid Option: The plugins/built-ins '${duplicates.join(", ")}' were found in both the "include" and + "exclude" options.`); +}; + +exports.checkDuplicateIncludeExcludes = checkDuplicateIncludeExcludes; + +const validateConfigPathOption = (configPath = process.cwd()) => { + (0, _invariant().default)(typeof configPath === "string", `Invalid Option: The configPath option '${configPath}' is invalid, only strings are allowed.`); + return configPath; +}; + +exports.validateConfigPathOption = validateConfigPathOption; + +const validateBoolOption = (name, value, defaultValue) => { + if (typeof value === "undefined") { + value = defaultValue; + } + + if (typeof value !== "boolean") { + throw new Error(`Preset env: '${name}' option must be a boolean.`); + } + + return value; +}; + +exports.validateBoolOption = validateBoolOption; + +const validateIgnoreBrowserslistConfig = ignoreBrowserslistConfig => validateBoolOption("ignoreBrowserslistConfig", ignoreBrowserslistConfig, false); + +exports.validateIgnoreBrowserslistConfig = validateIgnoreBrowserslistConfig; + +const validateModulesOption = (modulesOpt = "commonjs") => { + (0, _invariant().default)(modulesOpt === false || Object.keys(_moduleTransformations.default).indexOf(modulesOpt) > -1, `Invalid Option: The 'modules' option must be either 'false' to indicate no modules, or a + module type which can be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'.`); + return modulesOpt; +}; + +exports.validateModulesOption = validateModulesOption; + +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)(builtInsOpt === "usage" || builtInsOpt === false || builtInsOpt === "entry", `Invalid Option: The 'useBuiltIns' option must be either + 'false' (default) to indicate no polyfill, + '"entry"' to indicate replacing the entry polyfill, or + '"usage"' to import only used polyfills per file`); + return builtInsOpt; +}; + +exports.validateUseBuiltInsOption = validateUseBuiltInsOption; + +function normalizeOptions(opts) { + const include = expandIncludesAndExcludes(opts.include, "include"); + const exclude = expandIncludesAndExcludes(opts.exclude, "exclude"); + checkDuplicateIncludeExcludes(include, exclude); + return { + configPath: validateConfigPathOption(opts.configPath), + debug: opts.debug, + include, + exclude, + forceAllTransforms: validateBoolOption("forceAllTransforms", opts.forceAllTransforms, false), + ignoreBrowserslistConfig: validateIgnoreBrowserslistConfig(opts.ignoreBrowserslistConfig), + loose: validateBoolOption("loose", opts.loose, false), + modules: validateModulesOption(opts.modules), + shippedProposals: validateBoolOption("shippedProposals", opts.shippedProposals, false), + spec: validateBoolOption("loose", opts.spec, false), + targets: Object.assign({}, opts.targets), + useBuiltIns: validateUseBuiltInsOption(opts.useBuiltIns) + }; +}
\ No newline at end of file |
