import { PayloadRequest } from '../express/types'; import { Operation } from '../types'; import { HookName, FieldAffectingData } from './config/types'; type Arguments = { data: Record field: FieldAffectingData hook: HookName req: PayloadRequest operation: Operation fullOriginalDoc: Record fullData: Record } const hookPromise = async ({ data, field, hook, req, operation, fullOriginalDoc, fullData, }: Arguments): Promise => { const resultingData = data; if (field.hooks && field.hooks[hook]) { await field.hooks[hook].reduce(async (priorHook, currentHook) => { await priorHook; let hookedValue = await currentHook({ value: data[field.name], originalDoc: fullOriginalDoc, data: fullData, operation, req, }); if (typeof hookedValue === 'undefined') { hookedValue = data[field.name]; } if (hookedValue !== undefined) { resultingData[field.name] = hookedValue; } }, Promise.resolve()); } }; export default hookPromise;