UNPKG

@paroicms/server

Version:
86 lines 3.72 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 ?? []) { const qualifiedName = item.plugin ? `${item.name}[${item.plugin}]` : item.name; if (result.schema.fieldTypes[qualifiedName]) { throw new Error(`duplicate site field '${qualifiedName}'`); } result.schema.fieldTypes[qualifiedName] = 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; } const qualifiedL10n = qualifyFieldNamesInL10n(l10n, module.fieldTypes ?? []); mergeL10nDepth2(qualifiedL10n, result.l10n); } return result; } function qualifyFieldNamesInL10n(l10n, fieldTypes) { const plainToQualified = new Map(); for (const fieldType of fieldTypes) { const qualifiedName = fieldType.plugin ? `${fieldType.name}[${fieldType.plugin}]` : fieldType.name; plainToQualified.set(fieldType.name, qualifiedName); } const transformed = {}; for (const [language, data] of Object.entries(l10n)) { transformed[language] = { ...data }; if (data.fieldTypes) { const transformedFieldTypes = {}; for (const [plainName, fieldData] of Object.entries(data.fieldTypes)) { const qualifiedName = plainToQualified.get(plainName) ?? plainName; transformedFieldTypes[qualifiedName] = fieldData; } transformed[language].fieldTypes = transformedFieldTypes; } } return transformed; } //# sourceMappingURL=schema-lib.js.map