import esbuild from "esbuild"; import process from "process"; import { builtinModules } from "node:module"; import path from "path"; import fs from "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 */ `; const prod = (process.argv[2] === "production"); const context = await esbuild.context({ banner: { js: banner, }, entryPoints: ["src/main.ts"], bundle: true, plugins: [{ name: "import-glob", setup: (build) => { build.onResolve({ filter: /^glob:.*$/ }, async (args) => { return { path: args.path.replace(/^glob:/, ''), namespace: 'import-glob', pluginData: { resolveDir: args.resolveDir }, }; }); build.onLoad({ filter: /.*/, namespace: 'import-glob' }, async (args) => { const files = fs.globSync(args.path, {cwd: args.pluginData.resolveDir}) .map((f) => f.split(path.sep).join('/')) .sort(); return { contents: [ ...files.map((module, i) => `import m${i} from './${module}'`), "export default {", ...files.map((f, i) => `${JSON.stringify(path.basename(f, path.extname(f)))}: m${i},`), "}", ].join("\n"), resolveDir: args.pluginData.resolveDir, }; }); }, }], 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", ...builtinModules, ], format: "cjs", target: "es2018", logLevel: "info", sourcemap: prod ? false : "inline", treeShaking: true, outfile: "main.js", minify: prod, }); if (prod) { await context.rebuild(); process.exit(0); } else { await context.watch(); }