import esbuild from "esbuild"; import process from "process"; import { builtinModules } from 'module'; import fs from 'fs'; import path 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"); // Ensure the src/styles.css exists with Tailwind imports const initStylesFile = () => { const stylesDir = path.join(process.cwd(), 'src'); const stylesFile = path.join(stylesDir, 'styles.css'); if (!fs.existsSync(stylesDir)) { fs.mkdirSync(stylesDir, { recursive: true }); } if (!fs.existsSync(stylesFile)) { const tailwindImports = ` @tailwind base; @tailwind components; @tailwind utilities; /* Your custom styles here */ `.trim(); fs.writeFileSync(stylesFile, tailwindImports); } }; initStylesFile(); const context = await esbuild.context({ banner: { js: banner, }, entryPoints: ["src/main.tsx"], 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", ...builtinModules, ], format: "cjs", target: "es2018", logLevel: "info", sourcemap: prod ? false : "inline", treeShaking: true, outfile: "main.js", jsx: "automatic", }); if (prod) { await context.rebuild(); context.dispose(); } else { await context.watch(); }