diff --git a/package.json b/package.json index 2aca583a8d5..fa8ac203e47 100644 --- a/package.json +++ b/package.json @@ -23,22 +23,11 @@ "@babel/plugin-transform-modules-commonjs": "^7.0.0", "@babel/plugin-transform-react-jsx": "^7.0.0", "@babel/preset-env": "^7.0.0", + "@babel/runtime": "^7.0.0", "@babel/template": "^7.0.0", "@babel/traverse": "^7.0.0", "@babel/types": "^7.0.0", "ansi-to-html": "^0.6.4", - "babel-code-frame": "^6.26.0", - "babel-core": "^6.25.0", - "babel-generator": "^6.25.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", - "babel-plugin-transform-flow-strip-types": "^6.22.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-preset-env": "^1.7.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.17.4", "babylon-walk": "^1.0.2", "browserslist": "^3.2.6", "chalk": "^2.1.0", @@ -84,11 +73,14 @@ "ws": "^5.1.1" }, "devDependencies": { + "@babel/cli": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/preset-flow": "^7.0.0", + "@babel/register": "^7.0.0", "@vue/component-compiler-utils": "^2.0.0", - "babel-cli": "^6.26.0", - "babel-plugin-transform-async-super": "^1.0.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", + "babel-core": "^6.26.3", + "babel-preset-env": "^1.7.0", + "babylon": "^6.18.0", "bsb-js": "^1.0.1", "codecov": "^3.0.0", "coffeescript": "^2.0.3", diff --git a/src/.babelrc b/src/.babelrc index 9a4ed746bb7..b42df74e6ff 100644 --- a/src/.babelrc +++ b/src/.babelrc @@ -1,9 +1,9 @@ { - "presets": [["env", { + "presets": [["@babel/preset-env", { "targets": { "node": "6" } }]], - "plugins": ["transform-async-super"], + "plugins": ["@babel/plugin-transform-runtime"], "ignore": ["builtins"] } diff --git a/src/assets/JSAsset.js b/src/assets/JSAsset.js index 8c8fcdded8b..e39e72f0cd4 100644 --- a/src/assets/JSAsset.js +++ b/src/assets/JSAsset.js @@ -5,6 +5,7 @@ const collectDependencies = require('../visitors/dependencies'); const walk = require('babylon-walk'); const Asset = require('../Asset'); // const babylon = require('@babel/parser'); +const localRequire = require('../utils/localRequire'); const insertGlobals = require('../visitors/globals'); const fsVisitor = require('../visitors/fs'); const envVisitor = require('../visitors/env'); @@ -62,7 +63,7 @@ class JSAsset extends Asset { async getParserOptions() { // Babylon options. We enable a few plugins by default. - const options = { + let options = { parserOpts: { filename: this.name, allowReturnOutsideFunction: true, @@ -77,19 +78,38 @@ class JSAsset extends Asset { // Check if there is a babel config file. If so, determine which parser plugins to enable this.babelConfig = await babel.getConfig(this); - Object.assign(options, this.babelConfig); - // if (this.babelConfig) { - // const file = new BabelFile(this.babelConfig); - // options.plugins.push(...file.parserOpts.plugins); - // } + if (this.babelConfig) { + if (this.babelConfig.babelVersion === 6) { + options.parserOpts.tokens = true; + options = options.parserOpts; + } + + Object.assign(options, this.babelConfig); + + let babelVersion = this.babelConfig.babelVersion; + Object.defineProperty(options, 'babelVersion', { + value: babelVersion, + configurable: true + }); + + // if (this.babelConfig) { + // const file = new BabelFile(this.babelConfig); + // options.plugins.push(...file.parserOpts.plugins); + // } + } return options; } async parse(code) { const options = await this.getParserOptions(); - // return babylon.parse(code, options); - return babelCore.parse(code, options); + + if (options.babelVersion === 6) { + let babylon = await localRequire('babylon', this.name); + return babylon.parse(code, options); + } else { + return babelCore.parse(code, options); + } } traverse(visitor) { diff --git a/src/packagers/JSConcatPackager.js b/src/packagers/JSConcatPackager.js index 7b5649568c6..139ae89bf9b 100644 --- a/src/packagers/JSConcatPackager.js +++ b/src/packagers/JSConcatPackager.js @@ -530,10 +530,11 @@ class JSConcatPackager extends Packager { // Add source map url if a map bundle exists let mapBundle = this.bundle.siblingBundlesMap.get('map'); if (mapBundle) { - output += `\n//# sourceMappingURL=${urlJoin( + let mapUrl = urlJoin( this.options.publicURL, path.basename(mapBundle.name) - )}`; + ); + output += `\n//# sourceMappingURL=${mapUrl}`; } } diff --git a/src/packagers/JSPackager.js b/src/packagers/JSPackager.js index ed2f8c17a74..3cb5585e302 100644 --- a/src/packagers/JSPackager.js +++ b/src/packagers/JSPackager.js @@ -225,12 +225,11 @@ class JSPackager extends Packager { // Add source map url if a map bundle exists let mapBundle = this.bundle.siblingBundlesMap.get('map'); if (mapBundle) { - await this.write( - `\n//# sourceMappingURL=${urlJoin( - this.options.publicURL, - path.basename(mapBundle.name) - )}` + let mapUrl = urlJoin( + this.options.publicURL, + path.basename(mapBundle.name) ); + await this.write(`\n//# sourceMappingURL=${mapUrl}`); } } await this.dest.end(); diff --git a/src/scope-hoisting/concat.js b/src/scope-hoisting/concat.js index ffc46a5134b..2f15993047e 100644 --- a/src/scope-hoisting/concat.js +++ b/src/scope-hoisting/concat.js @@ -1,5 +1,5 @@ const {relative} = require('path'); -const template = require('babel-template'); +const template = require('@babel/template').default; const t = require('@babel/types'); const traverse = require('@babel/traverse').default; const generate = require('@babel/generator').default; diff --git a/src/scope-hoisting/hoist.js b/src/scope-hoisting/hoist.js index 3e6cb20f9f8..e96664e91b4 100644 --- a/src/scope-hoisting/hoist.js +++ b/src/scope-hoisting/hoist.js @@ -1,8 +1,7 @@ const path = require('path'); -const matchesPattern = require('../visitors/matches-pattern'); const mm = require('micromatch'); const t = require('@babel/types'); -const template = require('babel-template'); +const template = require('@babel/template').default; const rename = require('./renamer'); const {getName, getIdentifier, getExportIdentifier} = require('./utils'); @@ -175,20 +174,20 @@ module.exports = { return; } - if (matchesPattern(path.node, 'module.exports')) { + if (t.matchesPattern(path.node, 'module.exports')) { path.replaceWith(getExportsIdentifier(asset)); asset.cacheData.isCommonJS = true; } - if (matchesPattern(path.node, 'module.id')) { + if (t.matchesPattern(path.node, 'module.id')) { path.replaceWith(t.stringLiteral(asset.id)); } - if (matchesPattern(path.node, 'module.hot')) { + if (t.matchesPattern(path.node, 'module.hot')) { path.replaceWith(t.identifier('null')); } - if (matchesPattern(path.node, 'module.bundle')) { + if (t.matchesPattern(path.node, 'module.bundle')) { path.replaceWith(t.identifier('require')); } }, @@ -332,7 +331,7 @@ module.exports = { ); } - if (matchesPattern(callee, 'require.resolve')) { + if (t.matchesPattern(callee, 'require.resolve')) { path.replaceWith( REQUIRE_RESOLVE_CALL_TEMPLATE({ ID: t.stringLiteral(asset.id), diff --git a/src/transforms/babel.js b/src/transforms/babel.js index feb4b5e8c0f..645b77c7449 100644 --- a/src/transforms/babel.js +++ b/src/transforms/babel.js @@ -2,8 +2,8 @@ const presetEnv = require('@babel/preset-env'); const getTargetEngines = require('../utils/getTargetEngines'); const localRequire = require('../utils/localRequire'); const path = require('path'); -// const {util: babelUtils} = require('@babel/core'); const fs = require('../utils/fs'); +const babelASTConverter = require('./babelASTConverter'); const NODE_MODULES = `${path.sep}node_modules${path.sep}`; const ENV_PLUGINS = require('@babel/preset-env/data/plugins'); @@ -27,25 +27,34 @@ const JSX_PRAGMA = { hyperapp: 'h' }; -async function babelTransform(asset) { - let config = await getConfig(asset); +async function babelTransform(asset, version) { + let config = await getConfig(asset, version); if (!config) { return; } await asset.parseIfNeeded(); + // Pre-Transform Babel 6 + if (config.babelVersion && config.babelVersion === 6) { + let babel6 = await localRequire('babel-core', asset.name); + let res = babel6.transformFromAst(asset.ast, asset.contents, config); + if (res.ast) { + asset.ast = res.ast; + asset.isAstDirty = true; + } + + asset.ast = babelASTConverter(asset.ast, 6); + + return babelTransform(asset, 7); + } + // If this is an internally generated config, use our internal @babel/core, // otherwise require a local version from the package we're compiling. let babel = config.internal ? require('@babel/core') : await localRequire('@babel/core', asset.name); - // TODO: support other versions of babel - // if (parseInt(babel.version, 10) !== 6) { - // throw new Error(`Unsupported babel version: ${babel.version}`); - // } - let res = babel.transformFromAst(asset.ast, asset.contents, config); if (res.ast) { asset.ast = res.ast; @@ -55,8 +64,8 @@ async function babelTransform(asset) { module.exports = babelTransform; -async function getConfig(asset) { - let config = await getBabelConfig(asset); +async function getConfig(asset, version) { + let config = await getBabelConfig(asset, version); if (config) { config.code = false; config.ast = true; @@ -70,6 +79,14 @@ async function getConfig(asset) { value: internal, configurable: true }); + + // Hide config version from babel + let babelVersion = config.babelVersion; + delete config.babelVersion; + Object.defineProperty(config, 'babelVersion', { + value: babelVersion, + configurable: true + }); } return config; @@ -77,7 +94,7 @@ async function getConfig(asset) { babelTransform.getConfig = getConfig; -async function getBabelConfig(asset) { +async function getBabelConfig(asset, version) { // If asset is marked as an ES6 modules, this is a second pass after dependencies are extracted. // Just compile modules to CommonJS. if (asset.isES6Module) { @@ -88,7 +105,9 @@ async function getBabelConfig(asset) { } if (asset.babelConfig) { - return asset.babelConfig; + if (asset.babelConfig.babelVersion === version) { + return asset.babelConfig; + } } // Consider the module source code rather than precompiled if the resolver @@ -99,7 +118,14 @@ async function getBabelConfig(asset) { !asset.name.includes(NODE_MODULES); // Try to resolve a .babelrc file. If one is found, consider the module source code. - let babelrc = await getBabelRc(asset, isSource); + let babelrc = null; + if (!asset.babelConfig) { + babelrc = await getBabelRc(asset, isSource); + if (babelrc && babelrc.babelVersion === 6) { + return babelrc; + } + } + isSource = isSource || !!babelrc; let envConfig = await getEnvConfig(asset, isSource); @@ -129,15 +155,21 @@ async function getBabelConfig(asset) { // Add JSX config if it isn't already specified in the babelrc let hasReact = - hasPlugin(babelrc.presets, 'react') || - hasPlugin(babelrc.plugins, 'transform-react-jsx'); + hasPlugin(babelrc.presets, ['react', '@babel/preset-react']) || + hasPlugin(babelrc.plugins, [ + 'transform-react-jsx', + '@babel/plugin-transform-react-jsx' + ]); if (!hasReact) { mergeConfigs(babelrc, jsxConfig); } // Add Flow stripping config if it isn't already specified in the babelrc - let hasFlow = hasPlugin(babelrc.plugins, 'transform-flow-strip-types'); + let hasFlow = hasPlugin(babelrc.plugins, [ + 'transform-flow-strip-types', + '@babel/plugin-transform-flow-strip-types' + ]); if (!hasFlow && flowConfig) { mergeConfigs(babelrc, flowConfig); @@ -177,14 +209,40 @@ function mergeConfigs(a, b) { return a; } -function hasPlugin(arr, plugin) { - return Array.isArray(arr) && arr.some(p => getPluginName(p) === plugin); +function hasPlugin(arr, plugins) { + return ( + Array.isArray(arr) && arr.some(p => plugins.includes(getPluginName(p))) + ); } function getPluginName(p) { return Array.isArray(p) ? p[0] : p; } +function testPluginArrayForBabelScope(plugins) { + for (let plugin of plugins) { + if (getPluginName(plugin).startsWith('@babel/')) { + return true; + } + } + return false; +} + +function isBabel7Config(babelrc = {}) { + if (!babelrc.presets && !babelrc.presets) { + return true; + } + + if ( + (babelrc.presets && testPluginArrayForBabelScope(babelrc.presets)) || + (babelrc.plugins && testPluginArrayForBabelScope(babelrc.plugins)) + ) { + return true; + } + + return false; +} + /** * Finds a .babelrc for an asset. By default, .babelrc files inside node_modules are not used. * However, there are some exceptions: @@ -192,6 +250,8 @@ function getPluginName(p) { * - the `source` field in package.json is used by the resolver */ async function getBabelRc(asset, isSource) { + let babelrc = null; + // Support legacy browserify packages let pkg = await asset.getPackage(); let browserify = pkg && pkg.browserify; @@ -203,21 +263,26 @@ async function getBabelRc(asset, isSource) { // If specified as an array, override the config with the one specified if (Array.isArray(babelify) && babelify[1]) { - return babelify[1]; + babelrc = babelify[1]; } // Otherwise, return the .babelrc if babelify was found - return babelify ? await findBabelRc(asset) : null; + if (!babelrc && babelify) { + babelrc = await findBabelRc(asset); + } } // If this asset is not in node_modules, always use the .babelrc - if (isSource) { - return await findBabelRc(asset); + if (!babelrc && isSource) { + babelrc = await findBabelRc(asset); } // Otherwise, don't load .babelrc for node_modules. // See https://github.com/parcel-bundler/parcel/issues/13. - return null; + if (babelrc) { + babelrc.babelVersion = isBabel7Config(babelrc) ? 7 : 6; + } + return babelrc; } async function findBabelRc(asset) { @@ -226,15 +291,16 @@ async function findBabelRc(asset) { }); } -function shouldIgnoreBabelrc(filename, babelrc) { - return false; +/*function shouldIgnoreBabelrc(filename, babelrc) { // Determine if we should ignore this babelrc file. We do this here instead of // letting @babel/core handle it because this config might be merged with our // autogenerated one later which shouldn't be ignored. - // let ignore = babelUtils.arrayify(babelrc.ignore, babelUtils.regexify); - // let only = - // babelrc.only && babelUtils.arrayify(babelrc.only, babelUtils.regexify); - // return babelUtils.shouldIgnore(filename, ignore, only); + let ignore = babelUtils.arrayify(babelrc.ignore, babelUtils.regexify); + let only = babelrc.only && babelUtils.arrayify(babelrc.only, babelUtils.regexify); + return babelUtils.shouldIgnore(filename, ignore, only); +}*/ +function shouldIgnoreBabelrc() { + return false; } /** @@ -288,13 +354,6 @@ async function getEnvPlugins(targets, useBuiltIns = false) { } ).plugins; - // @babel/preset-env version 6.x does not cover object-rest-spread so always - // add it. - // plugins.push([ - // require('babel-plugin-transform-object-rest-spread'), - // {useBuiltIns} - // ]); - envCache.set(key, plugins); return plugins; } diff --git a/src/transforms/babelASTConverter.js b/src/transforms/babelASTConverter.js new file mode 100644 index 00000000000..2653a2c6a51 --- /dev/null +++ b/src/transforms/babelASTConverter.js @@ -0,0 +1,110 @@ +const traverse = require('@babel/traverse').default; + +// Convert between babel 7 and babel 6 AST +// More info on the AST Changes: https://babeljs.io/docs/en/v7-migration-api#ast-changes +function babel7toBabel6(ast) { + const visitor = { + ArrowFunctionExpression: node => { + node.expression = node.body.type !== 'BlockStatement'; + }, + ExistsTypeAnnotation: node => { + node.type = 'ExistentialTypeParam'; + }, + NumberLiteralTypeAnnotation: node => { + node.type = 'NumericLiteralTypeAnnotation'; + }, + ObjectTypeIndexer: node => { + node.end++; + node.loc.end.column++; + }, + ForOfStatement: node => { + node.type = 'ForAwaitStatement'; + delete node.await; + }, + SpreadElement: (node, path) => { + if ( + path.parentPath.isObjectExpression() || + path.parentPath.isArrayExpression() + ) { + node.type = 'SpreadProperty'; + } + }, + RestElement: (node, path) => { + if ( + path.parentPath.isObjectPattern() || + path.parentPath.isArrayPattern() + ) { + node.type = 'RestProperty'; + } + } + }; + + traverse(ast, { + enter(path) { + if (path.node.variance && path.node.variance.type === 'Variance') { + path.node.variance = path.node.variance.kind; + } + + let visitorFunc = visitor[path.node.type]; + if (visitorFunc) { + visitorFunc(path.node, path); + } + } + }); + + return ast; +} + +function babel6toBabel7(ast) { + const visitor = { + ArrowFunctionExpression: node => { + delete node.expression; + }, + ExistentialTypeParam: node => { + node.type = 'ExistsTypeAnnotation'; + }, + NumericLiteralTypeAnnotation: node => { + node.type = 'NumberLiteralTypeAnnotation'; + }, + ObjectTypeIndexer: node => { + node.end--; + node.loc.end.column--; + }, + ForAwaitStatement: node => { + node.type = 'ForOfStatement'; + node.await = true; + }, + SpreadProperty: node => { + node.type = 'SpreadElement'; + }, + RestProperty: node => { + node.type = 'RestElement'; + } + }; + + traverse(ast, { + enter(path) { + if (path.node.variance && typeof path.node.variance === 'string') { + path.node.variance = { + type: 'VarianceNode', + kind: path.node.variance + }; + } + + let visitorFunc = visitor[path.node.type]; + if (visitorFunc) { + visitorFunc(path.node); + } + } + }); + + return ast; +} + +module.exports = function(ast, version) { + if (![6, 7].includes(version)) { + throw new Error('This convertor only supports Babel 6 and 7 ASTs'); + } + + return version === 7 ? babel7toBabel6(ast) : babel6toBabel7(ast); +}; diff --git a/src/visitors/dependencies.js b/src/visitors/dependencies.js index 95fea2315cd..a3eabbf26e6 100644 --- a/src/visitors/dependencies.js +++ b/src/visitors/dependencies.js @@ -1,9 +1,8 @@ const types = require('@babel/types'); -const template = require('babel-template'); +const template = require('@babel/template').default; const traverse = require('@babel/traverse').default; const urlJoin = require('../utils/urlJoin'); const isURL = require('../utils/is-url'); -const matchesPattern = require('./matches-pattern'); const nodeBuiltins = require('node-libs-browser'); const requireTemplate = template('require("_bundle_loader")'); @@ -66,7 +65,7 @@ module.exports = { const isRegisterServiceWorker = types.isStringLiteral(args[0]) && - matchesPattern(callee, serviceWorkerPattern); + types.matchesPattern(callee, serviceWorkerPattern); if (isRegisterServiceWorker) { // Treat service workers as an entry point so filenames remain consistent across builds. diff --git a/src/visitors/env.js b/src/visitors/env.js index e30415ff2a8..ea58fecd5da 100644 --- a/src/visitors/env.js +++ b/src/visitors/env.js @@ -1,10 +1,9 @@ const types = require('@babel/types'); -const matchesPattern = require('./matches-pattern'); module.exports = { MemberExpression(node, asset) { // Inline environment variables accessed on process.env - if (matchesPattern(node.object, 'process.env')) { + if (types.matchesPattern(node.object, 'process.env')) { let key = types.toComputedKey(node); if (types.isStringLiteral(key)) { let val = types.valueToNode(process.env[key.value]); diff --git a/src/visitors/fs.js b/src/visitors/fs.js index 733dc9d6fb3..46f121d501c 100644 --- a/src/visitors/fs.js +++ b/src/visitors/fs.js @@ -1,7 +1,7 @@ const t = require('@babel/types'); const Path = require('path'); const fs = require('fs'); -const template = require('babel-template'); +const template = require('@babel/template').default; const logger = require('../Logger'); const bufferTemplate = template('Buffer(CONTENT, ENC)'); diff --git a/src/visitors/matches-pattern.js b/src/visitors/matches-pattern.js deleted file mode 100644 index e980acd269b..00000000000 --- a/src/visitors/matches-pattern.js +++ /dev/null @@ -1,36 +0,0 @@ -const types = require('@babel/types'); - -// from @babel/types. remove when we upgrade to babel 7. -// https://github.com/babel/babel/blob/0189b387026c35472dccf45d14d58312d249f799/packages/@babel/types/src/index.js#L347 -module.exports = function matchesPattern(member, match, allowPartial) { - // not a member expression - if (!types.isMemberExpression(member)) return false; - - const parts = Array.isArray(match) ? match : match.split('.'); - const nodes = []; - - let node; - for (node = member; types.isMemberExpression(node); node = node.object) { - nodes.push(node.property); - } - nodes.push(node); - - if (nodes.length < parts.length) return false; - if (!allowPartial && nodes.length > parts.length) return false; - - for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) { - const node = nodes[j]; - let value; - if (types.isIdentifier(node)) { - value = node.name; - } else if (types.isStringLiteral(node)) { - value = node.value; - } else { - return false; - } - - if (parts[i] !== value) return false; - } - - return true; -}; diff --git a/test/.babelrc b/test/.babelrc index 89eaace66ad..4465e6da664 100644 --- a/test/.babelrc +++ b/test/.babelrc @@ -1,8 +1,9 @@ { - "presets": [["env", { + "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]], - "ignore": ["integration", "input"] + "plugins": ["@babel/plugin-transform-runtime"], + "ignore": ["integration", "input", "dist"] } diff --git a/test/babel-register.js b/test/babel-register.js index acd9f619def..881ee3dd2f6 100644 --- a/test/babel-register.js +++ b/test/babel-register.js @@ -1,3 +1,3 @@ if (parseInt(process.versions.node, 10) < 8) { - require('babel-register'); + require('@babel/register'); } diff --git a/test/babel.js b/test/babel.js new file mode 100644 index 00000000000..e2e45d3e72a --- /dev/null +++ b/test/babel.js @@ -0,0 +1,128 @@ +const babelCore = require('@babel/core'); +const fs = require('../src/utils/fs'); +const BabelASTConvertor = require('../src/transforms/babelASTConverter'); +const path = require('path'); +const BabelFlowPreset = require('@babel/preset-flow'); +const babelPresetEnv = require('@babel/preset-env'); +const traverse = require('@babel/traverse').default; +const assert = require('assert'); + +describe.only('Babel', function() { + let ast; + before(async function() { + const options = { + parserOpts: { + allowReturnOutsideFunction: true, + allowHashBang: true, + ecmaVersion: Infinity, + strictMode: false, + sourceType: 'module', + locations: true, + tokens: true + }, + presets: [BabelFlowPreset, babelPresetEnv] + }; + + let code = await fs.readFile( + path.join(__dirname, './integration/babel-ast-conversion/index.js'), + 'utf8' + ); + + ast = babelCore.parse(code, options); + }); + + it('Should be able to convert Babel 7 => Babel 6 AST', async function() { + ast = BabelASTConvertor(ast, 7); + + let elementCount = {}; + traverse(ast, { + enter(path) { + if (!elementCount[path.node.type]) { + elementCount[path.node.type] = 0; + } + elementCount[path.node.type]++; + + if (path.node.variance) { + assert(!path.node.variance.kind); + } + + if (path.node.type === 'ForAwaitStatement') { + assert(!path.node.await); + } + + if (path.node.type === 'ArrowFunctionExpression') { + assert(path.node.expression !== undefined); + } + } + }); + + // Check Renaming/Removal of Nodes + assert.equal(elementCount['ExistsTypeAnnotation'], undefined); + assert.equal(elementCount['ExistentialTypeParam'], 1); + + assert.equal(elementCount['NumberLiteralTypeAnnotation'], undefined); + assert.equal(elementCount['NumericLiteralTypeAnnotation'], 1); + + assert.equal(elementCount['ForOfStatement'], undefined); + assert.equal(elementCount['ForAwaitStatement'], 1); + + assert.equal(elementCount['SpreadElement'], undefined); + assert.equal(elementCount['SpreadProperty'], 2); + + assert.equal(elementCount['RestElement'], undefined); + assert.equal(elementCount['RestProperty'], 2); + + // Check node count + assert.equal(elementCount['TypeParameter'], 6); + + assert.equal(elementCount['ArrowFunctionExpression'], 2); + }); + + it('Should be able to convert Babel 6 => Babel 7 AST', async function() { + ast = BabelASTConvertor(ast, 6); + + let elementCount = {}; + traverse(ast, { + enter(path) { + if (!elementCount[path.node.type]) { + elementCount[path.node.type] = 0; + } + elementCount[path.node.type]++; + + if (path.node.variance) { + assert(!!path.node.variance.kind); + assert.equal(path.node.variance.type, 'VarianceNode'); + } + + if (path.node.type === 'ForOfStatement') { + assert(path.node.await); + } + + if (path.node.type === 'ArrowFunctionExpression') { + assert(path.node.expression === undefined); + } + } + }); + + // Check Renaming/Removal of Nodes + assert.equal(elementCount['ExistsTypeAnnotation'], 1); + assert.equal(elementCount['ExistentialTypeParam'], undefined); + + assert.equal(elementCount['NumberLiteralTypeAnnotation'], 1); + assert.equal(elementCount['NumericLiteralTypeAnnotation'], undefined); + + assert.equal(elementCount['ForOfStatement'], 1); + assert.equal(elementCount['ForAwaitStatement'], undefined); + + assert.equal(elementCount['SpreadElement'], 2); + assert.equal(elementCount['SpreadProperty'], undefined); + + assert.equal(elementCount['RestElement'], 2); + assert.equal(elementCount['RestProperty'], undefined); + + // Check node count + assert.equal(elementCount['TypeParameter'], 6); + + assert.equal(elementCount['ArrowFunctionExpression'], 2); + }); +}); diff --git a/test/integration/babel-6-compatibility/.babelrc b/test/integration/babel-6-compatibility/.babelrc new file mode 100644 index 00000000000..002b4aa0d58 --- /dev/null +++ b/test/integration/babel-6-compatibility/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env"] +} diff --git a/test/integration/babel-6-compatibility/index.js b/test/integration/babel-6-compatibility/index.js new file mode 100644 index 00000000000..9e0528522b0 --- /dev/null +++ b/test/integration/babel-6-compatibility/index.js @@ -0,0 +1,3 @@ +export default function () { + return 3; +} diff --git a/test/integration/babel-ast-conversion/index.js b/test/integration/babel-ast-conversion/index.js new file mode 100644 index 00000000000..fb8f4fb3c9a --- /dev/null +++ b/test/integration/babel-ast-conversion/index.js @@ -0,0 +1,29 @@ +// @flow + +type T = 0; +type A = B<*>; + +const hello = () => { + return 'this is an arrow function'; +}; + +async () => { + for await (i of []) { + // Do something I guess... + } +} + +let { x, y, ...c } = obj; +let [...l] = something; + +let helloSpread = {...{ + one: 1 +}} + +let helloArray = [...[]]; + +var a: { [a: number]: string; }; + +class C<+T,-U> {} +function f<+T,-U>() {} +type T<+T,-U> = {} \ No newline at end of file diff --git a/test/integration/babel-polyfill/.eslintrc.json b/test/integration/babel-polyfill/.eslintrc.json deleted file mode 100644 index f89e231fa93..00000000000 --- a/test/integration/babel-polyfill/.eslintrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../.eslintrc.json", - "parserOptions": { - "sourceType": "module" - } -} \ No newline at end of file diff --git a/test/integration/babel-polyfill/index.js b/test/integration/babel-polyfill/index.js deleted file mode 100644 index b126e3d152f..00000000000 --- a/test/integration/babel-polyfill/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import 'babel-polyfill'; - -export async function Bar() {} diff --git a/test/integration/babel-polyfill/package.json b/test/integration/babel-polyfill/package.json deleted file mode 100644 index 9f80ea9f95c..00000000000 --- a/test/integration/babel-polyfill/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "parcel-test-babel-polyfill-browserslist", - "private": true, - "browserslist": ["last 2 Chrome versions"] -} diff --git a/test/integration/babel/.babelrc b/test/integration/babel/.babelrc index 15edf6beb98..60953341055 100644 --- a/test/integration/babel/.babelrc +++ b/test/integration/babel/.babelrc @@ -1,5 +1,5 @@ { - "presets": [["env", { + "presets": [["@babel/env", { "targets": { "browsers": ["last 2 Chrome versions"] } diff --git a/test/javascript.js b/test/javascript.js index 5621abbfdf1..2d9424d94ce 100644 --- a/test/javascript.js +++ b/test/javascript.js @@ -28,6 +28,17 @@ describe.only('javascript', function() { assert.equal(output.default(), 3); }); + it('should produce a basic JS bundle using Babel 6', async function() { + let b = await bundle( + __dirname + '/integration/babel-6-compatibility/index.js' + ); + + let output = await run(b); + assert.equal(typeof output, 'object'); + assert.equal(typeof output.default, 'function'); + assert.equal(output.default(), 3); + }); + it('should produce a basic JS bundle with object rest spread support', async function() { let b = await bundle( __dirname + '/integration/object-rest-spread/object-rest-spread.js' @@ -951,14 +962,6 @@ describe.only('javascript', function() { assert(file.includes('function Bar')); }); - it('should support splitting babel-polyfill using browserlist', async function() { - await bundle(__dirname + '/integration/babel-polyfill/index.js'); - - let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); - assert(file.includes('async function')); - assert(!file.includes('regenerator')); - }); - it('should support compiling with babel using browserslist for different environments', async function() { async function testBrowserListMultipleEnv(projectBasePath) { // Transpiled destructuring, like r = p.prop1, o = p.prop2, a = p.prop3; @@ -1283,7 +1286,11 @@ describe.only('javascript', function() { { type: 'css', assets: ['index.css'], - childBundles: [] + childBundles: [ + { + type: 'js' + } + ] } ] } @@ -1326,7 +1333,11 @@ describe.only('javascript', function() { { type: 'css', assets: ['index.css'], - childBundles: [] + childBundles: [ + { + type: 'js' + } + ] } ] } @@ -1365,7 +1376,11 @@ describe.only('javascript', function() { { type: 'css', assets: ['index.css'], - childBundles: [] + childBundles: [ + { + type: 'js' + } + ] } ] } diff --git a/yarn.lock b/yarn.lock index 839b73ed704..519eb8ef8e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,22 @@ # yarn lockfile v1 +"@babel/cli@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.0.0.tgz#108b395fd43fff6681d36fb41274df4d8ffeb12e" + dependencies: + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.10" + mkdirp "^0.5.1" + output-file-sync "^2.0.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.0.3" + "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -450,6 +466,14 @@ dependencies: regenerator-transform "^0.13.3" +"@babel/plugin-transform-runtime@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0.tgz#0f1443c07bac16dba8efa939e0c61d6922740062" + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + "@babel/plugin-transform-shorthand-properties@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" @@ -536,6 +560,31 @@ js-levenshtein "^1.1.3" semver "^5.3.0" +"@babel/preset-flow@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + +"@babel/register@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" + dependencies: + core-js "^2.5.7" + find-cache-dir "^1.0.0" + home-or-tmp "^3.0.0" + lodash "^4.17.10" + mkdirp "^0.5.1" + pirates "^4.0.0" + source-map-support "^0.5.9" + +"@babel/runtime@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0.tgz#adeb78fedfc855aa05bc041640f3f6f98e85424c" + dependencies: + regenerator-runtime "^0.12.0" + "@babel/template@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0.tgz#c2bc9870405959c89a9c814376a2ecb247838c80" @@ -716,13 +765,6 @@ any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -878,27 +920,6 @@ aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" -babel-cli@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" - dependencies: - babel-core "^6.26.0" - babel-polyfill "^6.26.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - commander "^2.11.0" - convert-source-map "^1.5.0" - fs-readdir-recursive "^1.0.0" - glob "^7.1.2" - lodash "^4.17.4" - output-file-sync "^1.1.2" - path-is-absolute "^1.0.1" - slash "^1.0.0" - source-map "^0.5.6" - v8flags "^2.1.1" - optionalDependencies: - chokidar "^1.6.1" - babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -907,7 +928,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.25.0, babel-core@^6.26.0: +babel-core@^6.26.0, babel-core@^6.26.3: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" dependencies: @@ -931,7 +952,7 @@ babel-core@^6.25.0, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.7" -babel-generator@^6.18.0, babel-generator@^6.25.0, babel-generator@^6.26.0: +babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: @@ -952,14 +973,6 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" @@ -1067,34 +1080,16 @@ babel-plugin-check-es2015-constants@^6.22.0: 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" + resolved "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -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" + resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 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-super@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-super/-/babel-plugin-transform-async-super-1.0.0.tgz#4d0884df0cad1017271105522b79f78db7892678" - dependencies: - babel-template "^6.26.0" - babel-plugin-transform-async-to-generator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" @@ -1187,7 +1182,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.26.0: +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.2" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" dependencies: @@ -1279,28 +1274,6 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" @@ -1314,14 +1287,6 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" @@ -1417,7 +1382,7 @@ babylon-walk@^1.0.2: babel-types "^6.15.0" lodash.clone "^4.5.0" -babylon@^6.17.4, babylon@^6.18.0: +babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1786,21 +1751,6 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -chokidar@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - chokidar@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" @@ -2058,6 +2008,10 @@ commander@^2.11.0, commander@^2.14.1, commander@^2.9.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" +commander@^2.8.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + commander@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" @@ -2127,7 +2081,7 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" -convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" @@ -2135,10 +2089,14 @@ copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" -core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.4.0: version "2.5.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b" +core-js@^2.5.0, core-js@^2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -3098,6 +3056,14 @@ find-cache-dir@^0.1.1: mkdirp "^0.5.1" pkg-dir "^1.0.0" +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" @@ -3184,7 +3150,7 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" -fs-readdir-recursive@^1.0.0: +fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -3192,7 +3158,7 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0, fsevents@^1.1.2: +fsevents@^1.1.2: version "1.2.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.3.tgz#08292982e7059f6674c93d8b829c1e8604979ac0" dependencies: @@ -3311,6 +3277,17 @@ glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.0.0: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^11.0.1: version "11.5.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" @@ -3426,7 +3403,7 @@ glslify-deps@^1.3.0: map-limit "0.0.1" resolve "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -3587,6 +3564,10 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +home-or-tmp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb" + hosted-git-info@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" @@ -3980,7 +3961,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -4840,6 +4821,12 @@ magic-string@^0.22.4: dependencies: vlq "^0.2.2" +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + dependencies: + pify "^3.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -4903,7 +4890,7 @@ merge2@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" -micromatch@^2.1.5, micromatch@^2.3.11: +micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -5137,6 +5124,10 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" @@ -5205,7 +5196,7 @@ normalize-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -5476,13 +5467,13 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -output-file-sync@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" +output-file-sync@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0" dependencies: - graceful-fs "^4.1.4" + graceful-fs "^4.1.11" + is-plain-obj "^1.1.0" mkdirp "^0.5.1" - object-assign "^4.1.0" p-finally@^1.0.0: version "1.0.0" @@ -5644,12 +5635,24 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pirates@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.0.tgz#850b18781b4ac6ec58a43c9ed9ec5fe6796addbd" + dependencies: + node-modules-regexp "^1.0.0" + pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" dependencies: find-up "^1.0.0" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.0.2.tgz#7b9eaeca35aa4a43d6ebdfd10616c042f9a83acc" @@ -6532,14 +6535,14 @@ regenerate@^1.2.1, regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" -regenerator-runtime@^0.10.5: - 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.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -6718,7 +6721,7 @@ resolve@^1.0.0, resolve@^1.1.5, resolve@^1.1.6, resolve@^1.4.0: dependencies: path-parse "^1.0.5" -resolve@^1.3.2: +resolve@^1.3.2, resolve@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: @@ -6956,6 +6959,10 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" @@ -7032,6 +7039,13 @@ source-map-support@^0.5.0: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@^0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -7647,10 +7661,6 @@ use@^3.1.0: dependencies: kind-of "^6.0.2" -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7676,12 +7686,6 @@ v8-compile-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz#526492e35fc616864284700b7043e01baee09f0a" -v8flags@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - dependencies: - user-home "^1.1.1" - validate-npm-package-license@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"