import * as path from 'path';
import webWorkerLoader from 'rollup-plugin-web-worker-loader';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import alias from '@rollup/plugin-alias';
import { terser } from 'rollup-plugin-terser';

function getConfig(entry, filename, perf) {
  // Remove the extension
  let basename = filename.replace(/\.[^.]*/, '');

  return {
    input: entry,
    output: {
      dir: perf ? 'dist/perf' : 'dist',
      entryFileNames: filename,
      chunkFileNames: `${basename}-[name]-[hash].js`,
      format: 'esm',
      exports: 'named'
    },
    plugins: [
      !perf &&
        alias({
          entries: {
            'perf-deets': path.resolve(
              __dirname,
              './node_modules/perf-deets/noop.js'
            )
          }
        }),
      webWorkerLoader({
        pattern: /.*\/worker\.js/,
        targetPlatform: 'browser',
        external: [],
        plugins: [terser()]
      }),
      nodeResolve()
    ],
    ...(perf ? { external: ['perf-deets'] } : {})
  };
}

export default [
  getConfig('src/index.js', 'index.js'),
  getConfig('src/memory/backend.js', 'memory-backend.js'),
  getConfig('src/indexeddb/backend.js', 'indexeddb-backend.js'),
  getConfig('src/indexeddb/main-thread.js', 'indexeddb-main-thread.js'),
  getConfig('src/indexeddb/backend.js', 'indexeddb-backend.js', true),
  getConfig('src/indexeddb/main-thread.js', 'indexeddb-main-thread.js', true)
];