diff --git a/babel-preset/configs/internal.js b/babel-preset/configs/internal.js deleted file mode 100644 index 53830b0d6..000000000 --- a/babel-preset/configs/internal.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ -'use strict'; - -var resolvePlugins = require('../lib/resolvePlugins'); - -module.exports = function(options) { - // For future internal pipeline usage - return null; -} diff --git a/babel-preset/configs/main.js b/babel-preset/configs/main.js index eb814e6eb..15b3d2b13 100644 --- a/babel-preset/configs/main.js +++ b/babel-preset/configs/main.js @@ -5,55 +5,99 @@ * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. + * + * @format */ 'use strict'; var resolvePlugins = require('../lib/resolvePlugins'); -var base = { - comments: false, - compact: true, - plugins: resolvePlugins([ - 'syntax-async-functions', +const getPreset = (src, options) => { + const plugins = []; + const isNull = src === null || src === undefined; + const hasClass = isNull || src.indexOf('class') !== -1; + const hasForOf = + isNull || (src.indexOf('for') !== -1 && src.indexOf('of') !== -1); + + plugins.push( 'syntax-class-properties', 'syntax-trailing-function-commas', 'transform-class-properties', - 'transform-es2015-function-name', - 'transform-es2015-arrow-functions', 'transform-es2015-block-scoping', - 'transform-es2015-classes', 'transform-es2015-computed-properties', - 'check-es2015-constants', 'transform-es2015-destructuring', - ['transform-es2015-modules-commonjs', { strict: false, allowTopLevelThis: true }], + 'transform-es2015-function-name', + 'transform-es2015-literals', 'transform-es2015-parameters', 'transform-es2015-shorthand-properties', - 'transform-es2015-spread', - 'transform-es2015-template-literals', - 'transform-es2015-literals', 'transform-flow-strip-types', - 'transform-object-assign', - 'transform-object-rest-spread', - 'transform-react-display-name', 'transform-react-jsx', 'transform-regenerator', - ['transform-es2015-for-of', { loose: true }], require('../transforms/transform-regenerator-runtime-insertion'), - require('../transforms/transform-symbol-member'), - ]), -}; + [ + 'transform-es2015-modules-commonjs', + {strict: false, allowTopLevelThis: true}, + ], + ); -var devTools = Object.assign({}, base); -devTools.plugins = devTools.plugins.concat( - resolvePlugins(['transform-react-jsx-source']) -); - - -module.exports = function(options) { - var withDevTools = options.withDevTools; - if (withDevTools == null) { - var env = process.env.BABEL_ENV || process.env.NODE_ENV; - withDevTools = !env || env === 'development'; + if (isNull || src.indexOf('async') !== -1 || src.indexOf('await') !== -1) { + plugins.push('syntax-async-functions'); } - return withDevTools ? devTools : base; + if (hasClass) { + plugins.push('transform-es2015-classes'); + } + if (isNull || src.indexOf('=>') !== -1) { + plugins.push('transform-es2015-arrow-functions'); + } + if (isNull || src.indexOf('const') !== -1) { + plugins.push('check-es2015-constants'); + } + if (isNull || hasClass || src.indexOf('...') !== -1) { + plugins.push('transform-es2015-spread'); + plugins.push('transform-object-rest-spread'); + } + if (isNull || src.indexOf('`') !== -1) { + plugins.push('transform-es2015-template-literals'); + } + if (isNull || src.indexOf('Object.assign') !== -1) { + plugins.push('transform-object-assign'); + } + if (hasForOf) { + plugins.push(['transform-es2015-for-of', {loose: true}]); + } + if (hasForOf || src.indexOf('Symbol') !== -1) { + plugins.push(require('../transforms/transform-symbol-member')); + } + if ( + isNull || + src.indexOf('React.createClass') !== -1 || + src.indexOf('createReactClass') !== -1 + ) { + plugins.push('transform-react-display-name'); + } + + if (options && options.dev) { + plugins.push('transform-react-jsx-source'); + } + + return { + comments: false, + compact: true, + plugins: resolvePlugins(plugins), + }; }; + +const base = getPreset(null); +const devTools = getPreset(null, {dev: true}); + +module.exports = options => { + if (options.withDevTools == null) { + const env = process.env.BABEL_ENV || process.env.NODE_ENV; + if (!env || env === 'development') { + return devTools; + } + } + return base; +}; + +module.exports.getPreset = getPreset;