UNPKG

@paroicms/connector

Version:

An API to help build management tools for ParoiCMS instances

91 lines 4.13 kB
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