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

102 lines
3.9 KiB
JavaScript

/**
* Copyright (c) 2013-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';
/* 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-es2015-template-literals'),
require('babel-plugin-transform-es2015-literals'),
require('babel-plugin-transform-es2015-function-name'),
require('babel-plugin-transform-es2015-arrow-functions'),
require('babel-plugin-transform-es2015-block-scoped-functions'),
require('babel-plugin-transform-class-properties'),
[require('babel-plugin-transform-es2015-classes'), {loose: true}],
require('babel-plugin-transform-es2015-object-super'),
require('babel-plugin-transform-es2015-shorthand-properties'),
require('babel-plugin-transform-es2015-computed-properties'),
require('babel-plugin-transform-es2015-for-of'),
require('babel-plugin-check-es2015-constants'),
[require('babel-plugin-transform-es2015-spread'), {loose: true}],
require('babel-plugin-transform-es2015-parameters'),
[require('babel-plugin-transform-es2015-destructuring'), {loose: true}],
require('babel-plugin-transform-es2015-block-scoping'),
require('babel-plugin-transform-es2015-modules-commonjs'),
require('babel-plugin-transform-es3-member-expression-literals'),
require('babel-plugin-transform-es3-property-literals'),
require('babel-plugin-transform-flow-strip-types'),
require('babel-plugin-transform-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,
};
};