1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /**
- * 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,
- };
- };
|