import esbuild from "esbuild"; import process from "process"; import builtins from "builtin-modules"; import { readFileSync } from "fs"; import { join } from 'path'; 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 */ `; const prod = (process.argv[2] === "production"); const wasmPlugin = { name: 'wasm', setup(build) { build.onResolve({ filter: /\.wasm$/ }, args => { if (args.resolveDir === '') return; return { path: join(args.resolveDir, args.path), namespace: 'wasm-binary', }; }); build.onLoad({ filter: /\.wasm$/, namespace: 'wasm-binary' }, async (args) => { const contents = readFileSync(args.path); const wasmBase64 = contents.toString('base64'); return { contents: ` const wasmBase64 = "${wasmBase64}"; const wasmBinary = Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0)); export default wasmBinary; `, loader: 'js', }; }); }, }; const context = await esbuild.context({ banner: { js: banner, }, entryPoints: ["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], format: "cjs", target: "es2018", logLevel: "info", sourcemap: prod ? false : "inline", treeShaking: true, outfile: "main.js", plugins: [ wasmPlugin ], minify: prod, }); if (prod) { await context.rebuild(); process.exit(0); } else { await context.watch(); }