UNPKG

@paroicms/server

Version:
62 lines 2.62 kB
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