An easy-to-use platform for EEG experimentation in the classroom
1/**
2 * Post-build script for the EEG viewer assets.
3 *
4 * electron-vite's preload and renderer builds only support a single entry
5 * point each. This script uses esbuild directly to compile the viewer
6 * preload and the viewer renderer page after the main electron-vite build.
7 *
8 * Run automatically via the "postbuild" npm lifecycle hook.
9 */
10import { build } from 'esbuild';
11import { readFileSync, writeFileSync, mkdirSync } from 'fs';
12import { resolve, join } from 'path';
13import { fileURLToPath } from 'url';
14
15const __dirname = fileURLToPath(new URL('.', import.meta.url));
16const root = resolve(__dirname, '../..');
17
18// ----------------------------------------------------------------
19// 1. Viewer preload: src/preload/viewer.ts → out/preload/viewer.js
20// ----------------------------------------------------------------
21await build({
22 entryPoints: [resolve(root, 'src/preload/viewer.ts')],
23 bundle: true,
24 platform: 'node',
25 external: ['electron'],
26 outfile: resolve(root, 'out/preload/viewer.js'),
27 format: 'cjs',
28});
29
30// ----------------------------------------------------------------
31// 2. Viewer renderer: src/renderer/viewer.ts → out/renderer/viewer.js
32// ----------------------------------------------------------------
33const rendererOut = resolve(root, 'out/renderer');
34mkdirSync(rendererOut, { recursive: true });
35
36await build({
37 entryPoints: [resolve(root, 'src/renderer/viewer.ts')],
38 bundle: true,
39 platform: 'browser',
40 outfile: join(rendererOut, 'viewer.js'),
41 format: 'esm',
42});
43
44// ----------------------------------------------------------------
45// 3. viewer.html: copy src → out, update script src .ts → .js
46// ----------------------------------------------------------------
47let html = readFileSync(resolve(root, 'src/renderer/viewer.html'), 'utf-8');
48html = html.replace('src="./viewer.ts"', 'src="./viewer.js"');
49writeFileSync(join(rendererOut, 'viewer.html'), html);
50
51console.log('Viewer builds complete: out/preload/viewer.js, out/renderer/viewer.{js,html}');