@paroicms/server
Version:
The ParoiCMS server
101 lines • 3.83 kB
JavaScript
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