@paroicms/server
Version:
The ParoiCMS server
42 lines • 1.71 kB
JavaScript
import { jsonTypeValidator } from "@paroicms/public-server-lib";
import { readdir, readFile } from "node:fs/promises";
import { join } from "node:path";
import { appendToSchemaLocales, createEmptyLocalizedTranslations, } from "./read-locales.js";
import { checkSiteSchemaFormatVersion } from "./site-schema-helpers.js";
const siteSchemaSuffix = ".site-schema.json";
export async function readSiteSchemaLibrary(dir) {
const result = [];
const filenames = await readdir(dir);
for (const filename of filenames) {
if (!filename.endsWith(siteSchemaSuffix))
continue;
const moduleName = filename.substring(0, filename.length - siteSchemaSuffix.length);
const module = await readJtSiteSchema({ filename, dir });
const l10n = createEmptyLocalizedTranslations(module.languages);
await appendToSchemaLocales({
dir,
baseFileName: `${moduleName}.site-schema.l10n`,
jsonTOnly: "JtSiteSchemaTranslations",
}, l10n);
result.push({
schemaName: moduleName,
module,
l10n,
});
}
return result;
}
async function readJtSiteSchema({ dir, filename }) {
const file = join(dir, filename);
const json = await readFile(file, {
encoding: "utf8",
});
const data = JSON.parse(json);
checkSiteSchemaFormatVersion(data.ParoiCMSSiteSchemaFormatVersion, { file });
const result = jsonTypeValidator.validate("JtSiteSchema", data);
if (!result.valid) {
throw new Error(`invalid site-schema module file '${filename}': ${result.error ?? "(missing message)"}`);
}
return data;
}
//# sourceMappingURL=site-schema-lib-reader.js.map