//@ts-check import esbuild from "esbuild"; import process from "process"; import builtins from "builtin-modules"; import sveltePlugin from "esbuild-svelte"; import sveltePreprocess from "svelte-preprocess"; import fs from "node:fs"; // import terser from "terser"; import { minify } from "terser"; const banner = `/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD AND TERSER if you want to view the source, please visit the github repository of this plugin */ `; const prod = process.argv[2] === "production"; const terserOpt = { sourceMap: (!prod ? { url: "inline" } : {}), format: { indent_level: 2, beautify: true, comments: "some", ecma: 2018, preamble: banner, webkit: true }, parse: { // parse options }, compress: { // compress options defaults: false, evaluate: true, inline: 3, join_vars: true, loops: true, passes: prod ? 4 : 1, reduce_vars: true, reduce_funcs: true, arrows: true, collapse_vars: true, comparisons: true, lhs_constants: true, hoist_props: true, side_effects: true, if_return: true, ecma: 2018, unused: true, }, // mangle: { // // mangle options // keep_classnames: true, // keep_fnames: true, // properties: { // // mangle property options // } // }, ecma: 2018, // specify one of: 5, 2015, 2016, etc. enclose: false, // or specify true, or "args:values" keep_classnames: true, keep_fnames: true, ie8: false, module: false, // nameCache: null, // or specify a name cache object safari10: false, toplevel: false } const manifestJson = JSON.parse(fs.readFileSync("./manifest.json") + ""); const packageJson = JSON.parse(fs.readFileSync("./package.json") + ""); const updateInfo = JSON.stringify(fs.readFileSync("./updates.md") + ""); /** @type esbuild.Plugin[] */ const plugins = [{ name: 'my-plugin', setup(build) { let count = 0; build.onEnd(async result => { if (count++ === 0) { console.log('first build:', result); } else { console.log('subsequent build:'); } if (prod) { console.log("Performing terser"); const src = fs.readFileSync("./main_org.js").toString(); // @ts-ignore const ret = await minify(src, terserOpt); if (ret && ret.code) { fs.writeFileSync("./main.js", ret.code); } console.log("Finished terser"); } else { fs.copyFileSync("./main_org.js", "./main.js"); } }); }, }]; const context = await esbuild.context({ banner: { js: banner, }, entryPoints: ["src/main.ts"], bundle: true, define: { "MANIFEST_VERSION": `"${manifestJson.version}"`, "PACKAGE_VERSION": `"${packageJson.version}"`, "UPDATE_INFO": `${updateInfo}`, "global": "window", }, external: [ "obsidian", "electron", "crypto", "@codemirror/autocomplete", "@codemirror/collab", "@codemirror/commands", "@codemirror/language", "@codemirror/lint", "@codemirror/search", "@codemirror/state", "@codemirror/view", "@lezer/common", "@lezer/highlight", "@lezer/lr"], // minifyWhitespace: true, format: "cjs", target: "es2018", logLevel: "info", platform: "browser", sourcemap: prod ? false : "inline", treeShaking: true, outfile: "main_org.js", minifyWhitespace: false, minifySyntax: false, minifyIdentifiers: false, minify: false, // keepNames: true, plugins: [ sveltePlugin({ preprocess: sveltePreprocess(), compilerOptions: { css: true, preserveComments: true }, }), ...plugins ], }) if (prod) { await context.rebuild(); process.exit(0); } else { await context.watch(); }