const esbuild = require('esbuild');
const fs = require('fs');
const path = require('path');

const watch = process.argv.includes('--watch');
const minify = process.env.NODE_ENV === 'production';
const outdir = path.join(__dirname, '..', 'webview');

const stripTrailingWhitespacePlugin = {
  name: 'strip-trailing-whitespace',
  setup(build) {
    build.onEnd(() => {
      for (const file of ['webview.js', 'webview.css']) {
        const outputPath = path.join(outdir, file);
        if (!fs.existsSync(outputPath)) {
          continue;
        }
        const content = fs.readFileSync(outputPath, 'utf8');
        fs.writeFileSync(outputPath, content.replace(/[ \t]+$/gm, ''));
      }
    });
  },
};

const config = {
  entryPoints: [path.join(__dirname, 'src/index.tsx')],
  bundle: true,
  outdir,
  entryNames: 'webview',
  format: 'iife',
  platform: 'browser',
  target: 'es2020',
  loader: { '.tsx': 'tsx', '.ts': 'ts', '.css': 'css' },
  minify,
  sourcemap: true,
  define: { 'process.env.NODE_ENV': minify ? '"production"' : '"development"' },
  plugins: [stripTrailingWhitespacePlugin],
};

if (watch) {
  esbuild.context(config).then(ctx => {
    ctx.watch();
    console.log('[webview-ui] watching...');
  });
} else {
  esbuild.build(config).then(() => {
    console.log('[webview-ui] built successfully');
  });
}