flipper-babel-transformer
Version:
Babel transformer for Flipper plugins
88 lines • 3.04 kB
JavaScript
;
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const generator_1 = __importDefault(require("@babel/generator"));
const parser_1 = require("@babel/parser");
const core_1 = require("@babel/core");
const flipper_env_1 = __importDefault(require("./flipper-env"));
const path_1 = require("path");
const jsParsePlugins = ['jsx'];
const tsParsePluins = ['jsx', 'typescript'];
const commonJsPlugin = [
require('@babel/plugin-transform-modules-commonjs'),
{
strictMode: false,
},
];
const dynamicRequiresPlugin = require('./dynamic-requires');
const typeScriptPlugin = require('@babel/plugin-transform-typescript');
const emotionPlugin = require('@emotion/babel-plugin');
const tsTransformPlugins = [
typeScriptPlugin,
commonJsPlugin,
// Sourcemap disabled because
// https://github.com/emotion-js/emotion/issues/1838
[emotionPlugin, { autoLabel: 'always', sourceMap: false }],
];
const jsTransformPlugins = [
commonJsPlugin,
dynamicRequiresPlugin,
[emotionPlugin, { autoLabel: 'always', sourceMap: false }],
];
function transform({ filename, options, src, presets, plugins, }) {
filename = (0, path_1.resolve)(options.projectRoot, filename);
presets = presets ?? [require('@babel/preset-react')];
plugins = plugins ?? [];
const isTypeScript = filename.endsWith('.tsx') || filename.endsWith('.ts');
const ast = (0, parser_1.parse)(src, {
sourceFilename: filename,
plugins: isTypeScript ? tsParsePluins : jsParsePlugins,
sourceType: 'module',
});
const transformed = (0, core_1.transformFromAstSync)(ast, src, {
ast: true,
babelrc: !filename.includes('node_modules'),
code: false,
comments: false,
compact: false,
root: options.projectRoot,
filename,
plugins: [
...(isTypeScript ? tsTransformPlugins : jsTransformPlugins),
...plugins,
],
presets,
sourceMaps: true,
retainLines: !!flipper_env_1.default.FLIPPER_TEST_RUNNER,
});
if (!transformed) {
throw new Error('Failed to transform');
}
const result = (0, generator_1.default)(
// TODO: Fix this the next time the file is edited.
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
transformed.ast, {
filename,
sourceFileName: filename,
sourceMaps: true,
retainLines: !!flipper_env_1.default.FLIPPER_TEST_RUNNER,
}, src);
return {
ast: transformed.ast,
code: result.code,
filename,
map: result.map,
};
}
exports.default = transform;
//# sourceMappingURL=transform.js.map