@paroicms/connector
Version:
An API to help build management tools for ParoiCMS instances
43 lines • 1.8 kB
JavaScript
import { readdir, readFile } from "node:fs/promises";
import { join } from "node:path";
import { siteSchemaFormatVersion } from "../constants.js";
import { typeValidator } from "../context.js";
import { appendToSchemaLocales, createEmptyLocalizedTranslations, } from "./read-locales.js";
import { checkSiteSchemaVersion } 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 }, siteSchemaFormatVersion);
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 }, siteSchemaVersion) {
const file = join(dir, filename);
const json = await readFile(file, {
encoding: "utf8",
});
const data = JSON.parse(json);
checkSiteSchemaVersion(data.ParoiCMSSiteSchemaFormatVersion, { file }, siteSchemaVersion);
const result = typeValidator.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