66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
import { declare } from "@babel/helper-plugin-utils";
|
|
import transformReactJSX from "@babel/plugin-transform-react-jsx";
|
|
import transformReactJSXDevelopment from "@babel/plugin-transform-react-jsx-development";
|
|
import transformReactDisplayName from "@babel/plugin-transform-react-display-name";
|
|
import transformReactJSXSource from "@babel/plugin-transform-react-jsx-source";
|
|
import transformReactJSXSelf from "@babel/plugin-transform-react-jsx-self";
|
|
import transformReactPure from "@babel/plugin-transform-react-pure-annotations";
|
|
|
|
export default declare((api, opts) => {
|
|
api.assertVersion(7);
|
|
|
|
let { pragma, pragmaFrag } = opts;
|
|
|
|
const {
|
|
pure,
|
|
throwIfNamespace = true,
|
|
useSpread,
|
|
runtime = "classic",
|
|
importSource,
|
|
} = opts;
|
|
|
|
// TODO: (Babel 8) Remove setting these defaults
|
|
if (runtime === "classic") {
|
|
pragma = pragma || "React.createElement";
|
|
pragmaFrag = pragmaFrag || "React.Fragment";
|
|
}
|
|
|
|
// TODO: (Babel 8) Don't cast these options but validate it
|
|
const development = !!opts.development;
|
|
const useBuiltIns = !!opts.useBuiltIns;
|
|
|
|
if (typeof development !== "boolean") {
|
|
throw new Error(
|
|
"@babel/preset-react 'development' option must be a boolean.",
|
|
);
|
|
}
|
|
|
|
const transformReactJSXPlugin =
|
|
runtime === "automatic" && development
|
|
? transformReactJSXDevelopment
|
|
: transformReactJSX;
|
|
|
|
return {
|
|
plugins: [
|
|
[
|
|
transformReactJSXPlugin,
|
|
{
|
|
importSource,
|
|
pragma,
|
|
pragmaFrag,
|
|
runtime,
|
|
throwIfNamespace,
|
|
useBuiltIns,
|
|
useSpread,
|
|
pure,
|
|
},
|
|
],
|
|
transformReactDisplayName,
|
|
pure !== false && transformReactPure,
|
|
|
|
development && runtime === "classic" && transformReactJSXSource,
|
|
development && runtime === "classic" && transformReactJSXSelf,
|
|
].filter(Boolean),
|
|
};
|
|
});
|