import fs from 'fs';
import replace from 'rollup-plugin-replace';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
import sucrase from 'rollup-plugin-sucrase';
import typescript from 'rollup-plugin-typescript';
import pkg from './package.json';

const is_publish = !!process.env.PUBLISH;

export default [
	/* internal.[m]js */
	{
		input: `src/internal/index.js`,
		output: [
			{
				file: `internal.mjs`,
				format: 'esm',
				paths: id => id.startsWith('svelte/') && id.replace('svelte', '.')
			},
			{
				file: `internal.js`,
				format: 'cjs',
				paths: id => id.startsWith('svelte/') && id.replace('svelte', '.')
			}
		],
		external: id => id.startsWith('svelte/'),
		plugins: [{
			generateBundle(options, bundle) {
				const mod = bundle['internal.mjs'];
				if (mod) {
					fs.writeFileSync('src/compile/internal-exports.ts', `// This file is automatically generated\nexport default new Set(${JSON.stringify(mod.exports)});`);
				}
			}
		}]
	},

	/* compiler.js */
	{
		input: 'src/index.ts',
		plugins: [
			replace({
				__VERSION__: pkg.version
			}),
			resolve(),
			commonjs({
				include: ['node_modules/**']
			}),
			json(),
			is_publish
				? typescript({
					include: 'src/**',
					exclude: 'src/internal/**',
					typescript: require('typescript')
				})
				: sucrase({
					transforms: ['typescript']
				})
		],
		output: {
			file: 'compiler.js',
			format: is_publish ? 'umd' : 'cjs',
			name: 'svelte',
			sourcemap: true,
		},
		external: is_publish
			? []
			: id => id === 'acorn' || id === 'magic-string' || id.startsWith('css-tree')
	},

	/* motion.mjs */
	{
		input: `src/motion/index.js`,
		output: [
			{
				file: `motion.mjs`,
				format: 'esm',
				paths: id => id.startsWith('svelte/') && id.replace('svelte', '.')
			},
			{
				file: `motion.js`,
				format: 'cjs',
				paths: id => id.startsWith('svelte/') && id.replace('svelte', '.')
			}
		],
		external: id => id.startsWith('svelte/')
	},

	// everything else
	...['index', 'store', 'easing', 'transition', 'animate'].map(name => ({
		input: `${name}.mjs`,
		output: {
			file: `${name}.js`,
			format: 'cjs',
			paths: id => id.startsWith('svelte/') && id.replace('svelte', '.')
		},
		external: id => id !== `${name}.mjs`
	}))
];