import type * as Terser from 'terser';
import type { TerserOptions } from 'terser-webpack-plugin';
import type Plugin from 'terser-webpack-plugin';
import { Extension, type ExtensionApi, type OptionCallback } from '@roots/bud-framework/extension';
/**
 * JS Minimizer configuration
 */
interface BudMinimizeJSOptions extends Plugin.BasePluginOptions {
    exclude: Plugin.BasePluginOptions[`exclude`];
    extractComments: Plugin.BasePluginOptions[`extractComments`];
    include: Plugin.BasePluginOptions[`include`];
    minify: Plugin.MinimizerImplementation<TerserOptions>;
    parallel: Plugin.BasePluginOptions[`parallel`];
    terserOptions: {
        compress: Terser.CompressOptions;
        ecma: Terser.ECMA;
        enclose: boolean | string;
        format: Terser.FormatOptions;
        ie8: boolean;
        keep_classnames: boolean | RegExp;
        keep_fnames: boolean | RegExp;
        mangle: boolean | Terser.MangleOptions;
        module: boolean;
        nameCache: object;
        parse: Terser.ParseOptions;
        safari10: boolean;
        sourceMap: boolean | Terser.SourceMapOptions;
        toplevel: boolean;
    } & TerserOptions;
}
type BudMinimizeJSPublicInterface = {
    dropComments: (enable?: boolean) => BudMinimizeJSPublicApi;
    dropConsole: (enable?: boolean) => BudMinimizeJSPublicApi;
    dropDebugger: (enable?: boolean) => BudMinimizeJSPublicApi;
    /**
     * Mangle output
     * @deprecated Use {@link BudTerser.set} instead
     *
     * @example
     * ```js
     * bud.minimize.js.set(`terserOptions.mangle`, {})
     * ```
     */
    mangle: (mangle: OptionCallback<BudMinimizeJSPublicApi['terserOptions'], `mangle`>) => BudMinimizeJSPublicApi;
} & ExtensionApi<BudMinimizeJSPublicApi, BudMinimizeJSOptions>;
/**
 * Terser configuration
 */
declare class BudMinimizeJSPublicApi extends Extension<BudMinimizeJSOptions> implements BudMinimizeJSPublicInterface {
    /**
     * Exclude
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#exclude}
     */
    exclude: BudMinimizeJSPublicInterface['exclude'];
    /**
     * extractComments value
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#extractcomments}
     */
    extractComments: BudMinimizeJSPublicInterface['extractComments'];
    /**
     * Get exclude
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#exclude}
     */
    getExclude: BudMinimizeJSPublicInterface['getExclude'];
    /**
     * Get extractComments
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#extractcomments}
     */
    getExtractComments: BudMinimizeJSPublicInterface['getExtractComments'];
    /**
     * Get include
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#include}
     */
    getInclude: BudMinimizeJSPublicInterface['getInclude'];
    /**
     * Get minify
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#minify}
     */
    getMinify: BudMinimizeJSPublicInterface['getMinify'];
    /**
     * Get parallel
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#parallel}
     */
    getParallel: BudMinimizeJSPublicInterface['getParallel'];
    /**
     * Get terserOptions
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#terserOptions}
     */
    getTerserOptions: BudMinimizeJSPublicInterface['getTerserOptions'];
    /**
     * Set include
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#include}
     */
    include: BudMinimizeJSPublicInterface['include'];
    /**
     * Value of {@link Options.minify}
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#minify}
     */
    minify: BudMinimizeJSPublicInterface['minify'];
    /**
     * parallel value
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#parallel}
     */
    parallel: BudMinimizeJSPublicInterface['parallel'];
    /**
     * Set exclude
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#exclude}
     */
    setExclude: BudMinimizeJSPublicInterface['setExclude'];
    /**
     * Set extractComments
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#extractcomments}
     */
    setExtractComments: BudMinimizeJSPublicInterface['setExtractComments'];
    /**
     * Set include
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#include}
     */
    setInclude: BudMinimizeJSPublicInterface['setInclude'];
    /**
     * Set minify
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#minify}
     */
    setMinify: BudMinimizeJSPublicInterface['setMinify'];
    /**
     * Set parallel
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#parallel}
     */
    setParallel: BudMinimizeJSPublicInterface['setParallel'];
    /**
     * Set terserOptions
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#terserOptions}
     */
    setTerserOptions: BudMinimizeJSPublicInterface['setTerserOptions'];
    /**
     * terserOptions
     *
     * @see {@link https://github.com/webpack-contrib/terser-webpack-plugin#terserOptions}
     */
    terserOptions: BudMinimizeJSPublicInterface['terserOptions'];
    /**
     * @deprecated Use {@link BudTerser.dropComments} instead
     */
    comments(comments?: boolean): this;
    /**
     * @deprecated Use {@link BudTerser.dropDebugger} instead
     */
    debugger(enable?: boolean): this;
    /**
     * Drop comments
     */
    dropComments(enable?: boolean): this;
    /**
     * Drop console
     */
    dropConsole(enable?: boolean): this;
    /**
     * Drop debugger statements
     */
    dropDebugger(enable?: boolean): this;
    /**
     * Mangle output
     * @deprecated Use {@link BudTerser.set} instead
     *
     * @example
     * ```js
     * bud.minimize.js.set(`terserOptions.mangle`, {})
     * ```
     */
    mangle(mangle: BudMinimizeJSPublicInterface['terserOptions']['mangle']): this;
    /**
     * @deprecated Use {@link BudTerser.set} instead
     *
     * @example
     * ```js
     * bud.minimize.js.set(`terserOptions.minify`, () => {})
     * ```
     */
    setMinifier(minify: any): this;
}
export { type BudMinimizeJSOptions, BudMinimizeJSPublicApi, type BudMinimizeJSPublicInterface, };
