packages/default-collection-transform/index.js (35 lines of code) (raw):
/**
* (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary.
*
* @emails oncall+i18n_fbt_js
* @flow
* @noformat
*/
'use strict';
const babel = require('@babel/core');
/*::
import type {BabelPluginList, BabelPresetList} from '@babel/core';
import type {TransformOptions} from 'babel-plugin-fbt/dist/bin/FbtCollector';
import type {BabelPluginFbt, PluginOptions} from "babel-plugin-fbt";
*/
const defaultSyntaxPlugins = [
require('@babel/plugin-syntax-class-properties'),
[require('@babel/plugin-syntax-flow'), {enums: true}],
require('@babel/plugin-syntax-jsx'),
require('@babel/plugin-syntax-object-rest-spread'),
require('@babel/plugin-syntax-numeric-separator'),
require('@babel/plugin-syntax-optional-chaining'),
require('@babel/plugin-syntax-nullish-coalescing-operator'),
require('@babel/plugin-syntax-optional-catch-binding'),
];
function transform(
code /*: string */,
options /*: TransformOptions */,
plugins /*: BabelPluginList */,
presets /*: BabelPresetList */,
) /*: void */ {
const {fbtModule, ...pluginOptions} = options;
const opts = {
ast: false,
code: false,
filename: options.filename,
plugins: defaultSyntaxPlugins.concat(plugins, [
// $FlowFixMe[incompatible-call]
[
(fbtModule /*: BabelPluginFbt */),
(pluginOptions /*: PluginOptions */)
],
]),
presets,
sourceType: 'unambiguous',
};
babel.transformSync(code, opts);
}
module.exports = transform;