-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathbuild.mjs
More file actions
77 lines (67 loc) · 2.34 KB
/
build.mjs
File metadata and controls
77 lines (67 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import * as esbuild from 'esbuild';
import { mkdirSync, readFileSync, writeFileSync, watch } from 'fs';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
import { createRequire } from 'module';
const __dirname = dirname(fileURLToPath(import.meta.url));
const require = createRequire(import.meta.url);
const postcss = require('postcss');
const tailwindcss = require('@tailwindcss/postcss');
const isWatch = process.argv.includes('--watch');
mkdirSync(resolve(__dirname, 'dist'), { recursive: true });
mkdirSync(resolve(__dirname, 'dist', 'webview'), { recursive: true });
/** @type {import('esbuild').BuildOptions} */
const extensionBuildOptions = {
entryPoints: ['./src/extension.ts'],
bundle: true,
outfile: 'dist/extension.js',
external: ['vscode'],
format: 'cjs',
platform: 'node',
sourcemap: true,
};
/** @type {import('esbuild').BuildOptions} */
const webviewBuildOptions = {
entryPoints: ['./src/webview/board.ts'],
bundle: true,
outfile: 'dist/webview/board.js',
format: 'iife',
platform: 'browser',
sourcemap: true,
target: ['es2022'],
};
async function buildCss() {
const input = readFileSync('./src/webview/board.css', 'utf8');
const result = await postcss([
tailwindcss,
]).process(input, { from: './src/webview/board.css', to: './dist/webview/board.css' });
writeFileSync('./dist/webview/board.css', result.css);
if (result.map) {
writeFileSync('./dist/webview/board.css.map', result.map.toString());
}
}
if (isWatch) {
await buildCss();
console.log('CSS built.');
// Re-build CSS when webview source files change
watch('./src/webview', { recursive: true }, async (_event, filename) => {
if (filename?.endsWith('.css')) {
try {
await buildCss();
console.log('CSS rebuilt.');
} catch (err) {
console.error('CSS build error:', err.message);
}
}
});
const extCtx = await esbuild.context(extensionBuildOptions);
const webCtx = await esbuild.context(webviewBuildOptions);
await extCtx.watch();
await webCtx.watch();
console.log('Watching for changes...');
} else {
await buildCss();
await esbuild.build(extensionBuildOptions);
await esbuild.build(webviewBuildOptions);
console.log('Build complete.');
}