1import esbuild from "esbuild"
2import { wasmLoader } from "esbuild-plugin-wasm"
3
4import parseArgv from "tiny-parse-argv"
5
6const args = parseArgv(process.argv.slice(2), {
7 string: ["alias", "define", "inject"],
8})
9
10esbuild.build({
11 alias: {...obj("alias") },
12 bundle: true,
13 define: obj("define"),
14 entryPoints: [args._[0]],
15 format: "esm",
16 inject: arr("inject"),
17 minify: args.minify || false,
18 outdir: args.outdir || undefined,
19 outfile: args.outfile || undefined,
20 plugins: [wasmLoader()],
21 splitting: args.splitting || false,
22 target: "esnext",
23})
24
25function arr(name) {
26 return Object.entries(args)
27 .filter(([k, v]) => {
28 if (!k.includes(":")) return false
29 return k.split(":")[0] == name
30 })
31 .map(([k, v]) => {
32 return k.split(":").slice(1).join(":") + v
33 })
34}
35
36function obj(name) {
37 const entries = Object.entries(args)
38 .filter(([k, v]) => {
39 if (!k.includes(":")) return false
40 return k.split(":")[0] == name
41 })
42 .map(([k, v]) => {
43 return [k.split(":").slice(1).join(":"), v.toString()]
44 })
45
46 return Object.fromEntries(entries)
47}