UNPKG

flipper-babel-transformer

Version:

Babel transformer for Flipper plugins

88 lines 3.04 kB
"use strict"; /** * 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