Files
react/compiler/forget/scripts/jest/makeTransform.js
T
Joseph Savona a7450572fa import runtime from "React.unstable_ForgetRuntime"
Imports the runtime from `React.unstable_ForgetRuntime` rather than from a 
separate module. The hope is that any code that gets transformed already has a 
dependency on React anyway, so we can avoid adding a new dependency that other 
systems don't know about. 

While here, i also cleaned up the `guardThrows` flag (we still parse it if 
present and warn, rather than throwing, to make it easier to adopt the latest 
version in various places).
2022-10-21 09:13:37 -07:00

71 lines
2.0 KiB
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.
*/
const ReactForgetBabelPlugin = require("../../dist").default;
const babelJest = require("babel-jest");
const { readFileSync } = require("fs");
module.exports = (useForget) => {
function createTransformer() {
return babelJest.createTransformer({
passPerPreset: true,
presets: [
"@babel/preset-typescript",
{
plugins: [
"@babel/plugin-syntax-jsx",
...(useForget
? [
[
ReactForgetBabelPlugin,
{
// Jest hashes the babel config as a cache breaker.
cacheBreaker: readFileSync("dist/HASH", "utf8"),
},
],
]
: []),
],
},
"@babel/preset-react",
{
plugins: [
[
function BabelPluginRewriteRequirePath(babel) {
return {
visitor: {
CallExpression(path) {
if (path.node.callee.name === "require") {
const arg = path.node.arguments[0];
if (arg.type === "StringLiteral") {
// The compiler adds requires of "React", which is expected to be a wrapper
// around the "react" package. For tests, we just rewrite the require.
if (arg.value === "React") {
arg.value = "react";
}
}
}
},
},
};
},
],
"@babel/plugin-transform-modules-commonjs",
],
},
],
targets: {
esmodules: true,
},
});
}
return {
createTransformer,
};
};