-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathesbuild.js
More file actions
100 lines (92 loc) · 2.24 KB
/
Copy pathesbuild.js
File metadata and controls
100 lines (92 loc) · 2.24 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
const esbuild = require("esbuild");
const fs = require("node:fs");
const { copy } = require("esbuild-plugin-copy");
const package = require("./package.json");
const production = process.argv.includes("--production");
const watch = process.argv.includes("--watch");
const npmPackage = process.argv.includes("--npm-package");
/**
* @type {import('esbuild').Plugin}
*/
const esbuildProblemMatcherPlugin = {
name: "esbuild-problem-matcher",
setup(build)
{
build.onStart(() =>
{
console.log("[watch] build started");
});
build.onEnd(result =>
{
result.errors.forEach(({ text, location }) =>
{
console.error(`✘ [ERROR] ${text}`);
console.error(` ${location.file}:${location.line}:${location.column}:`);
});
console.log("[watch] build finished");
});
},
};
async function main(entryPoint = "src/extension.ts", outfile = "dist/extension.js", format = "cjs", banner, extraExternals = [])
{
const externalList = [
"vscode",
...(npmPackage ? Object.keys({ ...package.dependencies, ...package.peerDependencies }) : []),
...extraExternals,
];
const ctx = await esbuild.context({
entryPoints: [entryPoint],
metafile: true,
bundle: true,
format: format,
minify: production,
sourcemap: !production,
sourcesContent: false,
platform: "node",
target: "node18",
outfile: outfile,
external: externalList,
logLevel: "silent",
...(banner ? { banner } : {}),
plugins: [
/* add to the end of plugins array */
esbuildProblemMatcherPlugin,
copy({
resolveFrom: "cwd",
assets: {
from: ["./assets/grammars.json"],
to: ["./assets/grammars.copy.json"],
},
}),
],
});
if (watch)
{
await ctx.watch();
}
else
{
const result = await ctx.rebuild();
if (result.metafile)
fs.writeFileSync("esbuild-meta.json", JSON.stringify(result.metafile));
await ctx.dispose();
}
}
function runMain(entryPoint, outfile, format, banner, extraExternals)
{
main(entryPoint, outfile, format, banner, extraExternals).catch(e =>
{
console.error(e);
process.exit(1);
});
}
if (npmPackage)
{
runMain("src/index.ts", "dist/index.mjs", "esm");
runMain("src/index.ts", "dist/index.js", "cjs");
runMain("src/cli.ts", "dist/cli.js", "cjs", { js: "#!/usr/bin/env node" }, ["./index"]);
}
else
{
runMain();
}