import type { Plugin } from 'vite';

/**
 * Prevents Node.js-only modules from being bundled into the SPA browser build.
 *
 * - `node:stream`: dynamically imported in azureai provider behind `typeof window === 'undefined'`
 *   guard — dead code in browser but Rollup still resolves it.
 * - `node-fetch`: dynamically imported by klavis SDK's getFetchFn behind a runtime
 *   Node.js version check — dead code in browser since native fetch is available.
 */
export function viteNodeModuleStub(): Plugin {
  const stubbedModules = new Set(['node:stream', 'node-fetch']);
  const VIRTUAL_PREFIX = '\0node-stub:';

  return {
    enforce: 'pre',
    load(id) {
      if (id.startsWith(VIRTUAL_PREFIX)) return 'export default {};';
      return null;
    },
    name: 'vite-node-module-stub',
    resolveId(source) {
      if (stubbedModules.has(source)) {
        return { id: `${VIRTUAL_PREFIX}${source}`, moduleSideEffects: false };
      }
      return null;
    },
  };
}
