import { defineConfig } from 'vite';
import { crx } from '@crxjs/vite-plugin';
import { nodePolyfills } from 'vite-plugin-node-polyfills';
import manifest from './manifest.json';

export default defineConfig({
  plugins: [
    crx({
      manifest,
      contentScripts: {
        injectCss: false,
      },
    }),
    nodePolyfills({
      include: ['buffer'],
      globals: {
        Buffer: true,
        global: false,
        process: false,
      },
      protocolImports: false,
    }),
  ],
  resolve: {
    alias: {
      ebml: 'ebml/lib/ebml.js',
    },
  },
  // `define` text-replaces token symbols at bundle time. We declare
  // __MOKOSH_UAT__ as `false` in the production config so the gated
  // hook-import branches in src/background/index.ts + src/offscreen/
  // recorder.ts are static dead branches that Rollup tree-shakes. The
  // test-only build (vite.test.config.ts) overrides this to `true`. We
  // chose a dedicated token rather than gating on import.meta.env.MODE
  // because vitest also uses MODE='test' by default — gating on MODE
  // would activate the hooks during unit tests and overwrite the
  // vi.fn() chrome.* mocks the existing 83-test baseline relies on.
  // Reference: https://vite.dev/config/shared-options.html#define
  define: {
    __MOKOSH_UAT__: 'false',
  },
  build: {
    // Plan 01-11: bump from default ES2020 to ES2022 so gated top-level
    // await (`if (__MOKOSH_UAT__) { await import(...); }` in
    // src/background/index.ts + src/offscreen/recorder.ts) compiles.
    // The extension targets MV3 (Chrome ≥88); top-level await landed in
    // Chrome 89 / Edge 89 / Firefox 89 / Safari 15 per MDN — comfortably
    // inside the MV3 compatibility envelope.
    // Reference: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/await#browser_compatibility
    // Reference: https://vite.dev/config/build-options.html#build-target
    target: 'es2022',
    rollupOptions: {
      input: {
        offscreen: 'src/offscreen/index.html',
      },
    },
  },
});
