GT2/Ejectable/node_modules/babel-preset-fbjs/configure.js

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,
};
};