import { cdn } from './cdn';
import vue from '@vitejs/plugin-vue';
import type { PluginOption } from 'vite';
import vueJsx from '@vitejs/plugin-vue-jsx';
import legacy from '@vitejs/plugin-legacy';
import { compression } from 'vite-plugin-compression2';
import { viteMockServe } from 'vite-plugin-mock';
import { viteBuildInfo } from './info';
import { configCompressPlugin } from './compress.ts';

export function getPluginsList(
	VITE_CDN: boolean,
	VITE_COMPRESSION: any,
	VITE_PORT: string,
	VITE_MOCK_SERVER_ENABLE: boolean,
): PluginOption[] {
	return [
		vue(),
		legacy({
			targets: ['android 4', 'ios 8', 'chrome 30', 'ie 6'],
			additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
			renderLegacyChunks: true,
			polyfills: [
				'es.symbol',
				'es.array.filter',
				'es.promise',
				'es.promise.finally',
				'es/map',
				'es/set',
				'es.array.for-each',
				'es.object.define-properties',
				'es.object.define-property',
				'es.object.get-own-property-descriptor',
				'es.object.get-own-property-descriptors',
				'es.object.keys',
				'es.object.to-string',
				'web.dom-collections.for-each',
				'esnext.global-this',
				'esnext.string.match-all',
			],
		}),
		vueJsx(),
		compression(),
		viteBuildInfo(VITE_PORT),
		VITE_CDN ? cdn : null,
		configCompressPlugin(VITE_COMPRESSION),
		viteMockServe({
			mockPath: 'src/api/mock',
			enable: VITE_MOCK_SERVER_ENABLE,
			watchFiles: true,
		}),
	];
}
