import gzip from 'rollup-plugin-gzip'; import postcss from 'rollup-plugin-postcss'; import babel from 'rollup-plugin-babel'; import cleanup from 'rollup-plugin-cleanup'; // import { uglify } from "rollup-plugin-uglify"; import commonjs from '@rollup/plugin-commonjs'; import resolve from '@rollup/plugin-node-resolve'; import visualizer from 'rollup-plugin-visualizer'; import json from '@rollup/plugin-json'; export default function rollup_builds(input_file, output_folder, pkg) { const package_name = pkg.name; const dependencies = pkg.dependencies; const dependencies_names = !!dependencies ? Object.keys(pkg.dependencies) : []; const esm_format = 'es'; const browser_format = 'umd'; const commonjs_format = 'cjs'; const postcss_config = { extract: true, modules: false, // Avoid adding prefixes to classnames (etc). extensions: ['.css', '.sss', '.pcss', '.scss'], }; const postcss_plugin = postcss(postcss_config); const postcss_plugin_minimized = postcss({ ...postcss_config, minimize: true }); const commonjs_resolve_config = { // pass custom options to the resolve plugin customResolveOptions: { moduleDirectory: 'node_modules' }, }; function beautify_plugin() { return cleanup(/*{ maxEmptyLines: 1, sourcemap: false, }*/); } function visualizer_plugin(name) { return visualizer({ title: name, filename: output_folder + '/visualizer/' + name + '.html', }); } function es_build(filename, visualize, bundle) { const plugins = [postcss_plugin, json(), beautify_plugin()]; if (!!visualize) { plugins.push(visualizer_plugin(filename)); } return { input: input_file, external: !!bundle ? {} : dependencies_names, output: [{ format: esm_format, file: filename }], plugins: plugins, }; } function commonjs_build(filename, visualize, bundle) { const plugins = [postcss_plugin, json(), resolve(commonjs_resolve_config), beautify_plugin()]; if (!!visualize) { plugins.push(visualizer_plugin(filename)); } return { input: input_file, external: !!bundle ? {} : dependencies_names, output: [{ format: commonjs_format, file: filename }], plugins: plugins, }; } function browser_build(filename, visualize, minimize, compact) { const plugins = [ !!minimize ? postcss_plugin_minimized : postcss_plugin, json(), babel(), resolve(), commonjs(), beautify_plugin(), ]; if (!!minimize) { // plugins.push( uglify() ); if (!!compact) { plugins.push(gzip()); } } if (!!visualize) { plugins.push(visualizer_plugin(filename)); } return { input: input_file, output: { name: package_name, format: browser_format, file: filename }, plugins: plugins, }; } return Object.freeze({ es: es_build, browser: browser_build, commonjs: commonjs_build, }); }