import { UserConfig, defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import copy from "@guanghechen/rollup-plugin-copy"; import manifest from "./manifest.json"; import path from "path"; import builtins from "builtin-modules"; import dotenv from "dotenv"; import dotenvExpand from "dotenv-expand"; const env = dotenv.config(); dotenvExpand.expand(env); export default defineConfig(async ({ mode }) => { const { resolve } = path; const prod = mode === "production"; let outDir = "dist"; if (!prod) { if (!process.env.OBSIDIAN_PLUGIN_DIR) { console.log( "Set OBSIDIAN_PLUGIN_DIR in the .env file to plugin directory to copy files to." ); } else { outDir = process.env.OBSIDIAN_PLUGIN_DIR + "/" + manifest.id + "-dev"; } } if (outDir[0] === "~") { outDir = path.join(process.env.HOME!, outDir.slice(1)); } return { plugins: [ svelte(), copy({ targets: [{ src: "manifest.json", dest: outDir }], }), ], resolve: { alias: { "@components": resolve(__dirname, "./src/components"), "@data-sources": resolve(__dirname, "./src/data-sources"), "@settings": resolve(__dirname, "./src/settings"), "@utils": resolve(__dirname, "./src/utils"), "@views": resolve(__dirname, "./src/views"), "@src": resolve(__dirname, "./src"), }, }, build: { lib: { entry: resolve(__dirname, "src/main.ts"), name: "main", fileName: () => "main.js", formats: ["cjs"], }, minify: prod, sourcemap: prod ? false : "inline", cssCodeSplit: false, emptyOutDir: false, outDir, rollupOptions: { input: { main: resolve(__dirname, "src/main.ts"), }, output: { entryFileNames: "main.js", assetFileNames: "styles.css", }, 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, ], }, }, } as UserConfig; });