forked from microsoft/vscode-github-issue-notebooks
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathesbuild.mjs
More file actions
executable file
·122 lines (111 loc) · 3.38 KB
/
esbuild.mjs
File metadata and controls
executable file
·122 lines (111 loc) · 3.38 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env node
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as esbuild from 'esbuild';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const watch = process.argv.includes('--watch');
const minify = process.argv.includes('--minify');
// Build for Node.js (ESM format)
const buildNode = async () => {
try {
const context = await esbuild.context({
entryPoints: ['./src/extension/extension.ts'],
bundle: true,
external: ['vscode'],
outfile: './dist/extension-node.js',
platform: 'neutral',
format: 'esm', // ESM output for Node.js
sourcemap: true,
minify: minify,
target: ['node22'],
});
if (watch) {
await context.watch();
console.log('Watching for changes in Node.js build...');
} else {
await context.rebuild();
await context.dispose();
}
} catch (err) {
console.error('Error building Node.js bundle:', err);
process.exit(1);
}
};
// Build for web (CommonJS format)
const buildWeb = async () => {
try {
const context = await esbuild.context({
entryPoints: ['./src/extension/extension.ts'],
bundle: true,
external: ['vscode'],
outfile: './dist/extension-web.cjs',
platform: 'browser',
format: 'cjs', // CommonJS for web (specifically for vscode-module import)
sourcemap: true,
minify: minify,
target: ['es2020'],
});
if (watch) {
await context.watch();
console.log('Watching for changes in Web build...');
} else {
await context.rebuild();
await context.dispose();
}
} catch (err) {
console.error('Error building Web bundle:', err);
process.exit(1);
}
};
// Build for renderer (ESM format for browser)
const buildRenderer = async () => {
try {
const context = await esbuild.context({
entryPoints: ['./src/renderer/index.tsx'],
bundle: true,
outfile: './dist/renderer.js',
platform: 'browser',
format: 'esm', // ESM for browser renderer
sourcemap: true,
minify: minify,
target: ['es2020'],
loader: {
'.css': 'text', // Use text loader for CSS files
},
jsx: 'automatic',
jsxFactory: 'h', // Use Preact's h function
jsxFragment: 'Fragment',
});
if (watch) {
await context.watch();
console.log('Watching for changes in Renderer build...');
} else {
await context.rebuild();
await context.dispose();
}
} catch (err) {
console.error('Error building Renderer bundle:', err);
process.exit(1);
}
};
// Create dist directory if it doesn't exist
if (!fs.existsSync(path.join(__dirname, 'dist'))) {
fs.mkdirSync(path.join(__dirname, 'dist'), { recursive: true });
}
// Run all builds
Promise.all([buildNode(), buildWeb(), buildRenderer()])
.then(() => {
if (!watch) {
console.log('All builds completed successfully!');
}
})
.catch((err) => {
console.error('Error during build process:', err);
process.exit(1);
});