@paroicms/connector
Version:
An API to help build management tools for ParoiCMS instances
91 lines • 4.13 kB
JavaScript
import { copyFile, cp, readdir, readFile, rm, writeFile } from "node:fs/promises";
import { join } from "node:path";
import { ensureDirectory } from "@paroicms/internal-server-lib";
import { makeDefaultConfigForSingleSite } from "./default-config.js";
import { makeDefaultReadme } from "./default-readme.js";
export async function makeDefaultConfigJsonFile(siteDir, options = {}) {
const configJsonContent = makeDefaultConfigForSingleSite(options);
const configJsonFilePath = join(siteDir, "config.json");
await writeFile(configJsonFilePath, configJsonContent);
}
export async function makeContentDirectories(siteDir, options) {
await makeCacheDir(siteDir);
await makeBackupDir(siteDir);
await makeDataDir(siteDir, options);
}
export async function makeCacheDir(siteDir) {
const cacheDir = join(siteDir, "cache");
await ensureDirectory(cacheDir);
await writeFile(join(cacheDir, "README.md"), makeDefaultReadme());
}
export async function makeBackupDir(siteDir) {
const backupDir = join(siteDir, "backup");
await ensureDirectory(backupDir);
await writeFile(join(backupDir, "README.md"), makeDefaultReadme());
}
export async function makeDataDir(siteDir, options) {
const dataDir = join(siteDir, "data");
await ensureDirectory(dataDir);
if (options?.copyFilesFromDataDir) {
await copyFile(join(options.copyFilesFromDataDir, "main.sqlite"), join(dataDir, "main.sqlite"));
await copyFile(join(options.copyFilesFromDataDir, "medias.sqlite"), join(dataDir, "medias.sqlite"));
}
}
export async function makePackageJsonFile(siteDir, originalPackageJsonDir, options) {
const originalPackageJsonPath = join(originalPackageJsonDir, "package.json");
const fileContent = await readFile(originalPackageJsonPath, { encoding: "utf-8" });
let contentParsed = JSON.parse(fileContent);
const dependencies = (contentParsed.dependencies ?? {});
if (!("@paroicms/server" in dependencies)) {
contentParsed.dependencies = {
...dependencies,
"@paroicms/server": options.serverPackageVersions,
};
}
if (options.asBoilerplate) {
contentParsed = {
name: options.packageName ?? "missing-package-name",
version: "0.0.0",
private: true,
scripts: contentParsed.scripts,
dependencies: contentParsed.dependencies,
devDependencies: contentParsed.devDependencies,
};
}
const packageJsonPath = join(siteDir, "package.json");
await writeFile(packageJsonPath, JSON.stringify(contentParsed, undefined, 2));
}
export async function copySiteSchema(sourceDir, siteDir) {
const sourcePath = join(sourceDir, "site-schema.json");
const destPath = join(siteDir, "site-schema.json");
await copyFile(sourcePath, destPath);
}
export async function copyTranslateFiles(sourceDir, siteDir, languages) {
const files = await readdir(sourceDir, { encoding: "utf-8" });
for (const file of files) {
if (!file.match(/^site-schema\.l10n\..*\.json$/))
continue;
if (languages && !languages.includes(file.split(".")[2]))
continue;
const translateFilePath = join(sourceDir, file);
await copyFile(translateFilePath, join(siteDir, file));
}
}
export async function copyThemeFiles(sourceThemeDir, siteDir, options) {
const themeDir = join(siteDir, "theme");
await ensureDirectory(themeDir);
await cp(sourceThemeDir, themeDir, { recursive: true });
if (options?.isMonolingual)
await rm(join(themeDir, "templates", "index.liquid"));
}
export async function readSiteSchema(siteDir) {
const siteSchemaPath = join(siteDir, "site-schema.json");
const fileContent = await readFile(siteSchemaPath, { encoding: "utf-8" });
const contentParsed = JSON.parse(fileContent);
return contentParsed;
}
export async function writeSiteSchema(siteDir, content) {
const siteSchemaPath = join(siteDir, "site-schema.json");
await writeFile(siteSchemaPath, JSON.stringify(content, undefined, 2));
}
//# sourceMappingURL=site-builder.js.map