UNPKG

@serverless-seoul/dynamorm-stream

Version:
94 lines 3.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TableHandler = void 0; const handler_1 = require("./handler"); class TableHandler { constructor(tableClass, strategy = "Series", handlers, catchError) { this.tableClass = tableClass; this.strategy = strategy; this.handlers = handlers; this.catchError = catchError; } get handler() { return async (event) => { const records = handler_1.parseEvent(this.tableClass, event); switch (this.strategy) { case "Series": for (const handler of this.handlers) { try { await executeHandler(handler, records); } catch (error) { this.catchError(handler, records, error); } } break; case "Map": await Promise.all(this.handlers.map(async (handler) => { try { await executeHandler(handler, records); } catch (error) { this.catchError(handler, records, error); } })); break; } }; } } exports.TableHandler = TableHandler; async function executeHandler(handlerDefinition, records) { const { handler, filteredRecords } = (() => { switch (handlerDefinition.eventType) { case "INSERT": return { handler: handlerDefinition.handler, filteredRecords: valueFilter(records.map((record) => record.type === "INSERT" ? record : null)), }; case "MODIFY": return { handler: handlerDefinition.handler, filteredRecords: valueFilter(records.map((record) => record.type === "MODIFY" ? record : null)), }; case "REMOVE": return { handler: handlerDefinition.handler, filteredRecords: valueFilter(records.map((record) => record.type === "REMOVE" ? record : null)), }; case "INSERT, MODIFY": return { handler: handlerDefinition.handler, filteredRecords: valueFilter(records.map((record) => record.type === "INSERT" || record.type === "MODIFY" ? record : null)), }; case "MODIFY, REMOVE": return { handler: handlerDefinition.handler, filteredRecords: valueFilter(records.map((record) => record.type === "MODIFY" || record.type === "REMOVE" ? record : null)), }; case "INSERT, REMOVE": return { handler: handlerDefinition.handler, filteredRecords: valueFilter(records.map((record) => record.type === "INSERT" || record.type === "REMOVE" ? record : null)), }; case "ALL": return { handler: handlerDefinition.handler, filteredRecords: valueFilter(records), }; } })(); if (filteredRecords.length > 0) { await handler(filteredRecords); } } function valueFilter(array) { const res = []; array.forEach((item) => { if (item !== undefined && item !== null) { res.push(item); } }); return res; } //# sourceMappingURL=table_handler.js.map