import { Plugin } from 'esbuild';

interface PolyfillNodeOptions {
    /**
     * Whether to inject globals.
     *
     * Set to `false` to disable all globals.
     */
    globals?: false | {
        /**
         * Whether to inject the `global` global.
         *
         * It is set as an alias of `globalThis`.
         *
         * @default true
         */
        global?: boolean;
        /**
         * Whether to inject the `__dirname` global.
         *
         * Always defined as `/`.
         *
         * @default true
         */
        __dirname?: boolean;
        /**
         * Whether to inject the `__filename` global.
         *
         * Always defined as `/index.js`.
         *
         * @default true
         */
        __filename?: boolean;
        /**
         * Whether to inject the `Buffer` global.
         *
         * Disable it to prevent code like `if (typeof Buffer !== "undefined")`
         * from pulling in the (quite large) Buffer polyfill.
         *
         * @default true
         */
        buffer?: boolean;
        /**
         * Whether to inject the `process` global.
         *
         * Disable it to prevent `process.env.NODE_ENV` from pulling in the
         * `process-es6` polyfill. You can use the `define` option to replace
         * `process.env.NODE_ENV` instead.
         *
         * @default true
         */
        process?: boolean;
        /**
         * Whether to inject the `navigator` global.
         *
         * It is used by some of the polyfills.
         *
         * @default false
         */
        navigator?: boolean;
    };
    polyfills?: {
        _stream_duplex?: boolean | "empty";
        _stream_passthrough?: boolean | "empty";
        _stream_readable?: boolean | "empty";
        _stream_transform?: boolean | "empty";
        _stream_writable?: boolean | "empty";
        assert?: boolean | "empty";
        "assert/strict"?: boolean | "empty";
        async_hooks?: boolean | "empty";
        buffer?: boolean | "empty";
        child_process?: boolean | "empty";
        cluster?: boolean | "empty";
        console?: boolean | "empty";
        constants?: boolean | "empty";
        crypto?: boolean | "empty";
        dgram?: boolean | "empty";
        diagnostics_channel?: boolean | "empty";
        dns?: boolean | "empty";
        domain?: boolean | "empty";
        events?: boolean | "empty";
        fs?: boolean | "empty";
        "fs/promises"?: boolean | "empty";
        http?: boolean | "empty";
        http2?: boolean | "empty";
        https?: boolean | "empty";
        module?: boolean | "empty";
        net?: boolean | "empty";
        os?: boolean | "empty";
        path?: boolean | "empty";
        perf_hooks?: boolean | "empty";
        process?: boolean | "empty";
        punycode?: boolean | "empty";
        querystring?: boolean | "empty";
        readline?: boolean | "empty";
        repl?: boolean | "empty";
        stream?: boolean | "empty";
        string_decoder?: boolean | "empty";
        sys?: boolean | "empty";
        timers?: boolean | "empty";
        "timers/promises"?: boolean | "empty";
        tls?: boolean | "empty";
        tty?: boolean | "empty";
        url?: boolean | "empty";
        util?: boolean | "empty";
        v8?: boolean | "empty";
        vm?: boolean | "empty";
        wasi?: boolean | "empty";
        worker_threads?: boolean | "empty";
        zlib?: boolean | "empty";
    };
}
declare function polyfillNode(options?: PolyfillNodeOptions): Plugin;
interface PolyfillNodeForDenoOptions {
    stdVersion?: string;
    globals?: boolean;
    polyfills?: {
        assert?: boolean | "empty";
        "assert/strict"?: boolean | "empty";
        buffer?: boolean | "empty";
        child_process?: boolean | "empty";
        console?: boolean | "empty";
        constants?: boolean | "empty";
        crypto?: boolean | "empty";
        domain?: false | "empty";
        events?: boolean | "empty";
        fs?: boolean | "empty";
        "fs/promises"?: boolean | "empty";
        http?: boolean | "empty";
        https?: boolean | "empty";
        module?: boolean | "empty";
        net?: boolean | "empty";
        os?: boolean | "empty";
        path?: boolean | "empty";
        perf_hooks?: boolean | "empty";
        process?: boolean | "empty";
        punycode?: false | "empty";
        querystring?: boolean | "empty";
        readline?: boolean | "empty";
        stream?: boolean | "empty";
        string_decoder?: boolean | "empty";
        sys?: boolean | "empty";
        timers?: boolean | "empty";
        "timers/promises"?: boolean | "empty";
        tty?: boolean | "empty";
        url?: boolean | "empty";
        util?: boolean | "empty";
        vm?: false | "empty";
        worker_threads?: boolean | "empty";
        zlib?: false | "empty";
    };
}
declare function polyfillNodeForDeno(options?: PolyfillNodeForDenoOptions): Plugin;

export { PolyfillNodeForDenoOptions, PolyfillNodeOptions, polyfillNode, polyfillNodeForDeno };
