@skazka/aws
Version:
Skazka AWS
54 lines (42 loc) • 1.35 kB
JavaScript
const lambdaWrapper = require('./wrapper');
const recursive = require('../handler/recursive');
const rowWrapper = require('../handler/wrapper');
/**
const eventHandler = require('@skazka/aws/lambda/event');
const convert = require('@skazka/aws/dynamodb/convert');
const createPool = require('@skazka/aws/pg/pool');
const handler = async ({ dynamodb }, registry) => {
const { oldData, newData } = convert(dynamodb);
await registry.pool.save(oldData, newData);
};
const wrapper = {
useRegistry: async (registry) => {
registry.pool = await createPool(); // eslint-disable-line
return async () => {
await registry.pool.end();
delete registry.pool; // eslint-disable-line
};
},
};
module.exports.handler = eventHandler(handler, { wrapper, retry });
*/
const eventHandler = (handler, options = {}) => async (event, context) => {
const {
wrapper = {},
parallel = false,
} = options;
const processRow = rowWrapper(
handler,
{
throwError: wrapper.throwError,
errorHandler: wrapper.errorHandler,
},
);
const wrapperHandler = lambdaWrapper(async (eventData) => (
parallel
? Promise.all(eventData.Records.map(processRow))
: recursive(processRow, eventData.Records)
), wrapper);
return wrapperHandler(event, context);
};
module.exports = eventHandler;