88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
import { main as build, esbuildOptions } from "./build.mjs";
|
|
import { openDevToolScript, reloadScript } from "./scripts.mjs";
|
|
import { main as startZotero } from "./start.mjs";
|
|
import { Logger } from "./utils.mjs";
|
|
import cmd from "./zotero-cmd.json" assert { type: "json" };
|
|
import { execSync } from "child_process";
|
|
import chokidar from "chokidar";
|
|
import { context } from "esbuild";
|
|
import { exit } from "process";
|
|
|
|
process.env.NODE_ENV = "development";
|
|
|
|
const { zoteroBinPath, profilePath } = cmd.exec;
|
|
|
|
const startZoteroCmd = `"${zoteroBinPath}" --debugger --purgecaches -profile "${profilePath}"`;
|
|
|
|
async function watch() {
|
|
const watcher = chokidar.watch(["src/**", "addon/**"], {
|
|
ignored: /(^|[\/\\])\../, // ignore dotfiles
|
|
persistent: true,
|
|
});
|
|
|
|
let esbuildCTX = await context(esbuildOptions);
|
|
|
|
watcher
|
|
.on("ready", () => {
|
|
Logger.info("Server Ready! \n");
|
|
})
|
|
.on("change", async (path) => {
|
|
Logger.info(`${path} changed.`);
|
|
if (path.startsWith("src")) {
|
|
await esbuildCTX.rebuild();
|
|
} else if (path.startsWith("addon")) {
|
|
await build()
|
|
// Do not abort the watcher when errors occur in builds triggered by the watcher.
|
|
.catch((err) => {
|
|
Logger.error(err);
|
|
});
|
|
}
|
|
// reload
|
|
reload();
|
|
})
|
|
.on("error", (err) => {
|
|
Logger.error("Server start failed!", err);
|
|
});
|
|
}
|
|
|
|
function reload() {
|
|
Logger.debug("Reloading...");
|
|
const url = `zotero://ztoolkit-debug/?run=${encodeURIComponent(
|
|
reloadScript,
|
|
)}`;
|
|
const command = `${startZoteroCmd} -url "${url}"`;
|
|
execSync(command);
|
|
}
|
|
|
|
function openDevTool() {
|
|
Logger.debug("Open dev tools...");
|
|
const url = `zotero://ztoolkit-debug/?run=${encodeURIComponent(
|
|
openDevToolScript,
|
|
)}`;
|
|
const command = `${startZoteroCmd} -url "${url}"`;
|
|
execSync(command);
|
|
}
|
|
|
|
async function main() {
|
|
// build
|
|
await build();
|
|
|
|
// start Zotero
|
|
startZotero(openDevTool);
|
|
|
|
// watch
|
|
await watch();
|
|
}
|
|
|
|
main().catch((err) => {
|
|
Logger.error(err);
|
|
// execSync("node scripts/stop.mjs");
|
|
exit(1);
|
|
});
|
|
|
|
process.on("SIGINT", (code) => {
|
|
execSync("node scripts/stop.mjs");
|
|
Logger.info(`Server terminated with signal ${code}.`);
|
|
exit(0);
|
|
});
|