99 lines
3.6 KiB
JavaScript
99 lines
3.6 KiB
JavaScript
/**
|
|
* Copyright (c) 2013-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/* eslint-disable indent */
|
|
|
|
module.exports = function(options) {
|
|
options = Object.assign({
|
|
autoImport: true,
|
|
inlineRequires: process.env.NODE_ENV === 'test',
|
|
objectAssign: true,
|
|
rewriteModules: null, // {map: ?{[module: string]: string}, prefix: ?string}
|
|
stripDEV: false,
|
|
target: 'js',
|
|
}, options);
|
|
|
|
if (options.target !== 'js' && options.target !== 'flow') {
|
|
throw new Error('options.target must be one of "js" or "flow".');
|
|
}
|
|
|
|
// Always enable these. These will overlap with some transforms (which also
|
|
// enable the corresponding syntax, eg Flow), but these are the minimal
|
|
// additional syntaxes that need to be enabled so we can minimally transform
|
|
// to .js.flow files as well.
|
|
let presetSets = [
|
|
[
|
|
require('@babel/plugin-syntax-class-properties'),
|
|
require('@babel/plugin-syntax-flow'),
|
|
require('@babel/plugin-syntax-jsx'),
|
|
require('babel-plugin-syntax-trailing-function-commas'),
|
|
require('@babel/plugin-syntax-object-rest-spread'),
|
|
|
|
options.autoImport ? require('./plugins/auto-importer') : null,
|
|
options.rewriteModules ?
|
|
[require('./plugins/rewrite-modules'), options.rewriteModules || {}] :
|
|
null,
|
|
],
|
|
[
|
|
options.inlineRequires ? require('./plugins/inline-requires') : null,
|
|
options.stripDEV ? require('./plugins/dev-expression') : null,
|
|
]
|
|
];
|
|
|
|
// We only want to add declarations for flow transforms and not for js. So we
|
|
// have to do this separate from above.
|
|
if (options.target === 'flow') {
|
|
presetSets[0].push(require('./plugins/dev-declaration'));
|
|
}
|
|
|
|
// Enable everything else for js.
|
|
if (options.target === 'js') {
|
|
presetSets[0] = presetSets[0].concat([
|
|
require('@babel/plugin-transform-template-literals'),
|
|
require('@babel/plugin-transform-literals'),
|
|
require('@babel/plugin-transform-function-name'),
|
|
require('@babel/plugin-transform-arrow-functions'),
|
|
require('@babel/plugin-transform-block-scoped-functions'),
|
|
require('@babel/plugin-proposal-class-properties'),
|
|
[require('@babel/plugin-transform-classes'), {loose: true}],
|
|
require('@babel/plugin-transform-object-super'),
|
|
require('@babel/plugin-transform-shorthand-properties'),
|
|
require('@babel/plugin-transform-computed-properties'),
|
|
require('@babel/plugin-transform-for-of'),
|
|
[require('@babel/plugin-transform-spread'), {loose: true}],
|
|
require('@babel/plugin-transform-parameters'),
|
|
[require('@babel/plugin-transform-destructuring'), {loose: true}],
|
|
require('@babel/plugin-transform-block-scoping'),
|
|
require('@babel/plugin-transform-modules-commonjs'),
|
|
require('@babel/plugin-transform-member-expression-literals'),
|
|
require('@babel/plugin-transform-property-literals'),
|
|
require('@babel/plugin-transform-flow-strip-types'),
|
|
require('@babel/plugin-proposal-object-rest-spread'),
|
|
require('@babel/plugin-transform-react-display-name'),
|
|
require('@babel/plugin-transform-react-jsx'),
|
|
// Don't enable this plugin unless we're compiling JS, even if the option is true
|
|
options.objectAssign ? require('./plugins/object-assign') : null,
|
|
]);
|
|
}
|
|
|
|
// Use two passes to circumvent bug with auto-importer and inline-requires.
|
|
const passPresets = presetSets.map(function(plugins) {
|
|
return {
|
|
plugins: plugins.filter(function(plugin) {
|
|
return plugin != null;
|
|
}),
|
|
};
|
|
});
|
|
|
|
return {
|
|
passPerPreset: true,
|
|
presets: passPresets,
|
|
};
|
|
};
|