diff --git a/experimental/babel-preset-env/data/built-in-features.js b/experimental/babel-preset-env/data/built-in-features.js index 6073893ba0..a3d46edec1 100644 --- a/experimental/babel-preset-env/data/built-in-features.js +++ b/experimental/babel-preset-env/data/built-in-features.js @@ -1,5 +1,3 @@ -// https://github.com/zloirock/core-js - const typedArrayMethods = [ "typed arrays / %TypedArray%.from", "typed arrays / %TypedArray%.of", @@ -80,7 +78,18 @@ const es2015 = { "es6.reflect.set": "Reflect / Reflect.set", "es6.reflect.set-prototype-of": "Reflect / Reflect.setPrototypeOf", - "es6.promise": "Promise", + "es6.promise": { + features: [ + "Promise / basic functionality", + "Promise / constructor requires new", + "Promise / Promise.prototype isn\'t an instance", + "Promise / Promise.all", + "Promise / Promise.all, generic iterables", + "Promise / Promise.race", + "Promise / Promise.race, generic iterables", + "Promise / Promise[Symbol.species]" + ] + }, "es6.symbol": { features: [ @@ -178,4 +187,6 @@ const es2017 = { "es7.string.pad-end": "String padding / String.prototype.padEnd", }; -module.exports = Object.assign({}, es2015, es2016, es2017); +const stage3 = require("./stage3").builtIns; + +module.exports = Object.assign({}, es2015, es2016, es2017, stage3); diff --git a/experimental/babel-preset-env/data/built-ins.json b/experimental/babel-preset-env/data/built-ins.json index e7aa303c7a..cc6432d7fa 100644 --- a/experimental/babel-preset-env/data/built-ins.json +++ b/experimental/babel-preset-env/data/built-ins.json @@ -164,7 +164,7 @@ "es6.reflect.construct": { "chrome": "49", "edge": "13", - "firefox": "45", + "firefox": "44", "safari": "10", "node": "6", "ios": "10", @@ -691,6 +691,7 @@ "firefox": "23", "safari": "7", "node": "0.12", + "android": "4.4", "ios": "7", "opera": "17", "electron": "0.2" @@ -824,5 +825,6 @@ "ios": "10", "opera": "44", "electron": "1.7" - } + }, + "es7.promise.finally": {} } diff --git a/experimental/babel-preset-env/data/plugin-features.js b/experimental/babel-preset-env/data/plugin-features.js index e6d505a370..9ccb8e7446 100644 --- a/experimental/babel-preset-env/data/plugin-features.js +++ b/experimental/babel-preset-env/data/plugin-features.js @@ -135,4 +135,6 @@ const es2017 = { } }; -module.exports = Object.assign({}, es2015, es2016, es2017); +const stage3 = require("./stage3").plugins; + +module.exports = Object.assign({}, es2015, es2016, es2017, stage3); diff --git a/experimental/babel-preset-env/data/plugins.json b/experimental/babel-preset-env/data/plugins.json index 497597317c..bdbd227259 100644 --- a/experimental/babel-preset-env/data/plugins.json +++ b/experimental/babel-preset-env/data/plugins.json @@ -62,7 +62,6 @@ }, "transform-es2015-destructuring": { "chrome": "51", - "edge": "15", "firefox": "53", "safari": "10", "node": "6.5", @@ -238,5 +237,14 @@ "ios": "10", "opera": "45", "electron": "1.7" - } + }, + "transform-async-generator-functions": {}, + "transform-object-rest-spread": { + "chrome": "60", + "firefox": "55", + "node": "8.3", + "opera": "47" + }, + "transform-optional-catch-binding": {}, + "transform-unicode-property-regex": {} } diff --git a/experimental/babel-preset-env/data/stage3.js b/experimental/babel-preset-env/data/stage3.js new file mode 100644 index 0000000000..10b9ee9657 --- /dev/null +++ b/experimental/babel-preset-env/data/stage3.js @@ -0,0 +1,19 @@ +const builtIns = { + "es7.promise.finally": "Promise.prototype.finally" +}; + +const plugins = { + "transform-async-generator-functions": "Asynchronous Iterators", + "transform-object-rest-spread": "object rest/spread properties", + "transform-optional-catch-binding": "optional catch binding", + "transform-unicode-property-regex": "RegExp Unicode Property Escapes", +}; + +const pluginSyntaxMap = new Map([ + ["transform-async-generator-functions", "syntax-async-generators"], + ["transform-object-rest-spread", "syntax-object-rest-spread"], + ["transform-optional-catch-binding", "syntax-optional-catch-binding"], + ["transform-unicode-property-regex", null], +]); + +module.exports = { builtIns, plugins, pluginSyntaxMap }; diff --git a/experimental/babel-preset-env/package.json b/experimental/babel-preset-env/package.json index 4eddd8f028..4d2cadf86e 100644 --- a/experimental/babel-preset-env/package.json +++ b/experimental/babel-preset-env/package.json @@ -26,8 +26,12 @@ }, "dependencies": { "babel-plugin-check-es2015-constants": "7.0.0-beta.0", + "babel-plugin-syntax-async-generators": "7.0.0-beta.0", + "babel-plugin-syntax-object-rest-spread": "7.0.0-beta.0", + "babel-plugin-syntax-optional-catch-binding": "7.0.0-beta.0", "babel-plugin-syntax-trailing-function-commas": "7.0.0-beta.0", "babel-plugin-transform-async-to-generator": "7.0.0-beta.0", + "babel-plugin-transform-async-generator-functions": "7.0.0-beta.0", "babel-plugin-transform-es2015-arrow-functions": "7.0.0-beta.0", "babel-plugin-transform-es2015-block-scoped-functions": "7.0.0-beta.0", "babel-plugin-transform-es2015-block-scoping": "7.0.0-beta.0", @@ -53,6 +57,9 @@ "babel-plugin-transform-exponentiation-operator": "7.0.0-beta.0", "babel-plugin-transform-new-target": "7.0.0-beta.0", "babel-plugin-transform-regenerator": "7.0.0-beta.0", + "babel-plugin-transform-object-rest-spread": "7.0.0-beta.0", + "babel-plugin-transform-optional-catch-binding": "7.0.0-beta.0", + "babel-plugin-transform-unicode-property-regex": "^2.0.5", "browserslist": "^2.4.0", "invariant": "^2.2.2", "semver": "^5.3.0" @@ -68,7 +75,7 @@ "babel-register": "7.0.0-alpha.16", "chai": "^4.0.2", "codecov": "^2.2.0", - "compat-table": "kangax/compat-table#d88c80ea6dcbc7064112eb46bb020718107892f7", + "compat-table": "kangax/compat-table#b8477cc0f6d65c000c46213e654d19f350de9fa8", "eslint": "^3.17.1", "eslint-config-babel": "^6.0.0", "eslint-plugin-flowtype": "^2.33.0", diff --git a/experimental/babel-preset-env/scripts/build-data.js b/experimental/babel-preset-env/scripts/build-data.js index efdb79ba52..873f4fd7cd 100644 --- a/experimental/babel-preset-env/scripts/build-data.js +++ b/experimental/babel-preset-env/scripts/build-data.js @@ -3,14 +3,11 @@ const fs = require("fs"); const path = require("path"); -const flatten = require("lodash/flatten"); const flattenDeep = require("lodash/flattenDeep"); const isEqual = require("lodash/isEqual"); const mapValues = require("lodash/mapValues"); const pickBy = require("lodash/pickBy"); const electronToChromiumVersions = require("electron-to-chromium").versions; -const pluginFeatures = require("../data/plugin-features"); -const builtInFeatures = require("../data/built-in-features"); const electronToChromiumKeys = Object.keys( electronToChromiumVersions @@ -36,8 +33,10 @@ const findClosestElectronVersion = targetVersion => { const chromiumToElectron = chromium => chromiumToElectronMap[chromium] || findClosestElectronVersion(chromium); -const renameTests = (tests, getName) => - tests.map(test => Object.assign({}, test, { name: getName(test.name) })); +const renameTests = (tests, getName, category) => + tests.map(test => + Object.assign({}, test, { name: getName(test.name), category }) + ); // The following is adapted from compat-table: // https://github.com/kangax/compat-table/blob/gh-pages/build.js @@ -54,11 +53,16 @@ const byTestSuite = suite => browser => { : true; }; -const es6 = require("compat-table/data-es6"); -es6.browsers = pickBy(envs, byTestSuite("es6")); - -const es2016plus = require("compat-table/data-es2016plus"); -es2016plus.browsers = pickBy(envs, byTestSuite("es2016plus")); +const compatSources = [ + "es6", + "es2016plus", + "esnext", +].reduce((result, source) => { + const data = require(`compat-table/data-${source}`); + data.browsers = pickBy(envs, byTestSuite(source)); + result.push(data); + return result; +}, []); const interpolateAllResults = (rawBrowsers, tests) => { const interpolateResults = res => { @@ -111,8 +115,9 @@ const interpolateAllResults = (rawBrowsers, tests) => { }); }; -interpolateAllResults(es6.browsers, es6.tests); -interpolateAllResults(es2016plus.browsers, es2016plus.tests); +compatSources.forEach(({ browsers, tests }) => + interpolateAllResults(browsers, tests) +); // End of compat-table code adaptation @@ -130,44 +135,55 @@ const environments = [ ]; const compatibilityTests = flattenDeep( - [es6, es2016plus].map(data => + compatSources.map(data => data.tests.map(test => { return test.subtests - ? [test, renameTests(test.subtests, name => test.name + " / " + name)] + ? [ + test, + renameTests( + test.subtests, + name => test.name + " / " + name, + test.category + ), + ] : test; }) ) ); const getLowestImplementedVersion = ({ features }, env) => { - const tests = flatten( - compatibilityTests - .filter(test => { - return ( - features.indexOf(test.name) >= 0 || - // for features === ["DataView"] - // it covers "DataView (Int8)" and "DataView (UInt8)" - (features.length === 1 && test.name.indexOf(features[0]) === 0) - ); - }) - .map(test => { - const isBuiltIn = - test.category === "built-ins" || - test.category === "built-in extensions"; + const tests = compatibilityTests + .filter(test => { + return ( + features.indexOf(test.name) >= 0 || + // for features === ["DataView"] + // it covers "DataView (Int8)" and "DataView (UInt8)" + (features.length === 1 && test.name.indexOf(features[0]) === 0) + ); + }) + .reduce((result, test) => { + const isBuiltIn = + test.category === "built-ins" || + test.category === "built-in extensions"; - return test.subtests - ? test.subtests.map(subtest => ({ - name: `${test.name}/${subtest.name}`, - res: subtest.res, - isBuiltIn, - })) - : { - name: test.name, - res: test.res, - isBuiltIn, - }; - }) - ); + if (!test.subtests) { + result.push({ + name: test.name, + res: test.res, + isBuiltIn, + }); + } else { + test.subtests.forEach(subtest => + result.push({ + name: `${test.name}/${subtest.name}`, + res: subtest.res, + isBuiltIn, + }) + ); + } + + return result; + }, []); const envTests = tests.map(({ res: test, name, isBuiltIn }, i) => { // Babel itself doesn't implement the feature correctly, @@ -221,6 +237,7 @@ const generateData = (environments, features) => { environments.forEach(env => { const version = getLowestImplementedVersion(options, env); + if (version !== null) { plugin[env] = version.toString(); } @@ -245,36 +262,26 @@ const generateData = (environments, features) => { }); }; -const pluginsDataPath = path.join(__dirname, "../data/plugins.json"); -const builtInsDataPath = path.join(__dirname, "../data/built-ins.json"); +["plugin", "built-in"].forEach(target => { + const newData = generateData( + environments, + require(`../data/${target}-features`) + ); + const dataPath = path.join(__dirname, `../data/${target}s.json`); -const newPluginData = generateData(environments, pluginFeatures); -const newBuiltInsData = generateData(environments, builtInFeatures); + if (process.argv[2] === "--check") { + const currentData = require(dataPath); -if (process.argv[2] === "--check") { - const currentPluginData = require(pluginsDataPath); - const currentBuiltInsData = require(builtInsDataPath); + if (!isEqual(currentData, newData)) { + console.error( + "The newly generated plugin/built-in data does not match the current " + + "files. Re-run `npm run build-data`." + ); + process.exit(1); + } - if ( - !isEqual(currentPluginData, newPluginData) || - !isEqual(currentBuiltInsData, newBuiltInsData) - ) { - console.error( - "The newly generated plugin/built-in data does not match the current " + - "files. Re-run `npm run build-data`." - ); - process.exit(1); + process.exit(0); } - process.exit(0); -} - -fs.writeFileSync( - pluginsDataPath, - JSON.stringify(newPluginData, null, 2) + "\n" -); - -fs.writeFileSync( - builtInsDataPath, - JSON.stringify(newBuiltInsData, null, 2) + "\n" -); + fs.writeFileSync(dataPath, `${JSON.stringify(newData, null, 2)}\n`); +}); diff --git a/experimental/babel-preset-env/src/available-plugins.js b/experimental/babel-preset-env/src/available-plugins.js index dec54bc7ff..4bee27506c 100644 --- a/experimental/babel-preset-env/src/available-plugins.js +++ b/experimental/babel-preset-env/src/available-plugins.js @@ -1,7 +1,11 @@ export default { "check-es2015-constants": require("babel-plugin-check-es2015-constants"), + "syntax-async-generators": require("babel-plugin-syntax-async-generators"), + "syntax-object-rest-spread": require("babel-plugin-syntax-object-rest-spread"), + "syntax-optional-catch-binding": require("babel-plugin-syntax-optional-catch-binding"), "syntax-trailing-function-commas": require("babel-plugin-syntax-trailing-function-commas"), "transform-async-to-generator": require("babel-plugin-transform-async-to-generator"), + "transform-async-generator-functions": require("babel-plugin-transform-async-generator-functions"), "transform-es2015-arrow-functions": require("babel-plugin-transform-es2015-arrow-functions"), "transform-es2015-block-scoped-functions": require("babel-plugin-transform-es2015-block-scoped-functions"), "transform-es2015-block-scoping": require("babel-plugin-transform-es2015-block-scoping"), @@ -26,5 +30,8 @@ export default { "transform-es2015-unicode-regex": require("babel-plugin-transform-es2015-unicode-regex"), "transform-exponentiation-operator": require("babel-plugin-transform-exponentiation-operator"), "transform-new-target": require("babel-plugin-transform-new-target"), + "transform-object-rest-spread": require("babel-plugin-transform-object-rest-spread"), + "transform-optional-catch-binding": require("babel-plugin-transform-optional-catch-binding"), "transform-regenerator": require("babel-plugin-transform-regenerator"), + "transform-unicode-property-regex": require("babel-plugin-transform-unicode-property-regex"), }; diff --git a/experimental/babel-preset-env/src/index.js b/experimental/babel-preset-env/src/index.js index 0efff2e45c..bb05fcd1b6 100644 --- a/experimental/babel-preset-env/src/index.js +++ b/experimental/babel-preset-env/src/index.js @@ -7,13 +7,36 @@ import { defaultWebIncludes } from "./default-includes"; import moduleTransformations from "./module-transformations"; import normalizeOptions from "./normalize-options.js"; import pluginList from "../data/plugins.json"; +import { + builtIns as stage3BuiltIns, + plugins as stage3Plugins, + pluginSyntaxMap, +} from "../data/stage3.js"; import useBuiltInsEntryPlugin from "./use-built-ins-entry-plugin"; import addUsedBuiltInsPlugin from "./use-built-ins-plugin"; import getTargets from "./targets-parser"; import availablePlugins from "./available-plugins"; -import { prettifyTargets, semverify } from "./utils"; +import { filterStageFromList, prettifyTargets, semverify } from "./utils"; import type { Plugin, Targets } from "./types"; +const getPlugin = (pluginName: string) => { + const plugin = availablePlugins[pluginName]; + + if (!plugin) { + throw new Error( + `Could not find plugin "${pluginName}". Ensure there is an entry in ./available-plugins.js for it.`, + ); + } + + return plugin; +}; + +const builtInsListWithoutStage3 = filterStageFromList( + builtInsList, + stage3BuiltIns, +); +const pluginListWithoutStage3 = filterStageFromList(pluginList, stage3Plugins); + export const isPluginRequired = ( supportedEnvironments: Targets, plugin: Targets, @@ -84,14 +107,28 @@ const getPlatformSpecificDefaultFor = (targets: Targets): ?Array => { return isAnyTarget || isWebTarget ? defaultWebIncludes : null; }; -const filterItems = (list, includes, excludes, targets, defaultItems) => { +const filterItems = ( + list, + includes, + excludes, + targets, + defaultItems, +): Set => { const result = new Set(); for (const item in list) { const excluded = excludes.has(item); - if (!excluded && isPluginRequired(targets, list[item])) { - result.add(item); + if (!excluded) { + if (isPluginRequired(targets, list[item])) { + result.add(item); + } else { + const stage3Syntax = pluginSyntaxMap.get(item); + + if (stage3Syntax) { + result.add(stage3Syntax); + } + } } } @@ -118,6 +155,7 @@ export default function buildPreset( loose, modules, spec, + stage3, targets: optionsTargets, useBuiltIns, } = normalizeOptions(opts); @@ -144,7 +182,7 @@ export default function buildPreset( const transformTargets = forceAllTransforms || hasUglifyTarget ? {} : targets; const transformations = filterItems( - pluginList, + stage3 ? pluginList : pluginListWithoutStage3, include.plugins, exclude.plugins, transformTargets, @@ -157,7 +195,7 @@ export default function buildPreset( polyfillTargets = getBuiltInTargets(targets); polyfills = filterItems( - builtInsList, + stage3 ? builtInsList : builtInsListWithoutStage3, include.builtIns, exclude.builtIns, polyfillTargets, @@ -166,15 +204,19 @@ export default function buildPreset( } const plugins = []; - - if (modules !== false && moduleTransformations[modules]) { - plugins.push([availablePlugins[moduleTransformations[modules]], { loose }]); - } + const pluginUseBuiltIns = useBuiltIns !== false; // NOTE: not giving spec here yet to avoid compatibility issues when // babel-plugin-transform-es2015-modules-commonjs gets its spec mode + if (modules !== false && moduleTransformations[modules]) { + plugins.push([getPlugin(moduleTransformations[modules]), { loose }]); + } + transformations.forEach(pluginName => - plugins.push([availablePlugins[pluginName], { spec, loose }]), + plugins.push([ + getPlugin(pluginName), + { spec, loose, useBuiltIns: pluginUseBuiltIns }, + ]), ); const regenerator = transformations.has("transform-regenerator"); diff --git a/experimental/babel-preset-env/src/normalize-options.js b/experimental/babel-preset-env/src/normalize-options.js index b08e831311..db2126c4de 100644 --- a/experimental/babel-preset-env/src/normalize-options.js +++ b/experimental/babel-preset-env/src/normalize-options.js @@ -91,15 +91,6 @@ export const validateBoolOption = ( return value; }; -export const validateLooseOption = (looseOpt: boolean) => - validateBoolOption("loose", looseOpt, false); - -export const validateSpecOption = (specOpt: boolean) => - validateBoolOption("spec", specOpt, false); - -export const validateForceAllTransformsOption = (forceAllTransforms: boolean) => - validateBoolOption("forceAllTransforms", forceAllTransforms, false); - export const validateIgnoreBrowserslistConfig = ( ignoreBrowserslistConfig: boolean, ) => @@ -161,16 +152,19 @@ export default function normalizeOptions(opts: Options) { configPath: validateConfigPathOption(opts.configPath), debug: opts.debug, exclude: validateIncludesAndExcludes(opts.exclude, "exclude"), - forceAllTransforms: validateForceAllTransformsOption( + forceAllTransforms: validateBoolOption( + "forceAllTransforms", opts.forceAllTransforms, + false, ), ignoreBrowserslistConfig: validateIgnoreBrowserslistConfig( opts.ignoreBrowserslistConfig, ), include: validateIncludesAndExcludes(opts.include, "include"), - loose: validateLooseOption(opts.loose), + loose: validateBoolOption("loose", opts.loose, false), modules: validateModulesOption(opts.modules), - spec: validateSpecOption(opts.spec), + spec: validateBoolOption("loose", opts.spec, false), + stage3: validateBoolOption("stage3", opts.stage3, false), targets: opts.targets, useBuiltIns: validateUseBuiltInsOption(opts.useBuiltIns), }; diff --git a/experimental/babel-preset-env/src/types.js b/experimental/babel-preset-env/src/types.js index a9221314a3..f944dfb91a 100644 --- a/experimental/babel-preset-env/src/types.js +++ b/experimental/babel-preset-env/src/types.js @@ -21,6 +21,7 @@ export type Options = { loose: boolean, modules: ModuleOption, spec: boolean, + stage3: boolean, targets: Targets, useBuiltIns: BuiltInsOption, }; diff --git a/experimental/babel-preset-env/src/utils.js b/experimental/babel-preset-env/src/utils.js index 67200ed98a..eb659528c4 100644 --- a/experimental/babel-preset-env/src/utils.js +++ b/experimental/babel-preset-env/src/utils.js @@ -51,3 +51,13 @@ export const prettifyTargets = (targets: Targets): Object => { return results; }, {}); }; + +export const filterStageFromList = (list: any, stageList: any) => { + return Object.keys(list).reduce((result, item) => { + if (!stageList[item]) { + result[item] = list[item]; + } + + return result; + }, {}); +}; diff --git a/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/in/in.js b/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/in/in.js new file mode 100644 index 0000000000..b012711b90 --- /dev/null +++ b/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/in/in.js @@ -0,0 +1 @@ +import 'babel-polyfill'; diff --git a/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/options.json b/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/options.json new file mode 100644 index 0000000000..c22b41c7f6 --- /dev/null +++ b/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/options.json @@ -0,0 +1,12 @@ +{ + "presets": [ + ["../../lib", { + "debug": true, + "targets": { + "browsers": "chrome 60" + }, + "stage3": true, + "useBuiltIns": "entry" + }] + ] +} diff --git a/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/stdout.txt new file mode 100644 index 0000000000..121732593f --- /dev/null +++ b/experimental/babel-preset-env/test/debug-fixtures/stage3-chrome60/stdout.txt @@ -0,0 +1,23 @@ +babel-preset-env: `DEBUG` option + +Using targets: +{ + "chrome": "60" +} + +Using modules transform: commonjs + +Using plugins: + transform-async-generator-functions { "chrome":"60" } + syntax-object-rest-spread { "chrome":"60" } + transform-optional-catch-binding { "chrome":"60" } + transform-unicode-property-regex { "chrome":"60" } + +Using polyfills with `entry` option: + +[src/in.js] Replaced `babel-polyfill` with the following polyfills: + es7.promise.finally { "chrome":"60" } + web.timers { "chrome":"60" } + web.immediate { "chrome":"60" } + web.dom.iterable { "chrome":"60" } +src/in.js -> lib/in.js \ No newline at end of file diff --git a/experimental/babel-preset-env/test/debug-fixtures/stage3/in/in.js b/experimental/babel-preset-env/test/debug-fixtures/stage3/in/in.js new file mode 100644 index 0000000000..b012711b90 --- /dev/null +++ b/experimental/babel-preset-env/test/debug-fixtures/stage3/in/in.js @@ -0,0 +1 @@ +import 'babel-polyfill'; diff --git a/experimental/babel-preset-env/test/debug-fixtures/stage3/options.json b/experimental/babel-preset-env/test/debug-fixtures/stage3/options.json new file mode 100644 index 0000000000..e067aa814a --- /dev/null +++ b/experimental/babel-preset-env/test/debug-fixtures/stage3/options.json @@ -0,0 +1,9 @@ +{ + "presets": [ + ["../../lib", { + "debug": true, + "stage3": true, + "useBuiltIns": "entry" + }] + ] +} diff --git a/experimental/babel-preset-env/test/debug-fixtures/stage3/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/stage3/stdout.txt new file mode 100644 index 0000000000..8df95beaa3 --- /dev/null +++ b/experimental/babel-preset-env/test/debug-fixtures/stage3/stdout.txt @@ -0,0 +1,128 @@ +babel-preset-env: `DEBUG` option + +Using targets: +{} + +Using modules transform: commonjs + +Using plugins: + check-es2015-constants {} + transform-es2015-arrow-functions {} + transform-es2015-block-scoped-functions {} + transform-es2015-block-scoping {} + transform-es2015-classes {} + transform-es2015-computed-properties {} + transform-es2015-destructuring {} + transform-es2015-duplicate-keys {} + transform-es2015-for-of {} + transform-es2015-function-name {} + transform-es2015-literals {} + transform-es2015-object-super {} + transform-es2015-parameters {} + transform-es2015-shorthand-properties {} + transform-es2015-spread {} + transform-es2015-sticky-regex {} + transform-es2015-template-literals {} + transform-es2015-typeof-symbol {} + transform-es2015-unicode-regex {} + transform-new-target {} + transform-regenerator {} + transform-exponentiation-operator {} + transform-async-to-generator {} + syntax-trailing-function-commas {} + transform-async-generator-functions {} + transform-object-rest-spread {} + transform-optional-catch-binding {} + transform-unicode-property-regex {} + +Using polyfills with `entry` option: + +[src/in.js] Replaced `babel-polyfill` with the following polyfills: + es6.typed.array-buffer {} + es6.typed.data-view {} + es6.typed.int8-array {} + es6.typed.uint8-array {} + es6.typed.uint8-clamped-array {} + es6.typed.int16-array {} + es6.typed.uint16-array {} + es6.typed.int32-array {} + es6.typed.uint32-array {} + es6.typed.float32-array {} + es6.typed.float64-array {} + es6.map {} + es6.set {} + es6.weak-map {} + es6.weak-set {} + es6.reflect.apply {} + es6.reflect.construct {} + es6.reflect.define-property {} + es6.reflect.delete-property {} + es6.reflect.get {} + es6.reflect.get-own-property-descriptor {} + es6.reflect.get-prototype-of {} + es6.reflect.has {} + es6.reflect.is-extensible {} + es6.reflect.own-keys {} + es6.reflect.prevent-extensions {} + es6.reflect.set {} + es6.reflect.set-prototype-of {} + es6.promise {} + es6.symbol {} + es6.object.assign {} + es6.object.is {} + es6.object.set-prototype-of {} + es6.function.name {} + es6.string.raw {} + es6.string.from-code-point {} + es6.string.code-point-at {} + es6.string.repeat {} + es6.string.starts-with {} + es6.string.ends-with {} + es6.string.includes {} + es6.regexp.flags {} + es6.regexp.match {} + es6.regexp.replace {} + es6.regexp.split {} + es6.regexp.search {} + es6.array.from {} + es6.array.of {} + es6.array.copy-within {} + es6.array.find {} + es6.array.find-index {} + es6.array.fill {} + es6.array.iterator {} + es6.number.is-finite {} + es6.number.is-integer {} + es6.number.is-safe-integer {} + es6.number.is-nan {} + es6.number.epsilon {} + es6.number.min-safe-integer {} + es6.number.max-safe-integer {} + es6.math.acosh {} + es6.math.asinh {} + es6.math.atanh {} + es6.math.cbrt {} + es6.math.clz32 {} + es6.math.cosh {} + es6.math.expm1 {} + es6.math.fround {} + es6.math.hypot {} + es6.math.imul {} + es6.math.log1p {} + es6.math.log10 {} + es6.math.log2 {} + es6.math.sign {} + es6.math.sinh {} + es6.math.tanh {} + es6.math.trunc {} + es7.array.includes {} + es7.object.values {} + es7.object.entries {} + es7.object.get-own-property-descriptors {} + es7.string.pad-start {} + es7.string.pad-end {} + es7.promise.finally {} + web.timers {} + web.immediate {} + web.dom.iterable {} +src/in.js -> lib/in.js \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/actual.js new file mode 100644 index 0000000000..d95854b64f --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/actual.js @@ -0,0 +1,6 @@ +let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; +let n = { x, y, ...z }; +async function* agf() { + await 1; + yield 2; +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/expected.js new file mode 100644 index 0000000000..41e568f57f --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/expected.js @@ -0,0 +1,48 @@ +"use strict"; + +var _asyncGenerator = function () { function AwaitValue(value) { this.value = value; } function AsyncGenerator(gen) { var front, back; function send(key, arg) { return new Promise(function (resolve, reject) { var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null }; if (back) { back = back.next = request; } else { front = back = request; resume(key, arg); } }); } function resume(key, arg) { try { var result = gen[key](arg); var value = result.value; if (value instanceof AwaitValue) { Promise.resolve(value.value).then(function (arg) { resume("next", arg); }, function (arg) { resume("throw", arg); }); } else { settle(result.done ? "return" : "normal", result.value); } } catch (err) { settle("throw", err); } } function settle(type, value) { switch (type) { case "return": front.resolve({ value: value, done: true }); break; case "throw": front.reject(value); break; default: front.resolve({ value: value, done: false }); break; } front = front.next; if (front) { resume(front.key, front.arg); } else { back = null; } } this._invoke = send; if (typeof gen.return !== "function") { this.return = undefined; } } if (typeof Symbol === "function" && Symbol.asyncIterator) { AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; }; } AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); }; AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); }; AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); }; return { wrap: function wrap(fn) { return function () { return new AsyncGenerator(fn.apply(this, arguments)); }; }, await: function _await(value) { return new AwaitValue(value); } }; }(); + +var agf = function () { + var _ref = _asyncGenerator.wrap( + /*#__PURE__*/ + regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return _asyncGenerator.await(1); + + case 2: + _context.next = 4; + return 2; + + case 4: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + return function agf() { + return _ref.apply(this, arguments); + }; +}(); + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +var _x$y$a$b = { + x: 1, + y: 2, + a: 3, + b: 4 +}, + x = _x$y$a$b.x, + y = _x$y$a$b.y, + z = _objectWithoutProperties(_x$y$a$b, ["x", "y"]); + +var n = Object.assign({ + x: x, + y: y +}, z); \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/options.json new file mode 100644 index 0000000000..8939d0ca92 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-entry/options.json @@ -0,0 +1,8 @@ +{ + "presets": [ + ["../../../../lib", { + "stage3": true, + "useBuiltIns": "entry" + }] + ] +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/actual.js new file mode 100644 index 0000000000..d95854b64f --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/actual.js @@ -0,0 +1,6 @@ +let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; +let n = { x, y, ...z }; +async function* agf() { + await 1; + yield 2; +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/expected.js new file mode 100644 index 0000000000..b053c1036c --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/expected.js @@ -0,0 +1,56 @@ +"use strict"; + +var _asyncGenerator = function () { function AwaitValue(value) { this.value = value; } function AsyncGenerator(gen) { var front, back; function send(key, arg) { return new Promise(function (resolve, reject) { var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null }; if (back) { back = back.next = request; } else { front = back = request; resume(key, arg); } }); } function resume(key, arg) { try { var result = gen[key](arg); var value = result.value; if (value instanceof AwaitValue) { Promise.resolve(value.value).then(function (arg) { resume("next", arg); }, function (arg) { resume("throw", arg); }); } else { settle(result.done ? "return" : "normal", result.value); } } catch (err) { settle("throw", err); } } function settle(type, value) { switch (type) { case "return": front.resolve({ value: value, done: true }); break; case "throw": front.reject(value); break; default: front.resolve({ value: value, done: false }); break; } front = front.next; if (front) { resume(front.key, front.arg); } else { back = null; } } this._invoke = send; if (typeof gen.return !== "function") { this.return = undefined; } } if (typeof Symbol === "function" && Symbol.asyncIterator) { AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; }; } AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); }; AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); }; AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); }; return { wrap: function wrap(fn) { return function () { return new AsyncGenerator(fn.apply(this, arguments)); }; }, await: function _await(value) { return new AwaitValue(value); } }; }(); + +var agf = function () { + var _ref = _asyncGenerator.wrap( + /*#__PURE__*/ + regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return _asyncGenerator.await(1); + + case 2: + _context.next = 4; + return 2; + + case 4: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + return function agf() { + return _ref.apply(this, arguments); + }; +}(); + +require("babel-polyfill/lib/core-js/modules/es6.symbol"); + +require("babel-polyfill/lib/core-js/modules/es6.promise"); + +require("babel-polyfill/lib/regenerator-runtime/runtime"); + +require("babel-polyfill/lib/core-js/modules/es6.object.assign"); + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +var _x$y$a$b = { + x: 1, + y: 2, + a: 3, + b: 4 +}, + x = _x$y$a$b.x, + y = _x$y$a$b.y, + z = _objectWithoutProperties(_x$y$a$b, ["x", "y"]); + +var n = Object.assign({ + x: x, + y: y +}, z); \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/options.json new file mode 100644 index 0000000000..92aae6a1be --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3-use-builtins-usage/options.json @@ -0,0 +1,8 @@ +{ + "presets": [ + ["../../../../lib", { + "stage3": true, + "useBuiltIns": "usage" + }] + ] +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/stage3/actual.js new file mode 100644 index 0000000000..d95854b64f --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3/actual.js @@ -0,0 +1,6 @@ +let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; +let n = { x, y, ...z }; +async function* agf() { + await 1; + yield 2; +} diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/stage3/expected.js new file mode 100644 index 0000000000..99ca19875a --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3/expected.js @@ -0,0 +1,50 @@ +"use strict"; + +var _asyncGenerator = function () { function AwaitValue(value) { this.value = value; } function AsyncGenerator(gen) { var front, back; function send(key, arg) { return new Promise(function (resolve, reject) { var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null }; if (back) { back = back.next = request; } else { front = back = request; resume(key, arg); } }); } function resume(key, arg) { try { var result = gen[key](arg); var value = result.value; if (value instanceof AwaitValue) { Promise.resolve(value.value).then(function (arg) { resume("next", arg); }, function (arg) { resume("throw", arg); }); } else { settle(result.done ? "return" : "normal", result.value); } } catch (err) { settle("throw", err); } } function settle(type, value) { switch (type) { case "return": front.resolve({ value: value, done: true }); break; case "throw": front.reject(value); break; default: front.resolve({ value: value, done: false }); break; } front = front.next; if (front) { resume(front.key, front.arg); } else { back = null; } } this._invoke = send; if (typeof gen.return !== "function") { this.return = undefined; } } if (typeof Symbol === "function" && Symbol.asyncIterator) { AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; }; } AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); }; AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); }; AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); }; return { wrap: function wrap(fn) { return function () { return new AsyncGenerator(fn.apply(this, arguments)); }; }, await: function _await(value) { return new AwaitValue(value); } }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var agf = function () { + var _ref = _asyncGenerator.wrap( + /*#__PURE__*/ + regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return _asyncGenerator.await(1); + + case 2: + _context.next = 4; + return 2; + + case 4: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + return function agf() { + return _ref.apply(this, arguments); + }; +}(); + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +var _x$y$a$b = { + x: 1, + y: 2, + a: 3, + b: 4 +}, + x = _x$y$a$b.x, + y = _x$y$a$b.y, + z = _objectWithoutProperties(_x$y$a$b, ["x", "y"]); + +var n = _extends({ + x: x, + y: y +}, z); \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/stage3/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/stage3/options.json new file mode 100644 index 0000000000..e104293f62 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/stage3/options.json @@ -0,0 +1,7 @@ +{ + "presets": [ + ["../../../../lib", { + "stage3": true + }] + ] +} diff --git a/experimental/babel-preset-env/test/normalize-options.spec.js b/experimental/babel-preset-env/test/normalize-options.spec.js index 108a28304c..ffdb7e8697 100644 --- a/experimental/babel-preset-env/test/normalize-options.spec.js +++ b/experimental/babel-preset-env/test/normalize-options.spec.js @@ -6,11 +6,9 @@ const assert = require("assert"); const { checkDuplicateIncludeExcludes, normalizePluginNames, - validateForceAllTransformsOption, + validateBoolOption, validateIncludesAndExcludes, - validateLooseOption, validateModulesOption, - validateSpecOption, } = normalizeOptions; describe("normalize-options", () => { @@ -39,31 +37,25 @@ describe("normalize-options", () => { }); }); - const testBoolOption = validator => { - describe(validator.name, () => { - it("`undefined` option returns false", () => { - assert(validator() === false); - }); + describe("validateBoolOption", () => { + it("`undefined` option returns false", () => { + assert(validateBoolOption("test", undefined, false) === false); + }); - it("`false` option returns false", () => { - assert(validator(false) === false); - }); + it("`false` option returns false", () => { + assert(validateBoolOption("test", false, false) === false); + }); - it("`true` option returns true", () => { - assert(validator(true) === true); - }); + it("`true` option returns true", () => { + assert(validateBoolOption("test", true, false) === true); + }); - it("array option is invalid", () => { - assert.throws(() => { - validateLooseOption([]); - }); + it("array option is invalid", () => { + assert.throws(() => { + validateBoolOption("test", [], false); }); }); - }; - - testBoolOption(validateLooseOption); - testBoolOption(validateSpecOption); - testBoolOption(validateForceAllTransformsOption); + }); describe("checkDuplicateIncludeExcludes", function() { it("should throw if duplicate names in both", function() { diff --git a/experimental/babel-preset-env/yarn.lock b/experimental/babel-preset-env/yarn.lock index ea01c3ff96..059226a7d6 100644 --- a/experimental/babel-preset-env/yarn.lock +++ b/experimental/babel-preset-env/yarn.lock @@ -558,6 +558,14 @@ babel-helper-regex@^6.24.1: babel-types "^6.24.1" lodash "^4.2.0" +babel-helper-regex@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + babel-helper-remap-async-to-generator@7.0.0-alpha.16: version "7.0.0-alpha.16" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-7.0.0-alpha.16.tgz#3c68be8d7bebe6e64bfcd0d9a21553e859a5dc07" @@ -709,6 +717,10 @@ babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" +babel-plugin-syntax-async-generators@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-7.0.0-beta.0.tgz#a89061e968d4f4c2ee2f8a5b9c84eed19ec48488" + babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" @@ -757,10 +769,18 @@ babel-plugin-syntax-function-bind@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" +babel-plugin-syntax-object-rest-spread@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-7.0.0-beta.0.tgz#34a1eee484acfb0a89effc364e386a8d769286eb" + babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" +babel-plugin-syntax-optional-catch-binding@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-optional-catch-binding/-/babel-plugin-syntax-optional-catch-binding-7.0.0-beta.0.tgz#9c92545c42865954c544f480648e179ba15757fb" + babel-plugin-syntax-trailing-function-commas@7.0.0-alpha.16: version "7.0.0-alpha.16" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-alpha.16.tgz#daed195b88dcc26db401d51a58d346808b8e4585" @@ -773,6 +793,13 @@ babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" +babel-plugin-transform-async-generator-functions@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-7.0.0-beta.0.tgz#df506a7b90fe7a707f8ca8f309435df6b651ccf4" + dependencies: + babel-helper-remap-async-to-generator "7.0.0-beta.0" + babel-plugin-syntax-async-generators "7.0.0-beta.0" + babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" @@ -1327,6 +1354,12 @@ babel-plugin-transform-new-target@7.0.0-beta.0: version "7.0.0-beta.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-new-target/-/babel-plugin-transform-new-target-7.0.0-beta.0.tgz#0ded2d30b0e889a2916384d4955de96ddd2c2764" +babel-plugin-transform-object-rest-spread@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-7.0.0-beta.0.tgz#51b6cabe5b55dc63d4fe0287b3df23a7691b11d4" + dependencies: + babel-plugin-syntax-object-rest-spread "7.0.0-beta.0" + babel-plugin-transform-object-rest-spread@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" @@ -1334,6 +1367,12 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-optional-catch-binding@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-optional-catch-binding/-/babel-plugin-transform-optional-catch-binding-7.0.0-beta.0.tgz#363bcd26e133dd28ba1eb9b2680d1bf99c250294" + dependencies: + babel-plugin-syntax-optional-catch-binding "7.0.0-beta.0" + babel-plugin-transform-regenerator@7.0.0-alpha.16: version "7.0.0-alpha.16" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-7.0.0-alpha.16.tgz#892ccde496b9187c8517ca01eb1e86b7636e58ea" @@ -1371,6 +1410,13 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-plugin-transform-unicode-property-regex@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-unicode-property-regex/-/babel-plugin-transform-unicode-property-regex-2.0.5.tgz#24922190f9598384d258a6c8e7409309dc6f3898" + dependencies: + babel-helper-regex "^6.26.0" + regexpu-core "^4.1.3" + babel-polyfill@7.0.0-alpha.16: version "7.0.0-alpha.16" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-7.0.0-alpha.16.tgz#3cd865f5eb18dd065916fac33aafcf4617ca2956" @@ -1530,6 +1576,13 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + babel-template@7.0.0-alpha.16: version "7.0.0-alpha.16" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-alpha.16.tgz#f8bec2b5074e150c47b415d13db231b15e45598d" @@ -1625,6 +1678,15 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.2.0" to-fast-properties "^1.0.1" +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + babylon@7.0.0-beta.17: version "7.0.0-beta.17" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.17.tgz#2aad4d6764f409dfb3ac216d855dc93d70d37911" @@ -1633,14 +1695,14 @@ babylon@7.0.0-beta.22: version "7.0.0-beta.22" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.22.tgz#74f0ad82ed7c7c3cfeab74cf684f815104161b65" -babylon@^6.11.0, babylon@^6.17.4: - version "6.17.4" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" - -babylon@^6.15.0, babylon@^6.17.0: +babylon@^6.11.0, babylon@^6.15.0, babylon@^6.17.0: version "6.17.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" +babylon@^6.17.4: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" + balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -1694,7 +1756,14 @@ browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" -browserslist@^2.1.2, browserslist@^2.4.0: +browserslist@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" + dependencies: + caniuse-lite "^1.0.30000670" + electron-to-chromium "^1.3.11" + +browserslist@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" dependencies: @@ -1739,9 +1808,13 @@ camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" +caniuse-lite@^1.0.30000670: + version "1.0.30000676" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000676.tgz#1e962123f48073f0c51c4ea0651dd64d25786498" + caniuse-lite@^1.0.30000718: - version "1.0.30000721" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000721.tgz#931a21a7bd85016300328d21f126d84b73437d35" + version "1.0.30000733" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000733.tgz#ebfc48254117cc0c66197a4536cb4397a6cfbccd" caseless@~0.11.0: version "0.11.0" @@ -1957,9 +2030,9 @@ commoner@^0.10.1: q "^1.1.2" recast "^0.11.17" -compat-table@kangax/compat-table#d88c80ea6dcbc7064112eb46bb020718107892f7: +compat-table@kangax/compat-table#b8477cc0f6d65c000c46213e654d19f350de9fa8: version "0.0.0" - resolved "https://codeload.github.com/kangax/compat-table/tar.gz/d88c80ea6dcbc7064112eb46bb020718107892f7" + resolved "https://codeload.github.com/kangax/compat-table/tar.gz/b8477cc0f6d65c000c46213e654d19f350de9fa8" dependencies: babel-core latest babel-polyfill latest @@ -2231,9 +2304,13 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" +electron-to-chromium@^1.3.11: + version "1.3.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc" + electron-to-chromium@^1.3.18: - version "1.3.19" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.19.tgz#73d97b0e8b05aa776cedf3cdce7fdc0538037675" + version "1.3.21" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2" elegant-spinner@^1.0.1: version "1.0.1" @@ -4204,14 +4281,28 @@ regenerate-unicode-properties@^5.0.6: dependencies: regenerate "^1.3.2" +regenerate-unicode-properties@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-5.1.1.tgz#f5b947b5b7514b79ce58a756659724fa9444c06b" + dependencies: + regenerate "^1.3.2" + regenerate@^1.2.1, regenerate@^1.3.2, regenerate@latest: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" +regenerate@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + regenerator-transform@0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.0.tgz#f9ab3eac9cc2de38431d996a6a8abf1c50f2e459" @@ -4254,6 +4345,17 @@ regexpu-core@^4.0.2: unicode-match-property-ecmascript "^1.0.1" unicode-match-property-value-ecmascript "^1.0.0" +regexpu-core@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.1.3.tgz#fb81616dbbc2a917a7419b33f8379144f51eb8d0" + dependencies: + regenerate "^1.3.3" + regenerate-unicode-properties "^5.1.1" + regjsgen "^0.3.0" + regjsparser "^0.2.1" + unicode-match-property-ecmascript "^1.0.3" + unicode-match-property-value-ecmascript "^1.0.1" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -4296,7 +4398,7 @@ replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" -request@2.79.0: +request@2.79.0, request@^2.55.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -4321,7 +4423,7 @@ request@2.79.0: tunnel-agent "~0.4.1" uuid "^3.0.0" -request@^2.55.0, request@^2.81.0: +request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -4784,7 +4886,7 @@ through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -to-fast-properties@^1.0.1: +to-fast-properties@^1.0.1, to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -4881,6 +4983,10 @@ unicode-canonical-property-names-ecmascript@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.0.tgz#20068aef4ada99ea2a80bf3ff8299a4db3e5bed0" +unicode-canonical-property-names-ecmascript@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.2.tgz#08ef9ec454392fc5ed99b08a70524ae3881c0306" + unicode-match-property-ecmascript@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.1.tgz#f380567fb895cc649828bea3a524fa34f4feb9da" @@ -4888,14 +4994,29 @@ unicode-match-property-ecmascript@^1.0.1: unicode-canonical-property-names-ecmascript "^1.0.0" unicode-property-aliases-ecmascript "^1.0.1" +unicode-match-property-ecmascript@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.3.tgz#db9b1cb4ffc67e0c5583780b1b59370e4cbe97b9" + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.2" + unicode-property-aliases-ecmascript "^1.0.3" + unicode-match-property-value-ecmascript@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.0.tgz#393fa3e8baf4de2c415b95a8d7338587e3e563be" +unicode-match-property-value-ecmascript@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.1.tgz#fea059120a016f403afd3bf586162b4db03e0604" + unicode-property-aliases-ecmascript@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.2.tgz#b495f544c79c2a85cf3083c907c884ef154be1a0" +unicode-property-aliases-ecmascript@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.3.tgz#ac3522583b9e630580f916635333e00c5ead690d" + universalify@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778"