UNPKG

@paroicms/server

Version:
101 lines 3.83 kB
import { loadSitePlugins } from "./plugin-loader.js"; import { getPluginAssetsUrl } from "./plugin-public-helpers.js"; export async function initialiseSitePlugins({ logger, regSite, pluginStaticConfigurations, pluginNamesOrRefs, }) { if (!pluginNamesOrRefs) return []; const pluginNames = []; const mergedStaticConfs = new Map(); for (const [name, conf] of Object.entries(pluginStaticConfigurations)) { if (!conf) continue; mergedStaticConfs.set(name, conf); if (!conf.platform) continue; pluginNames.push(name); } for (const nameOrRef of pluginNamesOrRefs) { if (typeof nameOrRef === "string") { if (pluginNames.includes(nameOrRef)) continue; pluginNames.push(nameOrRef); } else { const { name, disabled, configuration } = nameOrRef; if (pluginNames.includes(name) || disabled) continue; pluginNames.push(name); if (configuration) { if (mergedStaticConfs.has(name)) { logger.warn(`Plugin '${name}' is already registered, ignoring additional configuration.`); } else { mergedStaticConfs.set(name, { platform: false, configuration }); } } } } const plugins = await loadSitePlugins({ regSite, logger, pluginNames, pluginStaticConfigurations: mergedStaticConfs, }); for (const p of plugins) { const service = createBackendPluginInitService(logger, p, regSite); try { await p.plugin.siteInit?.(service); } catch (error) { logger.error(`Failed initializing plugin '${p.pluginName}'`, error); } } return plugins; } function createBackendPluginInitService(logger, plugin, regSite) { const { initData } = plugin; return { ...plugin.staticConfiguration, logger, setPublicAssetsDirectory(directory) { plugin.publicAssetsDir = directory; }, setAdminUiAssetsDirectory(directory) { plugin.adminUiAssetsDir = directory; plugin.adminUiPluginBaseUrl = initData.adminUiPluginBaseUrl; }, registerSiteSchemaLibrary(directory) { initData.siteSchemaLibraryDirectories.push(directory); }, registerLiquidRootDirectory(directory) { initData.liquidRootDirectories.push(directory); }, registerLiquidFilter(filterName, handler, options) { initData.liquidFilters.push({ filterName, handler, options }); }, registerOutLiquidTagFunction(fnName, handler, options) { initData.outLiquidTagHandlers.push({ fnName, handler, raw: options?.raw ?? false }); }, registerSetLiquidTagFunction(fnName, handler) { initData.setLiquidTagHandlers.push({ fnName, handler }); }, registerRenderingHook(hookName, handler) { initData.renderingHooks.push({ hookName, handler }); }, registerHook(hookName, handler, options = {}) { initData.hooks.push({ hookName, handler, options }); }, setPublicApiHandler(handler) { plugin.publicApiHandler = handler; }, addHeadTag(...htmlTags) { logger.warn(`addHeadTag is deprecated, use registerHeadTags instead. Plugin: ${plugin.pluginName}`); initData.headTagsHandlers.push(() => htmlTags); }, registerHeadTags(handler) { initData.headTagsHandlers.push(handler); }, registeredSite: regSite, pluginAssetsUrl: getPluginAssetsUrl(plugin), }; } //# sourceMappingURL=init-plugins.js.map