mirror of
https://github.com/bendtherules/react-fiber-traverse.git
synced 2026-08-18 22:01:49 +00:00
188 lines
4.4 KiB
JavaScript
188 lines
4.4 KiB
JavaScript
import babel from "rollup-plugin-babel";
|
|
import commonjs from "rollup-plugin-commonjs";
|
|
import nodeResolve from "rollup-plugin-node-resolve";
|
|
import replace from "rollup-plugin-replace";
|
|
import { sizeSnapshot } from "rollup-plugin-size-snapshot";
|
|
import sourcemaps from "rollup-plugin-sourcemaps";
|
|
import { terser } from "rollup-plugin-terser";
|
|
import pkg from "./package.json";
|
|
|
|
const CJS_DEV = "CJS_DEV";
|
|
const CJS_PROD = "CJS_PROD";
|
|
const ES = "ES";
|
|
const UMD_DEV = "UMD_DEV";
|
|
const UMD_PROD = "UMD_PROD";
|
|
|
|
const input = "./compiled/index.js";
|
|
|
|
const getGlobals = bundleType => {
|
|
const baseGlobals = {
|
|
"react-dom": "ReactDOM",
|
|
react: "React"
|
|
};
|
|
|
|
switch (bundleType) {
|
|
case UMD_DEV:
|
|
return { ...baseGlobals, "prop-types": "PropTypes" };
|
|
case UMD_PROD:
|
|
return baseGlobals;
|
|
default:
|
|
return {};
|
|
}
|
|
};
|
|
|
|
const getExternal = bundleType => {
|
|
const peerDependencies = Object.keys(pkg.peerDependencies);
|
|
const dependencies = Object.keys(pkg.dependencies);
|
|
|
|
// Hat-tip: https://github.com/rollup/rollup-plugin-babel/issues/148#issuecomment-399696316.
|
|
const makeExternalPredicate = externals => {
|
|
if (externals.length === 0) {
|
|
return () => false;
|
|
}
|
|
const pattern = new RegExp(`^(${externals.join("|")})($|/)`);
|
|
return id => pattern.test(id);
|
|
};
|
|
|
|
switch (bundleType) {
|
|
case CJS_DEV:
|
|
case CJS_PROD:
|
|
case ES:
|
|
return makeExternalPredicate([...peerDependencies, ...dependencies]);
|
|
case UMD_DEV:
|
|
return makeExternalPredicate([...peerDependencies, "prop-types"]);
|
|
default:
|
|
return makeExternalPredicate(peerDependencies);
|
|
}
|
|
};
|
|
|
|
const isProduction = bundleType =>
|
|
bundleType === CJS_PROD || bundleType === UMD_PROD;
|
|
|
|
const getBabelConfig = bundleType => {
|
|
const options = {
|
|
babelrc: false,
|
|
exclude: "node_modules/**",
|
|
presets: [["@babel/env", { loose: true, modules: false }], "@babel/react"],
|
|
plugins: ["@babel/transform-runtime"],
|
|
runtimeHelpers: true
|
|
};
|
|
|
|
switch (bundleType) {
|
|
case ES:
|
|
return {
|
|
...options,
|
|
plugins: [
|
|
...options.plugins,
|
|
["transform-react-remove-prop-types", { mode: "wrap" }]
|
|
]
|
|
};
|
|
case UMD_PROD:
|
|
case CJS_PROD:
|
|
return {
|
|
...options,
|
|
plugins: [
|
|
...options.plugins,
|
|
["transform-react-remove-prop-types", { removeImport: true }]
|
|
]
|
|
};
|
|
default:
|
|
return options;
|
|
}
|
|
};
|
|
|
|
const getPlugins = bundleType => [
|
|
nodeResolve(),
|
|
commonjs({
|
|
include: "node_modules/**",
|
|
namedExports: {
|
|
"node_modules/prop-types/index.js": [
|
|
"any",
|
|
"array",
|
|
"arrayOf",
|
|
"bool",
|
|
"element",
|
|
"exact",
|
|
"func",
|
|
"instanceOf",
|
|
"node",
|
|
"number",
|
|
"object",
|
|
"objectOf",
|
|
"oneOf",
|
|
"oneOfType",
|
|
"shape",
|
|
"string",
|
|
"symbol"
|
|
]
|
|
}
|
|
}),
|
|
babel(getBabelConfig(bundleType)),
|
|
replace({
|
|
"process.env.NODE_ENV": JSON.stringify(
|
|
isProduction(bundleType) ? "production" : "development"
|
|
)
|
|
}),
|
|
sourcemaps(),
|
|
sizeSnapshot(),
|
|
isProduction(bundleType) &&
|
|
terser({
|
|
sourcemap: true,
|
|
output: { comments: false },
|
|
compress: {
|
|
keep_infinity: true, // eslint-disable-line @typescript-eslint/camelcase
|
|
pure_getters: true // eslint-disable-line @typescript-eslint/camelcase
|
|
},
|
|
warnings: true,
|
|
ecma: 5,
|
|
toplevel: false
|
|
})
|
|
];
|
|
|
|
const getCjsConfig = bundleType => ({
|
|
input,
|
|
external: getExternal(bundleType),
|
|
output: {
|
|
file: `dist/react-fiber-traverse.cjs.${
|
|
isProduction(bundleType) ? "production" : "development"
|
|
}.js`,
|
|
format: "cjs",
|
|
sourcemap: true
|
|
},
|
|
plugins: getPlugins(bundleType)
|
|
});
|
|
|
|
const getEsConfig = () => ({
|
|
input,
|
|
external: getExternal(ES),
|
|
output: {
|
|
file: pkg.module,
|
|
format: "es",
|
|
sourcemap: true
|
|
},
|
|
plugins: getPlugins(ES)
|
|
});
|
|
|
|
const getUmdConfig = bundleType => ({
|
|
input,
|
|
external: getExternal(bundleType),
|
|
output: {
|
|
file: `dist/react-fiber-traverse.umd.${
|
|
isProduction(bundleType) ? "production" : "development"
|
|
}.js`,
|
|
format: "umd",
|
|
globals: getGlobals(bundleType),
|
|
name: "reactFiberTraverse",
|
|
sourcemap: true
|
|
},
|
|
plugins: getPlugins(bundleType)
|
|
});
|
|
|
|
export default [
|
|
getCjsConfig(CJS_DEV),
|
|
getCjsConfig(CJS_PROD),
|
|
getEsConfig(),
|
|
getUmdConfig(UMD_DEV),
|
|
getUmdConfig(UMD_PROD)
|
|
];
|