import { EventEmitter } from 'node:events';
import { Plugin } from 'vite';
import { PlatformPath } from 'node:path';

declare global {
    var __buildInProgress: boolean;
    var __buildCompleted: boolean;
    var __server: any;
    var __inlineScriptContents: any;
    var __virtualInlineScript: string;
    var __eventEmitter: EventEmitter;
    var __runner: any;
    var __runnerNum: number;
    var __manifestVersion: number;
    var __finalManifests: any;
    var __config: any;
    var __jsCatch: Map<string, string>;
    var __builder: any;
    var __content_scripts_css: any;
    var __dependenciesMap: Map<string, any>;
    var __changeFuncArray: (() => Promise<any>)[];
    var __changeFuncArrayStatus: boolean;
    var __changeStartFunc: () => void;
    var __buildFuncArray: (() => Promise<any>)[];
    var __buildStateFunc: () => void;
    var __errorState: any;
}
type resolveType = PlatformPath["resolve"] extends (...args: any[]) => infer R ? R : string;
interface BuildCrxNotifierPluginOptions {
    htmlPaths?: {
        name: string;
        path: resolveType;
    }[];
    jsPaths?: {
        name: string;
        path: resolveType;
    }[];
    manifestPath: resolveType;
    manifestData?: Record<string, any>;
    copyPaths?: {
        src: resolveType;
        dest: resolveType;
    }[];
    wxtUserConfig?: {
        browser?: string;
        binaries?: {
            firefox?: string;
            chromium?: string;
            edge?: string;
        };
        chromiumProfile?: string;
        chromiumPref?: string;
        chromiumArgs?: string[];
        firefoxProfile?: string;
        firefoxPrefs?: string;
        firefoxArgs?: string[];
        openConsole?: boolean;
        openDevtools?: boolean;
        startUrls?: string[];
        keepProfileChanges?: boolean;
        outDir?: string;
    };
}
/**
 * 启动本地开发环境工具浏览器插件热更新，主动重新加载插件实现更新
 * 用于配置开发模式下的端口、文件监听路径及延迟行为
 *
 * @param param0
 * @param options.htmlPaths - 需要监听/处理的 HTML 文件路径数组（默认：空数组）,用于插入接收热更新更新消息并重新加载插件
 * @param options.jsPaths - 需要监听/处理的 JS 文件路径数组（默认：空数组）,用于插入接收热更新更新消息并重新加载插件
 * @param options.manifestPath - 需要监听/处理的 manifest.json 文件路径（默认：空字符串）,用于插入接收热更新更新消息并重新加载插件
 * @param options.copyPaths - 需要拷贝的文件路径
 * @param options.manifestData - 需要写入到manifest.json的数据（默认：空对象）
 * @param options.wxtUserConfig - 浏览器配置
 * @param options.wxtUserConfig.browser - 浏览器类型
 * @param options.wxtUserConfig.binaries - 浏览器二进制文件
 * @param options.wxtUserConfig.binaries.chrome - Chrome浏览器二进制文件
 * @param options.wxtUserConfig.binaries.firefox - Firefox浏览器二进制文件
 * @param options.wxtUserConfig.binaries.edge - Edge浏览器二进制文件
 * @param options.wxtUserConfig.chromiumProfile - 浏览器配置文件
 * @param options.wxtUserConfig.chromiumPref - 浏览器偏好设置
 * @param options.wxtUserConfig.chromiumArgs - 浏览器参数
 * @param options.wxtUserConfig.firefoxProfile - 火狐浏览器配置文件
 * @param options.wxtUserConfig.firefoxPrefs - 火狐浏览器偏好设置
 * @param options.wxtUserConfig.firefoxArgs - 火狐浏览器参数
 * @param options.wxtUserConfig.openConsole - 是否打开浏览器控制台
 * @param options.wxtUserConfig.openDevtools - 是否打开浏览器开发者工具
 * @param options.wxtUserConfig.startUrls - 启动URL
 * @param options.wxtUserConfig.keepProfileChanges - 是否保持浏览器配置
 * @param options.wxtUserConfig.outDir - 输出目录
 * @returns
 */
declare function vitePluginBrowserextHmr({ htmlPaths, jsPaths, manifestPath, manifestData, // 需要写入到manifest.json的数据
copyPaths, wxtUserConfig, }: BuildCrxNotifierPluginOptions): Plugin;

export { vitePluginBrowserextHmr };
