@paroicms/server
Version:
The ParoiCMS server
54 lines • 2.29 kB
JavaScript
import { unwrapReadFieldValue, unwrapReadFieldValues, } from "@paroicms/public-anywhere-lib";
import { createBackendPluginService, createPluginRenderingService, } from "./make-backend-plugin-service.js";
export async function executeRenderingHook(renderingContext, hookName, hookPayload) {
const { siteContext } = renderingContext;
const fieldValues = unwrapReadFieldValues(hookPayload.values);
for (const fieldType of hookPayload.fieldTypes) {
if (fieldType.storedAs === "labeling")
continue;
const { name, pluginName } = fieldType;
if (!pluginName)
continue;
const list = siteContext.renderingHooks.get(hookName);
if (!list)
continue;
const options = Object.freeze({
...hookPayload.options,
language: renderingContext.language,
fieldType,
});
let value = fieldValues[name];
for (const { handler, plugin } of list) {
if (value === undefined)
break;
const service = createPluginRenderingService(renderingContext, createBackendPluginService(siteContext, plugin));
value = await handler({ service, value, options });
}
if (value !== undefined) {
fieldValues[name] = value;
}
}
return fieldValues;
}
export async function executeRenderingHookForExcerpt(renderingContext, hookPayload) {
const { siteContext } = renderingContext;
if (hookPayload.value === undefined)
return;
let value = unwrapReadFieldValue(hookPayload.value).value;
const list = siteContext.renderingHooks.get("fieldPreprocessor");
if (!list)
return typeof value === "string" ? value : undefined;
const options = {
outputType: "plainText",
language: renderingContext.language,
fieldType: hookPayload.fieldType,
};
for (const { handler, plugin } of list) {
if (value === undefined)
break;
const service = createPluginRenderingService(renderingContext, createBackendPluginService(siteContext, plugin));
value = await handler({ service, value: value, options });
}
return typeof value === "string" ? value : undefined;
}
//# sourceMappingURL=rendering-hook.js.map