@paroicms/server
Version:
The ParoiCMS server
47 lines • 1.81 kB
JavaScript
import { getNodeTypeByName } from "@paroicms/internal-anywhere-lib";
import { type } from "arktype";
import { executeHook } from "./make-backend-plugin-service.js";
const StringOrUndefOrNullAT = type("string|undefined|null");
export async function executeBeforeSaveValues(siteContext, options) {
const { typeName, language, values } = options;
const nodeType = getNodeTypeByName(siteContext.siteSchema, typeName);
const typeMap = new Map((nodeType.fields ?? []).map((item) => [item.name, item]));
const formattedValues = {};
for (const [fieldName, value] of Object.entries(values)) {
formattedValues[fieldName] = await processFieldValue(siteContext, {
fieldName,
value,
language,
typeMap,
});
}
return formattedValues;
}
async function processFieldValue(siteContext, options) {
const { fieldName, value, language, typeMap } = options;
if (value === undefined)
return value;
const fieldType = typeMap.get(fieldName);
if (!fieldType)
throw new Error(`Field type not found for '${fieldName}'`);
let processedValue = value;
processedValue = (await executeHook(siteContext, "beforeSaveValue", {
value: processedValue,
options: {
fieldType,
language,
},
}));
if (fieldType.dataType === "string" &&
fieldType.normalizeTypography &&
!fieldType.pluginName &&
typeof processedValue === "string") {
processedValue =
StringOrUndefOrNullAT.assert(await executeHook(siteContext, "normalizeTypography", {
value: processedValue,
options: { language },
})) ?? null;
}
return processedValue;
}
//# sourceMappingURL=before-save-values-hook.js.map