import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      'nostr-tools': path.resolve(__dirname, 'node_modules/nostr-tools'),
      'nostr-tools/nip06': path.resolve(__dirname, 'node_modules/nostr-tools/nip06'),
      'nostr-tools/core': path.resolve(__dirname, 'node_modules/nostr-tools/core'),
      stream: 'stream-browserify',
      util: 'util',
      crypto: 'crypto-browserify',
      assert: 'assert/',
      http: 'stream-http',
      https: 'https-browserify',
      url: 'url/',
      zlib: 'browserify-zlib',
      path: 'path-browserify',
      fs: false,
      tty: 'tty-browserify',
      net: false,
      dns: false,
      child_process: false,
      os: false
    },
    mainFields: ['module', 'jsnext:main', 'jsnext', 'main'],
  },
  optimizeDeps: {
    include: ['nostr-tools', 'nostr-tools/nip06', 'nostr-tools/core'],
    esbuildOptions: {
      define: {
        global: 'globalThis'
      }
    }
  },
  build: {
    sourcemap: true,
    target: 'esnext',
    chunkSizeWarningLimit: 1000,
    commonjsOptions: {
      include: [/node_modules/],
      transformMixedEsModules: true
    },
    rollupOptions: {
      external: [
        'stream', 'util', 'crypto', 'http', 'https', 'url', 'zlib', 
        'path', 'fs', 'tty', 'assert', 'net', 'dns', 'child_process', 'os'
      ],
      output: {
        globals: {
          stream: 'stream',
          util: 'util',
          crypto: 'crypto',
          http: 'http',
          https: 'https',
          url: 'url',
          zlib: 'zlib',
          path: 'path',
          assert: 'assert',
          tty: 'tty'
        }
      }
    }
  }
});