@ts-engine/babel-preset
Version:
ts-engine's Babel preset.
54 lines (49 loc) • 1.83 kB
JavaScript
var packageJsonFinder = require("find-package-json");
const packageJson = packageJsonFinder(process.cwd()).next().value;
const hasReact =
(packageJson.dependencies && packageJson.dependencies.react) ||
(packageJson.devDependencies && packageJson.devDependencies.react) ||
(packageJson.peerDependencies && packageJson.peerDependencies.react);
const getEnvOptions = () => {
if (process.env.NODE_ENV === "test" || process.env.BABEL_ENV === "test") {
return {
useBuiltIns: "usage",
corejs: { version: 3 },
exclude: [
"babel-plugin-transform-async-to-generator",
"babel-plugin-transform-regenerator",
],
};
}
return {
modules: false,
exclude: [
"babel-plugin-transform-async-to-generator",
"babel-plugin-transform-regenerator",
],
};
};
// We require() plugins and presets here as letting babel resolve them
// instead of nodejs led to issues when plugins and presets clashed with
// other packages dependencies, for instance using nextjs in the same
// mono repo as ts-engine lead to @babel/plugin-proposal-decorators
// installing into the incorrect directories in node_modules.
module.exports = () => {
return {
presets: [
...(hasReact
? [[require("@babel/preset-react"), { runtime: "automatic" }]]
: []),
require("@babel/preset-typescript"),
[require("@babel/preset-env"), getEnvOptions()],
],
plugins: [
[require("@babel/plugin-proposal-decorators"), { legacy: true }],
require("@babel/plugin-transform-typescript"),
require("@babel/plugin-proposal-class-properties"),
require("@babel/plugin-proposal-object-rest-spread"),
require("@babel/plugin-proposal-optional-chaining"),
require("@babel/plugin-proposal-nullish-coalescing-operator"),
],
};
};