import {existsSync, lstatSync, symlinkSync, unlinkSync} from "fs"; import {resolve} from "path"; const manifest = await Bun.file("manifest.json").json(); const pluginId: string = manifest.id; const vaultPath = process.argv[2] || process.env.OBSIDIAN_VAULT; if (!vaultPath) { console.error( "Usage: bun run scripts/symlink-to-vault.ts \n" + " or set OBSIDIAN_VAULT environment variable", ); process.exit(1); } const resolvedVault = resolve(vaultPath); const pluginsDir = resolve(resolvedVault, ".obsidian", "plugins"); const targetDir = resolve(pluginsDir, pluginId); const distDir = resolve(import.meta.dir, "..", "dist"); if (!existsSync(pluginsDir)) { console.error(`Invalid vault path: ${resolvedVault}`); console.error(`.obsidian/plugins directory not found at ${pluginsDir}`); process.exit(1); } if (!existsSync(distDir)) { console.error(`Build not found: run 'bun run build' first`); process.exit(1); } if (existsSync(targetDir)) { if (lstatSync(targetDir).isSymbolicLink()) { const link = lstatSync(targetDir); const linkTarget = resolve(pluginsDir, link.path); if (linkTarget !== distDir) { unlinkSync(targetDir); symlinkSync(distDir, targetDir); console.log(`Updated symlink: ${targetDir} -> ${distDir}`); } else { console.log(`Symlink already correct: ${targetDir} -> ${distDir}`); } } else { console.error(`${targetDir} exists and is not a symlink. Refusing to remove for safety.`); process.exit(1); } } else { symlinkSync(distDir, targetDir); console.log(`Created symlink: ${targetDir} -> ${distDir}`); }