@paroicms/server
Version:
The ParoiCMS server
43 lines • 1.79 kB
JavaScript
import { isObj } from "@paroicms/public-anywhere-lib";
import { rm } from "node:fs/promises";
import { createNewRegisteredSite } from "../connector/site-conf/site-conf.js";
import { addRegisteredSite, appConf, platformLogger, registeredSites, removeRegisteredSite, } from "../context.js";
import { getActiveSiteContext, unloadSiteContext } from "../site-context/site-context.js";
export async function registerNewSite(options) {
if (appConf.kind !== "multisite") {
throw new Error("registerNewSite is only available in multisite mode");
}
const newRegSite = await createNewRegisteredSite(options, appConf);
addRegisteredSite(newRegSite);
return newRegSite;
}
export async function removeSite(siteContext) {
const fqdn = siteContext.fqdn;
if (appConf.kind !== "multisite") {
throw new Error("removeSite is only available in multisite mode");
}
const regSite = registeredSites.get(fqdn);
if (!regSite)
throw new Error(`unknown site "${fqdn}"`);
removeRegisteredSite(fqdn);
const activeSiteContext = getActiveSiteContext(fqdn, { returnsUndef: true });
if (activeSiteContext) {
await unloadSiteContext(activeSiteContext);
}
const directories = Array.from(new Set([regSite.dataDir, regSite.cacheDir, regSite.backupDir, regSite.siteDir])).sort();
platformLogger.info(`Remove site "${fqdn}": ${directories.join(", ")}`);
for (const dir of directories) {
await rmDirRecursive(dir);
}
}
async function rmDirRecursive(dir) {
try {
await rm(dir, { recursive: true, force: true });
}
catch (error) {
if (!isObj(error) || (error.code !== "ENOENT" && error.code !== "ENOTDIR")) {
throw error;
}
}
}
//# sourceMappingURL=site-lifecycle-api.js.map