Zizzamia/perfume.js

View on GitHub
rollup.config.ts

Summary

Maintainability
A
0 mins
Test Coverage
import commonjs from 'rollup-plugin-commonjs';
import resolve from 'rollup-plugin-node-resolve';
import sourceMaps from 'rollup-plugin-sourcemaps';
import { terser } from 'rollup-plugin-terser';
import pkg from './package.json';

const createConfig = ({ output, min = false }) => {
  const minify =
    min &&
    terser({
      output: {
        comments(_, { text, type }) {
          if (type === 'comment2') {
            // multiline comment
            return /@preserve|@license|@cc_on/i.test(text);
          }
        },
      },
    });

  const plugins = [
    // https://github.com/rollup/rollup-plugin-node-resolve#usage
    resolve(),
    // Resolve source maps to the original source
    sourceMaps(),
    minify,
  ];

  if (output.format !== 'esm') {
    // Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs)
    plugins.unshift(commonjs());
  }

  return {
    input: 'dist/es/perfume.js',
    output: {
      file: output.file,
      format: output.format,
      name: 'Perfume',
      sourcemap: true
    },
    watch: { include: 'dist/es/**' },
    plugins: plugins.filter(Boolean),
  };
};

export default [
  createConfig({
    output: { file: pkg.module, format: 'esm' }
  }),
  createConfig({
    output: { file: pkg.main, format: 'cjs' }
  }),
  createConfig({
    output: { file: 'dist/perfume.esm.min.js', format: 'esm' },
    min: true,
  }),
  createConfig({
    output: { file: 'dist/perfume.min.js', format: 'cjs' },
    min: true,
  }),
  createConfig({
    output: { file: pkg.iife, format: 'iife' },
  }),
  createConfig({
    output: { file: 'dist/perfume.iife.min.js', format: 'iife' },
    min: true,
  }),
  createConfig({
    output: { file: pkg.unpkg, format: 'umd' },
  }),
  createConfig({
    output: { file: 'dist/perfume.umd.min.js', format: 'umd' },
    min: true,
  }),
];