@paroicms/connector
Version:
An API to help build management tools for ParoiCMS instances
42 lines • 1.98 kB
JavaScript
import { ensureDirectory, makeSecret } from "@paroicms/internal-server-lib";
import { format } from "date-fns";
import { join, normalize } from "node:path";
import { copySiteSchema, copyThemeFiles, copyTranslateFiles, makeContentDirectories, makeDefaultConfigJsonFile, makePackageJsonFile, } from "../single-site-builder/site-builder.js";
import { createZipArchive } from "./archiver.helper.js";
export async function buildSiteBackup(siteContext, { backupTempDir, archiveBaseName, serverVersion, }) {
const { siteDir, dataDir, logger } = siteContext;
const themeDir = join(siteDir, "theme");
try {
await copyThemeFiles(themeDir, backupTempDir);
await makeContentDirectories(backupTempDir, { copyFilesFromDataDir: dataDir });
await makePackageJsonFile(backupTempDir, siteDir, {
serverPackageVersions: `~${serverVersion}`,
});
await makeDefaultConfigJsonFile(backupTempDir, { devAccount: true });
await copySiteSchema(siteDir, backupTempDir);
await copyTranslateFiles(siteDir, backupTempDir);
const tempArchiveDir = normalize(`${backupTempDir}/../`);
const { archivePath, archiveWeight, completeArchiveName } = await createZipArchive({
sourceDir: backupTempDir,
destDir: tempArchiveDir,
filename: archiveBaseName,
logger,
});
return {
zipFilePath: archivePath,
zipFileWeight: archiveWeight,
zipFileName: completeArchiveName,
};
}
catch (error) {
throw new Error(`[backup]: failed to build backup file: ${error}`);
}
}
export async function makeBackupTempDir(siteFqdn, tmpDir) {
const randomKey = makeSecret(3);
const dirName = `${format(new Date(), "yyyyMMdd-HHmm")}-${siteFqdn}-${randomKey}`;
const dirPath = join(tmpDir, dirName);
await ensureDirectory(dirPath);
return { dirName, dirPath };
}
//# sourceMappingURL=backup-tasks.js.map