-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathesbuild.config.mjs
129 lines (120 loc) · 3.51 KB
/
esbuild.config.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
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
123
124
125
126
127
128
129
import esbuild from "esbuild";
import process from "process";
import builtins from "builtin-modules";
import { wasmLoader } from "esbuild-plugin-wasm";
import path from "node:path";
import fs from "node:fs";
const banner = `/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
`;
// referenced from https://esbuild.github.io/plugins/#webassembly-plugin
let imageMagickWasmPlugin = {
name: "imagemagick-wasm",
setup(build) {
// Resolve ".wasm" files to a path with a namespace
build.onResolve({ filter: /magick\.wasm$/ }, (args) => {
// If this is the import inside the stub module, import the
// binary itself. Put the path in the "wasm-binary" namespace
// to tell our binary load callback to load the binary file.
if (args.namespace === "imagemagick-stub") {
return {
path: args.path,
namespace: "imagemagick-binary",
};
}
// Otherwise, generate the JavaScript stub module for this
// ".wasm" file. Put it in the "wasm-stub" namespace to tell
// our stub load callback to fill it with JavaScript.
//
// Resolve relative paths to absolute paths here since this
// resolve callback is given "resolveDir", the directory to
// resolve imports against.
if (args.resolveDir === "") {
return; // Ignore unresolvable paths
}
return {
path: path.isAbsolute(args.path)
? args.path
: path.join(args.resolveDir, args.path),
namespace: "imagemagick-stub",
};
});
// Virtual modules in the "wasm-stub" namespace are filled with
// the JavaScript code for compiling the WebAssembly binary. The
// binary itself is imported from a second virtual module.
// build.onLoad(
// { filter: /.*/, namespace: "wasm-stub" },
// async (args) => ({
// contents: `import wasm from ${JSON.stringify(args.path)}
// export default (imports) =>
// WebAssembly.instantiate(wasm, imports).then(
// result => result.instance.exports)`,
// })
// );
build.onLoad(
{ filter: /.*/, namespace: "imagemagick-stub" },
async (args) => ({
contents: `import wasm from ${JSON.stringify(args.path)}
export default (imports)=>{
return imports.initializeImageMagick(wasm);
};
`,
})
);
// Virtual modules in the "wasm-binary" namespace contain the
// actual bytes of the WebAssembly file. This uses esbuild's
// built-in "binary" loader instead of manually embedding the
// binary data inside JavaScript code ourselves.
build.onLoad(
{ filter: /.*/, namespace: "imagemagick-binary" },
async (args) => ({
contents: await fs.promises.readFile(args.path),
loader: "binary",
})
);
},
};
const prod = process.argv[2] === "production";
const context = await esbuild.context({
banner: {
js: banner,
},
entryPoints: ["src/main.ts"],
bundle: true,
external: [
"obsidian",
"electron",
"@codemirror/autocomplete",
"@codemirror/collab",
"@codemirror/commands",
"@codemirror/language",
"@codemirror/lint",
"@codemirror/search",
"@codemirror/state",
"@codemirror/view",
"@lezer/common",
"@lezer/highlight",
"@lezer/lr",
...builtins,
],
// minify: prod ? true : false,
// minify: false,
plugins: [imageMagickWasmPlugin],
format: "cjs",
// format: "esm",
//this is mandatory for BitInt
target: "es2020",
// target: "es2018",
logLevel: "info",
sourcemap: prod ? false : "inline",
treeShaking: true,
outfile: "main.js",
});
if (prod) {
await context.rebuild();
process.exit(0);
} else {
await context.watch();
}