-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathesbuild.mjs
85 lines (74 loc) · 1.9 KB
/
esbuild.mjs
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
// @ts-check
import * as esbuild from "esbuild";
const watch = process.argv.includes("--watch");
const minify = process.argv.includes("--minify");
const success = watch ? "Watch build succeeded" : "Build succeeded";
const pad = (i) => i.toString().padStart(2, "0");
function getTime() {
const date = new Date();
const hours = pad(date.getHours());
const minutes = pad(date.getMinutes());
const seconds = pad(date.getSeconds());
return `[${`${hours}h${minutes}:${seconds}`}] `;
}
/** @type {import('esbuild').Plugin[]} */
const plugins = [
{
name: "watch-plugin",
setup: (build) =>
build.onEnd((result) =>
result.errors.length === 0 ? console.log(getTime() + success) : null
),
},
/**
* This plugin hooks into the build process to print errors in a format that the problem matcher in
* Visual Studio Code can understand.
*/
{
name: "esbuild-problem-matcher",
setup(build) {
build.onStart(() => {
console.log("[watch] build started");
});
build.onEnd((result) => {
result.errors.forEach(({ text, location }) => {
if (!location) return;
console.error(`✘ [ERROR] ${text}`);
console.error(
` ${location.file}:${location.line}:${location.column}:`
);
});
console.log("[watch] build finished");
});
},
},
];
const ctx = await esbuild.context({
entryPoints: ["src/extension.ts"],
outdir: "extension",
bundle: true,
target: "ES2017",
loader: { ".ts": "ts" },
external: ["vscode"],
platform: "browser",
sourcemap: !minify,
define: {
global: "globalThis",
},
minify,
plugins,
/**
* VSCode's extension host is still using cjs,
* so it's needed to use cjs to avoid any issues.
*/
format: "cjs",
outExtension: {
".js": ".cjs",
},
});
if (watch) {
await ctx.watch();
} else {
await ctx.rebuild();
ctx.dispose();
}