@paroicms/server
Version:
The ParoiCMS server
62 lines • 2.62 kB
JavaScript
import { initialiseSitePlugins } from "../plugin-loader/init-plugins.js";
import { createEmptyLocalizedTranslations, mergeL10nDepth2, } from "./read-locales.js";
import { readSiteSchemaLibrary } from "./site-schema-lib-reader.js";
const libByDirectories = new Map();
export async function prepareLib(options) {
const { commonSchemaLib, languages, ...pluginOptions } = options;
const plugins = await initialiseSitePlugins(pluginOptions);
const allParsedSchema = [...commonSchemaLib.defaultLib];
for (const plugin of plugins) {
for (const dir of plugin.initData.siteSchemaLibraryDirectories) {
let cached = libByDirectories.get(dir);
if (!cached) {
cached = await readSiteSchemaLibrary(dir);
libByDirectories.set(dir, cached);
}
allParsedSchema.push(...cached);
}
}
const result = {
common: commonSchemaLib.common,
plugins: new Map(plugins.map((p) => [p.pluginName, p])),
schema: {
fieldTypes: {},
nodeTypes: {},
mediaPolicies: {},
},
l10n: createEmptyLocalizedTranslations(languages),
};
for (const parsed of allParsedSchema) {
const { module, l10n } = parsed;
if (parsed.module.imageQualityPolicy) {
if (result.schema.imageQualityPolicy) {
throw new Error("duplicated 'imageQualityPolicy' in site-schema");
}
result.schema.imageQualityPolicy = parsed.module.imageQualityPolicy;
}
for (const item of module.fieldTypes ?? []) {
if (result.schema.fieldTypes[item.name]) {
throw new Error(`duplicate site field '${item.name}'`);
}
result.schema.fieldTypes[item.name] = item;
}
for (const item of module.nodeTypes ?? []) {
const typeName = item.kind === "site" ? "_site" : item.typeName;
if (result.schema.nodeTypes[typeName]) {
throw new Error(`duplicate node type '${typeName}'`);
}
result.schema.nodeTypes[typeName] = item;
}
for (const item of module.mediaPolicies ?? []) {
if (typeof item === "string")
continue;
if (result.schema.mediaPolicies[item.policyName]) {
throw new Error(`duplicate media policy '${item.policyName}'`);
}
result.schema.mediaPolicies[item.policyName] = item;
}
mergeL10nDepth2(l10n, result.l10n);
}
return result;
}
//# sourceMappingURL=schema-lib.js.map