UNPKG

@paroicms/connector

Version:

An API to help build management tools for ParoiCMS instances

43 lines 1.8 kB
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