#!/usr/bin/env node // Compiles client-side TypeScript files with esbuild and writes the result // as TypeScript string-constant modules importable by the Cloudflare Worker. import { build } from 'esbuild'; import { writeFileSync, mkdirSync } from 'fs'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; const __dirname = dirname(fileURLToPath(import.meta.url)); const root = join(__dirname, '..'); const entries = [ { input: 'src/scripts/client/dashboard.ts', exportName: 'dashboardScript', output: 'src/scripts/generated/dashboard.ts', }, { input: 'src/scripts/client/emails-page.ts', exportName: 'emailsPageScript', output: 'src/scripts/generated/emails-page.ts', }, ]; mkdirSync(join(root, 'src/scripts/generated'), { recursive: true }); for (const { input, exportName, output } of entries) { const result = await build({ entryPoints: [join(root, input)], bundle: true, minify: true, write: false, target: 'es2020', platform: 'browser', format: 'iife', }); const code = new TextDecoder().decode(result.outputFiles[0].contents); const content = [ '// AUTO-GENERATED by scripts/build-client.mjs — do not edit directly.', '// Source: ' + input, '// Run `npm run build:client` to regenerate.', '/* eslint-disable */', 'export const ' + exportName + ' = ' + JSON.stringify(code) + ';', '', ].join('\n'); writeFileSync(join(root, output), content); console.log('Built:', output); }