import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';
import pkg from './package.json';

const SrcName = (n, ext, format = undefined) => `src/${n}${format ? '.' + format : ''}.${ext}`;
const DstName = (n, ext, format = undefined) => `dist/${n}${format ? '.' + format : ''}.${ext}`;

// browser-friendly UMD build
const UMD = (input, output) => ({
    input: input,
    output: {
        name: 'rpc-typescript',
        file: output,// pkg.browser,
        format: 'umd'
    },
    plugins: [
        typescript(),
        resolve(), // so Rollup can find `ms`
        commonjs() // so Rollup can convert `ms` to an ES module
    ]
});

// CommonJS (for Node) and ES module (for bundlers) build.
// (We could have three entries in the configuration array
// instead of two, but it's quicker to generate multiple
// builds from a single configuration where possible, using
// an array for the `output` option, where we can specify
// `file` and `format` for each target)
const CJS = (input, output) => ({
    input: input,
    external: ['ms'],
    output: {
        name: 'rpc-typescript',
        file: output,// pkg.browser,
        format: 'cjs'
    },
    plugins: [
        typescript(),
    ]
});
const ES = (input, output) => ({
    input: input,
    external: ['ms'],
    output: {
        name: 'rpc-typescript',
        file: output,// pkg.browser,
        format: 'es'
    },
    plugins: [
        typescript(),
    ]
});

export default [
    UMD(SrcName('index', 'ts'), DstName('full', 'js', 'umd')),
    UMD(SrcName('proxy', 'ts'), DstName('proxy', 'js', 'umd')),
    UMD(SrcName('stub', 'ts'), DstName('stub', 'js', 'umd')),

    CJS(SrcName('index', 'ts'), DstName('full', 'js', 'cjs')),
    CJS(SrcName('proxy', 'ts'), DstName('proxy', 'js', 'cjs')),
    CJS(SrcName('stub', 'ts'), DstName('stub', 'js', 'cjs')),

    ES(SrcName('index', 'ts'), DstName('full', 'js', 'es')),
    ES(SrcName('proxy', 'ts'), DstName('proxy', 'js', 'es')),
    ES(SrcName('stub', 'ts'), DstName('stub', 'js', 'es')),
];