configs/rollup/rollup.config.js (48 lines of code) (raw):
/** @typedef {import("rollup").RollupOptions["plugins"]} Plugins */
/** @typedef {import("rollup").RollupOptions["input"]} Input */
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import { dts } from 'rollup-plugin-dts';
import esbuild from 'rollup-plugin-esbuild';
import { nodeExternals } from 'rollup-plugin-node-externals';
/** @type {Input} */
const defaultInput = { index: 'src/index.ts' };
/** @type {import("rollup").RollupOptions["output"]} */
const output = {
dir: 'dist',
format: 'esm',
preserveModules: true,
preserveModulesRoot: 'src',
};
/**
* @param {import('rollup-plugin-node-externals').ExternalsOptions} externalsOptions
* @returns {Plugins}
*/
const defaultPlugins = (externalsOptions) => [
nodeResolve({
extensions: ['.cjs', '.mjs', '.js', '.jsx', '.ts', '.tsx', '.json'],
}),
commonjs(),
json(),
nodeExternals(externalsOptions),
];
/**
* @param {object} param0
* @param {Plugins} [param0.plugins]
* @param {Input} [param0.input]
* @param {import('rollup-plugin-node-externals').ExternalsOptions} [param0.externalsOptions]
* @param {import("rollup").RollupOptions["output"]} [param0.cjsOutputOptions]
* @returns {import("rollup").RollupOptions[]}
*/
export default ({
input = defaultInput,
plugins = [],
externalsOptions,
cjsOutputOptions,
} = {}) => [
{
input,
output,
plugins: [...defaultPlugins(externalsOptions), ...plugins, esbuild()],
},
{
input,
output: {
...output,
...cjsOutputOptions,
format: 'cjs',
entryFileNames: '[name].cjs',
},
plugins: [...defaultPlugins(externalsOptions), ...plugins, esbuild()],
},
{
input,
output,
plugins: [...defaultPlugins(externalsOptions), ...plugins, dts()],
},
];