/// <reference types="vite/client" />
import tsconfigPaths from 'vite-tsconfig-paths';
import { UserConfig, ConfigEnv } from 'vite';
import { VitePublicTypescriptOptions } from 'vite-plugin-public-typescript';
import { VitePluginSvgrOptions } from 'vite-plugin-svgr';
import { viteVConsoleOptions } from 'vite-plugin-vconsole';
import pluginLegacy from '@vitejs/plugin-legacy';

interface CompressOptions {
    compress?: 'gzip' | 'brotli' | 'none';
    deleteOriginFile?: boolean;
}

type LegacyOptions = Parameters<typeof pluginLegacy>[0];

interface PluginOptions {
    /**
     * @default
     * { svgrOptions: { icon: true } }
     */
    svgr?: VitePluginSvgrOptions | false;
    /**
     * @default false
     */
    compress?: CompressOptions | false;
    /**
     * @default
     * ```
     * {
          renderLegacyChunks: true,
          renderModernChunks: true,
          polyfills: true,
          modernPolyfills: true,
          additionalLegacyPolyfills: ['core-js/proposals/global-this'],
       }
     * ```
     */
    legacy?: LegacyOptions | false;
    /**
     * @default false
     */
    publicTypescript?: VitePublicTypescriptOptions | false;
    /**
     * @default
     * when csr and not legacy render
     * @suggestion
     * disable if you want legacy render
     */
    splitVendorChunk?: boolean;
    /**
     * @default true
     */
    logAppInfo?: boolean;
    /**
     * @default true when process.env.NODE_ENV === 'development' or 'test'
     */
    vConsole?: boolean | viteVConsoleOptions;
    /**
     * tsconfig alias
     * @default true
     */
    tsconfigPaths?: boolean | Parameters<typeof tsconfigPaths>[0];
}
declare const enhanceViteConfig: (userConfig: UserConfig & {
    env: ConfigEnv;
}, options?: PluginOptions) => Promise<Record<string, any>>;

export { enhanceViteConfig as default, enhanceViteConfig };
