import esbuild from 'esbuild'; import { copyFileSync, existsSync, mkdirSync } from 'node:fs'; import { builtinModules } from 'node:module'; import process from 'node:process'; const prod = process.argv[2] === 'production'; const VAULT = '/Users/andrey.epifancev/Library/Mobile Documents/iCloud~md~obsidian/Documents/voice-note-test'; const PLUGIN_DIR = `${VAULT}/.obsidian/plugins/voice-note`; // В dev-режиме после каждой сборки копируем плагин в тестовый vault, если он есть на этой машине. const copyToVault = { name: 'copy-to-vault', setup(build) { build.onEnd((result) => { if (result.errors.length > 0 || !existsSync(VAULT)) return; mkdirSync(PLUGIN_DIR, { recursive: true }); for (const file of ['main.js', 'manifest.json']) copyFileSync(file, `${PLUGIN_DIR}/${file}`); }); }, }; const context = await esbuild.context({ entryPoints: ['src/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', ...builtinModules, ], format: 'cjs', target: 'es2018', logLevel: 'info', sourcemap: prod ? false : 'inline', treeShaking: true, outfile: 'main.js', minify: prod, plugins: prod ? [] : [copyToVault], }); if (prod) { await context.rebuild(); process.exit(0); } else { await context.watch(); }