import path from 'path';
export function NodeGlobalsPolyfillPlugin({ buffer = false, 
// define = {},
process = true, } = {}) {
    return {
        name: 'node-globals-polyfill',
        setup({ initialOptions, onResolve, onLoad }) {
            onResolve({ filter: /_node-buffer-polyfill_\.js/ }, (arg) => {
                return {
                    path: path.resolve(__dirname, '../Buffer.js'),
                };
            });
            onResolve({ filter: /_node-process-polyfill_\.js/ }, (arg) => {
                return {
                    path: path.resolve(__dirname, '../process.js'),
                };
            });
            // TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
            // onLoad({ filter: /_virtual-process-polyfill_\.js/ }, (arg) => {
            //     const data = fs
            //         .readFileSync(path.resolve(__dirname, '../process.js'))
            //         .toString()
            //     const keys = Object.keys(define)
            //     return {
            //         loader: 'js',
            //         contents: data.replace(
            //             `const defines = {}`,
            //             'const defines = {\n' +
            //                 keys
            //                     .filter((x) => x.startsWith('process.'))
            //                     .sort((a, b) => a.length - b.length)
            //                     .map(
            //                         (k) =>
            //                             `  ${JSON.stringify(k).replace(
            //                                 'process.',
            //                                 '',
            //                             )}: ${define[k]},`,
            //                     )
            //                     .join('\n') +
            //                 '\n}',
            //         ),
            //     }
            // })
            onResolve({ filter: /_virtual-process-polyfill_\.js/ }, () => {
                return {
                    path: path.resolve(__dirname, '../process.js'),
                };
            });
            onResolve({ filter: /_virtual-buffer-polyfill_\.js/ }, () => {
                return {
                    path: path.resolve(__dirname, '../_buffer.js'),
                };
            });
            const polyfills = [];
            if (process) {
                polyfills.push(path.resolve(__dirname, '../_virtual-process-polyfill_.js'));
            }
            if (buffer) {
                polyfills.push(path.resolve(__dirname, '../_virtual-buffer-polyfill_.js'));
            }
            if (initialOptions.inject) {
                initialOptions.inject.push(...polyfills);
                // handle duplicate plugin
                initialOptions.inject = [...new Set(initialOptions.inject)];
            }
            else {
                initialOptions.inject = [...polyfills];
            }
        },
    };
}
export default NodeGlobalsPolyfillPlugin;
//# sourceMappingURL=index.js.map