Files
xyflow/tooling/rollup-config/src/index.js
2023-12-26 17:45:39 +01:00

83 lines
2.0 KiB
JavaScript

import { readFileSync } from 'fs';
import { resolve } from 'path';
import { cwd } from 'process';
import { defineConfig } from 'rollup';
import resolvePlugin from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import replace from '@rollup/plugin-replace';
import terser from '@rollup/plugin-terser';
import peerDepsExternal from 'rollup-plugin-peer-deps-external';
import typescript from '@rollup/plugin-typescript';
const pkg = JSON.parse(readFileSync(resolve(cwd(), './package.json')));
const isProd = process.env.NODE_ENV === 'production';
const defaultPlugins = [
resolvePlugin(),
commonjs({
include: /node_modules/,
}),
];
const onwarn = (warning, rollupWarn) => {
if (warning.code !== 'CIRCULAR_DEPENDENCY') {
rollupWarn(warning);
}
};
const defineEsmConfig = (format) =>
defineConfig({
input: pkg.source,
output: {
file: format === 'js' ? pkg.module : pkg.module.replace('.js', '.mjs'),
format: 'esm',
banner: pkg.rollup?.vanilla ? undefined : '"use client"',
},
onwarn,
plugins: [
peerDepsExternal({
includeDependencies: true,
}),
...defaultPlugins,
typescript(),
],
});
const reactGlobals = {
react: 'React',
'react-dom': 'ReactDOM',
'react/jsx-runtime': 'jsxRuntime',
};
const globals = {
...(pkg.rollup?.vanilla ? {} : reactGlobals),
...(pkg.rollup?.globals || {}),
};
const esmMjsConfig = defineEsmConfig('mjs');
const esmJsConfig = defineEsmConfig('js');
const umdConfig = defineConfig({
input: pkg.source,
output: {
file: pkg.main,
format: 'umd',
exports: 'named',
name: pkg.rollup?.name || 'ReactFlow',
globals,
},
onwarn,
plugins: [
peerDepsExternal(),
...defaultPlugins,
typescript(),
replace({
preventAssignment: true,
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
}),
terser(),
],
});
export default isProd ? [esmMjsConfig, esmJsConfig, umdConfig] : esmMjsConfig;