diff --git a/scripts/build-client.mjs b/scripts/build-client.mjs new file mode 100644 index 0000000..cba1cf0 --- /dev/null +++ b/scripts/build-client.mjs @@ -0,0 +1,51 @@ +#!/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); +} diff --git a/src/scripts/client/tsconfig.json b/src/scripts/client/tsconfig.json new file mode 100644 index 0000000..6559a82 --- /dev/null +++ b/src/scripts/client/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "lib": ["ES2021", "DOM"], + "types": [], + "noEmit": true + }, + "include": ["./**/*"], + "exclude": [] +} diff --git a/tsconfig.json b/tsconfig.json index b92ba4e..9010f03 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,5 +17,5 @@ "jsxImportSource": "hono/jsx" }, "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist", "src/scripts/client/**/*"] }