@aws-lambda-powertools/batch
Advanced tools
Comparing version
@@ -22,7 +22,6 @@ "use strict"; | ||
__exportStar(require("./BasePartialBatchProcessor"), exports); | ||
__exportStar(require("./BatchProcessorSync"), exports); | ||
__exportStar(require("./BatchProcessor"), exports); | ||
__exportStar(require("./AsyncBatchProcessor"), exports); | ||
__exportStar(require("./processPartialResponseSync"), exports); | ||
__exportStar(require("./processPartialResponse"), exports); | ||
__exportStar(require("./asyncProcessPartialResponse"), exports); | ||
__exportStar(require("./SqsFifoPartialProcessor"), exports); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1QiwyQ0FBeUI7QUFDekIsMENBQXdCO0FBQ3hCLHlEQUF1QztBQUN2Qyw4REFBNEM7QUFDNUMsbURBQWlDO0FBQ2pDLHdEQUFzQztBQUN0QywyREFBeUM7QUFDekMsZ0VBQThDO0FBQzlDLDREQUEwQyJ9 |
@@ -5,5 +5,2 @@ import type { DynamoDBRecord, KinesisStreamRecord, SQSRecord } from 'aws-lambda'; | ||
import type { EventSourceDataClassTypes, PartialItemFailureResponse, PartialItemFailures } from './types'; | ||
/** | ||
* Process batch and partially report failed items | ||
*/ | ||
declare abstract class BasePartialBatchProcessor extends BasePartialProcessor { | ||
@@ -17,48 +14,11 @@ COLLECTOR_MAPPING: { | ||
eventType: keyof typeof EventType; | ||
/** | ||
* Initializes base batch processing class | ||
* @param eventType Whether this is SQS, DynamoDB stream, or Kinesis data stream event | ||
*/ | ||
constructor(eventType: keyof typeof EventType); | ||
/** | ||
* Report messages to be deleted in case of partial failures | ||
*/ | ||
clean(): void; | ||
/** | ||
* Collects identifiers of failed items for a DynamoDB stream | ||
* @returns list of identifiers for failed items | ||
*/ | ||
collectDynamoDBFailures(): PartialItemFailures[]; | ||
/** | ||
* Collects identifiers of failed items for a Kinesis stream | ||
* @returns list of identifiers for failed items | ||
*/ | ||
collectKinesisFailures(): PartialItemFailures[]; | ||
/** | ||
* Collects identifiers of failed items for an SQS batch | ||
* @returns list of identifiers for failed items | ||
*/ | ||
collectSqsFailures(): PartialItemFailures[]; | ||
/** | ||
* Determines whether all records in a batch failed to process | ||
* @returns true if all records resulted in exception results | ||
*/ | ||
entireBatchFailed(): boolean; | ||
/** | ||
* Collects identifiers for failed batch items | ||
* @returns formatted messages to use in batch deletion | ||
*/ | ||
getMessagesToReport(): PartialItemFailures[]; | ||
/** | ||
* Determines if any records failed to process | ||
* @returns true if any records resulted in exception | ||
*/ | ||
hasMessagesToReport(): boolean; | ||
/** | ||
* Remove results from previous execution | ||
*/ | ||
prepare(): void; | ||
/** | ||
* @returns Batch items that failed processing, if any | ||
*/ | ||
response(): PartialItemFailureResponse; | ||
@@ -68,1 +28,2 @@ toBatchType(record: EventSourceDataClassTypes, eventType: keyof typeof EventType): SQSRecord | KinesisStreamRecord | DynamoDBRecord; | ||
export { BasePartialBatchProcessor }; | ||
//# sourceMappingURL=BasePartialBatchProcessor.d.ts.map |
@@ -7,10 +7,3 @@ "use strict"; | ||
const errors_1 = require("./errors"); | ||
/** | ||
* Process batch and partially report failed items | ||
*/ | ||
class BasePartialBatchProcessor extends BasePartialProcessor_1.BasePartialProcessor { | ||
/** | ||
* Initializes base batch processing class | ||
* @param eventType Whether this is SQS, DynamoDB stream, or Kinesis data stream event | ||
*/ | ||
constructor(eventType) { | ||
@@ -26,5 +19,2 @@ super(); | ||
} | ||
/** | ||
* Report messages to be deleted in case of partial failures | ||
*/ | ||
clean() { | ||
@@ -35,5 +25,3 @@ if (!this.hasMessagesToReport()) { | ||
if (this.entireBatchFailed()) { | ||
throw new errors_1.BatchProcessingError('All records failed processing. ' + | ||
this.exceptions.length + | ||
' individual errors logged separately below.', this.exceptions); | ||
throw new errors_1.FullBatchFailureError(this.errors); | ||
} | ||
@@ -43,6 +31,2 @@ const messages = this.getMessagesToReport(); | ||
} | ||
/** | ||
* Collects identifiers of failed items for a DynamoDB stream | ||
* @returns list of identifiers for failed items | ||
*/ | ||
collectDynamoDBFailures() { | ||
@@ -58,6 +42,2 @@ const failures = []; | ||
} | ||
/** | ||
* Collects identifiers of failed items for a Kinesis stream | ||
* @returns list of identifiers for failed items | ||
*/ | ||
collectKinesisFailures() { | ||
@@ -71,6 +51,2 @@ const failures = []; | ||
} | ||
/** | ||
* Collects identifiers of failed items for an SQS batch | ||
* @returns list of identifiers for failed items | ||
*/ | ||
collectSqsFailures() { | ||
@@ -84,35 +60,17 @@ const failures = []; | ||
} | ||
/** | ||
* Determines whether all records in a batch failed to process | ||
* @returns true if all records resulted in exception results | ||
*/ | ||
entireBatchFailed() { | ||
return this.exceptions.length == this.records.length; | ||
return this.errors.length == this.records.length; | ||
} | ||
/** | ||
* Collects identifiers for failed batch items | ||
* @returns formatted messages to use in batch deletion | ||
*/ | ||
getMessagesToReport() { | ||
return this.COLLECTOR_MAPPING[this.eventType](); | ||
} | ||
/** | ||
* Determines if any records failed to process | ||
* @returns true if any records resulted in exception | ||
*/ | ||
hasMessagesToReport() { | ||
return this.failureMessages.length != 0; | ||
} | ||
/** | ||
* Remove results from previous execution | ||
*/ | ||
prepare() { | ||
this.successMessages.length = 0; | ||
this.failureMessages.length = 0; | ||
this.exceptions.length = 0; | ||
this.errors.length = 0; | ||
this.batchResponse = constants_1.DEFAULT_RESPONSE; | ||
} | ||
/** | ||
* @returns Batch items that failed processing, if any | ||
*/ | ||
response() { | ||
@@ -126,2 +84,1 @@ return this.batchResponse; | ||
exports.BasePartialBatchProcessor = BasePartialBatchProcessor; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVBhcnRpYWxCYXRjaFByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlUGFydGlhbEJhdGNoUHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLGlFQUE4RDtBQUM5RCwyQ0FBOEU7QUFDOUUscUNBQWdEO0FBT2hEOztHQUVHO0FBQ0gsTUFBZSx5QkFBMEIsU0FBUSwyQ0FBb0I7SUFPbkU7OztPQUdHO0lBQ0gsWUFBbUIsU0FBaUM7UUFDbEQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLDRCQUFnQixDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixDQUFDLHFCQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ2hELENBQUMscUJBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUNuRSxDQUFDLHFCQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1NBQ2xFLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQy9CLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDNUIsTUFBTSxJQUFJLDZCQUFvQixDQUM1QixpQ0FBaUM7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtnQkFDdEIsNkNBQTZDLEVBQy9DLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7U0FDSDtRQUVELE1BQU0sUUFBUSxHQUEwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FB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 |
import type { BaseRecord, BatchProcessingOptions, EventSourceDataClassTypes, FailureResponse, ResultType, SuccessResponse } from './types'; | ||
/** | ||
* Abstract class for batch processors. | ||
*/ | ||
declare abstract class BasePartialProcessor { | ||
exceptions: Error[]; | ||
errors: Error[]; | ||
failureMessages: EventSourceDataClassTypes[]; | ||
@@ -12,57 +9,14 @@ handler: CallableFunction; | ||
successMessages: EventSourceDataClassTypes[]; | ||
/** | ||
* Initializes base processor class | ||
*/ | ||
constructor(); | ||
/** | ||
* Call instance's handler for each record | ||
* @returns List of processed records | ||
*/ | ||
asyncProcess(): Promise<(SuccessResponse | FailureResponse)[]>; | ||
/** | ||
* Process a record with an asyncronous handler | ||
* | ||
* @param record Record to be processed | ||
*/ | ||
abstract asyncProcessRecord(record: BaseRecord): Promise<SuccessResponse | FailureResponse>; | ||
/** | ||
* Clean class instance after processing | ||
*/ | ||
abstract clean(): void; | ||
/** | ||
* Keeps track of batch records that failed processing | ||
* @param record record that failed processing | ||
* @param exception exception that was thrown | ||
* @returns FailureResponse object with ["fail", exception, original record] | ||
*/ | ||
failureHandler(record: EventSourceDataClassTypes, exception: Error): FailureResponse; | ||
/** | ||
* Prepare class instance before processing | ||
*/ | ||
abstract prepare(): void; | ||
/** | ||
* Call instance's handler for each record | ||
* @returns List of processed records | ||
*/ | ||
process(): (SuccessResponse | FailureResponse)[]; | ||
/** | ||
* Process a record with the handler | ||
* @param record Record to be processed | ||
*/ | ||
abstract processRecord(record: BaseRecord): SuccessResponse | FailureResponse; | ||
/** | ||
* Set class instance attributes before execution | ||
* @param records List of records to be processed | ||
* @param handler CallableFunction to process entries of "records" | ||
* @returns this object | ||
*/ | ||
process(): Promise<(SuccessResponse | FailureResponse)[]>; | ||
abstract processRecord(record: BaseRecord): Promise<SuccessResponse | FailureResponse>; | ||
abstract processRecordSync(record: BaseRecord): SuccessResponse | FailureResponse; | ||
processSync(): (SuccessResponse | FailureResponse)[]; | ||
register(records: BaseRecord[], handler: CallableFunction, options?: BatchProcessingOptions): BasePartialProcessor; | ||
/** | ||
* Keeps track of batch records that were processed successfully | ||
* @param record record that succeeded processing | ||
* @param result result from record handler | ||
* @returns SuccessResponse object with ["success", result, original record] | ||
*/ | ||
successHandler(record: EventSourceDataClassTypes, result: ResultType): SuccessResponse; | ||
} | ||
export { BasePartialProcessor }; | ||
//# sourceMappingURL=BasePartialProcessor.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.BasePartialProcessor = void 0; | ||
/** | ||
* Abstract class for batch processors. | ||
*/ | ||
class BasePartialProcessor { | ||
/** | ||
* Initializes base processor class | ||
*/ | ||
constructor() { | ||
this.successMessages = []; | ||
this.failureMessages = []; | ||
this.exceptions = []; | ||
this.errors = []; | ||
this.records = []; | ||
this.handler = new Function(); | ||
} | ||
/** | ||
* Call instance's handler for each record | ||
* @returns List of processed records | ||
*/ | ||
async asyncProcess() { | ||
/** | ||
* If this is an sync processor, user should have called process instead, | ||
* so we call the method early to throw the error early thus failing fast. | ||
*/ | ||
if (this.constructor.name === 'BatchProcessor') { | ||
await this.asyncProcessRecord(this.records[0]); | ||
failureHandler(record, exception) { | ||
const entry = ['fail', exception.message, record]; | ||
this.errors.push(exception); | ||
this.failureMessages.push(record); | ||
return entry; | ||
} | ||
async process() { | ||
if (this.constructor.name === 'BatchProcessorSync') { | ||
await this.processRecord(this.records[0]); | ||
} | ||
this.prepare(); | ||
const processingPromises = this.records.map((record) => this.asyncProcessRecord(record)); | ||
const processingPromises = this.records.map((record) => this.processRecord(record)); | ||
const processedRecords = await Promise.all(processingPromises); | ||
@@ -36,25 +28,5 @@ this.clean(); | ||
} | ||
/** | ||
* Keeps track of batch records that failed processing | ||
* @param record record that failed processing | ||
* @param exception exception that was thrown | ||
* @returns FailureResponse object with ["fail", exception, original record] | ||
*/ | ||
failureHandler(record, exception) { | ||
const entry = ['fail', exception.message, record]; | ||
this.exceptions.push(exception); | ||
this.failureMessages.push(record); | ||
return entry; | ||
} | ||
/** | ||
* Call instance's handler for each record | ||
* @returns List of processed records | ||
*/ | ||
process() { | ||
/** | ||
* If this is an async processor, user should have called processAsync instead, | ||
* so we call the method early to throw the error early thus failing fast. | ||
*/ | ||
if (this.constructor.name === 'AsyncBatchProcessor') { | ||
this.processRecord(this.records[0]); | ||
processSync() { | ||
if (this.constructor.name === 'BatchProcessor') { | ||
this.processRecordSync(this.records[0]); | ||
} | ||
@@ -64,3 +36,3 @@ this.prepare(); | ||
for (const record of this.records) { | ||
processedRecords.push(this.processRecord(record)); | ||
processedRecords.push(this.processRecordSync(record)); | ||
} | ||
@@ -70,8 +42,2 @@ this.clean(); | ||
} | ||
/** | ||
* Set class instance attributes before execution | ||
* @param records List of records to be processed | ||
* @param handler CallableFunction to process entries of "records" | ||
* @returns this object | ||
*/ | ||
register(records, handler, options) { | ||
@@ -85,8 +51,2 @@ this.records = records; | ||
} | ||
/** | ||
* Keeps track of batch records that were processed successfully | ||
* @param record record that succeeded processing | ||
* @param result result from record handler | ||
* @returns SuccessResponse object with ["success", result, original record] | ||
*/ | ||
successHandler(record, result) { | ||
@@ -99,2 +59,1 @@ const entry = ['success', result, record]; | ||
exports.BasePartialProcessor = BasePartialProcessor; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVBhcnRpYWxQcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQmFzZVBhcnRpYWxQcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU0E7O0dBRUc7QUFDSCxNQUFlLG9CQUFvQjtJQWFqQzs7T0FFRztJQUNIO1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2Qjs7O1dBR0c7UUFDSCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1lBQzlDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVmLE1BQU0sa0JBQWtCLEdBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVoRSxNQUFNLGdCQUFnQixHQUNwQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFnQkQ7Ozs7O09BS0c7SUFDSSxjQUFjLENBQ25CLE1BQWlDLEVBQ2pDLFNBQWdCO1FBRWhCLE1BQU0sS0FBSyxHQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU9EOzs7T0FHRztJQUNJLE9BQU87UUFDWjs7O1dBR0c7UUFDSCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUFFO1lBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWYsTUFBTSxnQkFBZ0IsR0FBMEMsRUFBRSxDQUFDO1FBQ25FLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWIsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBVUQ7Ozs7O09BS0c7SUFDSSxRQUFRLENBQ2IsT0FBcUIsRUFDckIsT0FBeUIsRUFDekIsT0FBZ0M7UUFFaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUN4QjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUNuQixNQUFpQyxFQUNqQyxNQUFrQjtRQUVsQixNQUFNLEtBQUssR0FBb0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBRVEsb0RBQW9CIn0= |
import { BasePartialBatchProcessor } from './BasePartialBatchProcessor'; | ||
import type { BaseRecord, FailureResponse, SuccessResponse } from './types'; | ||
/** | ||
* Process native partial responses from SQS, Kinesis Data Streams, and DynamoDB | ||
*/ | ||
declare class BatchProcessor extends BasePartialBatchProcessor { | ||
asyncProcessRecord(_record: BaseRecord): Promise<SuccessResponse | FailureResponse>; | ||
/** | ||
* Process a record with instance's handler | ||
* @param record Batch record to be processed | ||
* @returns response of success or failure | ||
*/ | ||
processRecord(record: BaseRecord): SuccessResponse | FailureResponse; | ||
processRecord(record: BaseRecord): Promise<SuccessResponse | FailureResponse>; | ||
processRecordSync(_record: BaseRecord): SuccessResponse | FailureResponse; | ||
} | ||
export { BatchProcessor }; | ||
//# sourceMappingURL=BatchProcessor.d.ts.map |
@@ -5,18 +5,8 @@ "use strict"; | ||
const BasePartialBatchProcessor_1 = require("./BasePartialBatchProcessor"); | ||
/** | ||
* Process native partial responses from SQS, Kinesis Data Streams, and DynamoDB | ||
*/ | ||
const errors_1 = require("./errors"); | ||
class BatchProcessor extends BasePartialBatchProcessor_1.BasePartialBatchProcessor { | ||
async asyncProcessRecord(_record) { | ||
throw new Error('Not implemented. Use process() instead.'); | ||
} | ||
/** | ||
* Process a record with instance's handler | ||
* @param record Batch record to be processed | ||
* @returns response of success or failure | ||
*/ | ||
processRecord(record) { | ||
async processRecord(record) { | ||
try { | ||
const data = this.toBatchType(record, this.eventType); | ||
const result = this.handler(data, this.options); | ||
const result = await this.handler(data, this.options?.context); | ||
return this.successHandler(record, result); | ||
@@ -28,4 +18,6 @@ } | ||
} | ||
processRecordSync(_record) { | ||
throw new errors_1.BatchProcessingError('Not implemented. Use asyncProcess() instead.'); | ||
} | ||
} | ||
exports.BatchProcessor = BatchProcessor; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hQcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQmF0Y2hQcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkVBQXdFO0FBR3hFOztHQUVHO0FBQ0gsTUFBTSxjQUFlLFNBQVEscURBQXlCO0lBQzdDLEtBQUssQ0FBQyxrQkFBa0IsQ0FDN0IsT0FBbUI7UUFFbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLE1BQWtCO1FBQ3JDLElBQUk7WUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWhELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBYyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0NBQ0Y7QUFFUSx3Q0FBYyJ9 |
@@ -1,2 +0,2 @@ | ||
import { DynamoDBRecord, KinesisStreamRecord, SQSRecord } from 'aws-lambda'; | ||
import type { DynamoDBRecord, KinesisStreamRecord, SQSRecord } from 'aws-lambda'; | ||
import type { PartialItemFailureResponse, EventSourceDataClassTypes } from './types'; | ||
@@ -15,1 +15,2 @@ declare const EventType: { | ||
export { EventType, DEFAULT_RESPONSE, DATA_CLASS_MAPPING }; | ||
//# sourceMappingURL=constants.d.ts.map |
@@ -20,2 +20,1 @@ "use strict"; | ||
exports.DATA_CLASS_MAPPING = DATA_CLASS_MAPPING; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxNQUFNLFNBQVMsR0FBRztJQUNoQixHQUFHLEVBQUUsS0FBSztJQUNWLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4QyxlQUFlLEVBQUUsaUJBQWlCO0NBQzFCLENBQUM7QUFjRiw4QkFBUztBQVpsQixNQUFNLGdCQUFnQixHQUErQjtJQUNuRCxpQkFBaUIsRUFBRSxFQUFFO0NBQ3RCLENBQUM7QUFVa0IsNENBQWdCO0FBUnBDLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFpQyxFQUFFLEVBQUUsQ0FBQyxNQUFtQjtJQUMzRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsTUFBaUMsRUFBRSxFQUFFLENBQ3BFLE1BQTZCO0lBQy9CLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsTUFBaUMsRUFBRSxFQUFFLENBQ2pFLE1BQXdCO0NBQzNCLENBQUM7QUFFb0MsZ0RBQWtCIn0= |
@@ -1,28 +0,15 @@ | ||
/** | ||
* Base error type for batch processing | ||
* All errors thrown by major failures extend this base class | ||
*/ | ||
declare class BaseBatchProcessingError extends Error { | ||
childErrors: Error[]; | ||
msg: string; | ||
constructor(msg: string, childErrors: Error[]); | ||
/** | ||
* Generates a list of errors that were generated by the major failure | ||
* @returns Formatted string listing all the errors that occurred | ||
* | ||
* @example | ||
* When all batch records fail to be processed, this will generate a string like: | ||
* All records failed processing. 3 individual errors logged separately below. | ||
* ,Failed to process record. | ||
* ,Failed to process record. | ||
* ,Failed to process record. | ||
*/ | ||
formatErrors(parentErrorString: string): string; | ||
declare class BatchProcessingError extends Error { | ||
constructor(message: string); | ||
} | ||
/** | ||
* When all batch records failed to be processed | ||
*/ | ||
declare class BatchProcessingError extends BaseBatchProcessingError { | ||
constructor(msg: string, childErrors: Error[]); | ||
declare class FullBatchFailureError extends BatchProcessingError { | ||
recordErrors: Error[]; | ||
constructor(childErrors: Error[]); | ||
} | ||
export { BaseBatchProcessingError, BatchProcessingError }; | ||
declare class SqsFifoShortCircuitError extends BatchProcessingError { | ||
constructor(); | ||
} | ||
declare class UnexpectedBatchTypeError extends BatchProcessingError { | ||
constructor(); | ||
} | ||
export { BatchProcessingError, FullBatchFailureError, SqsFifoShortCircuitError, UnexpectedBatchTypeError, }; | ||
//# sourceMappingURL=errors.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.BatchProcessingError = exports.BaseBatchProcessingError = void 0; | ||
/** | ||
* Base error type for batch processing | ||
* All errors thrown by major failures extend this base class | ||
*/ | ||
class BaseBatchProcessingError extends Error { | ||
constructor(msg, childErrors) { | ||
super(msg); | ||
this.msg = msg; | ||
this.childErrors = childErrors; | ||
exports.UnexpectedBatchTypeError = exports.SqsFifoShortCircuitError = exports.FullBatchFailureError = exports.BatchProcessingError = void 0; | ||
const constants_1 = require("./constants"); | ||
class BatchProcessingError extends Error { | ||
constructor(message) { | ||
super(message); | ||
this.name = 'BatchProcessingError'; | ||
} | ||
/** | ||
* Generates a list of errors that were generated by the major failure | ||
* @returns Formatted string listing all the errors that occurred | ||
* | ||
* @example | ||
* When all batch records fail to be processed, this will generate a string like: | ||
* All records failed processing. 3 individual errors logged separately below. | ||
* ,Failed to process record. | ||
* ,Failed to process record. | ||
* ,Failed to process record. | ||
*/ | ||
formatErrors(parentErrorString) { | ||
const errorList = [parentErrorString + '\n']; | ||
for (const error of this.childErrors) { | ||
errorList.push(error.message + '\n'); | ||
} | ||
return '\n' + errorList; | ||
} | ||
exports.BatchProcessingError = BatchProcessingError; | ||
class FullBatchFailureError extends BatchProcessingError { | ||
constructor(childErrors) { | ||
super('All records failed processing. See individual errors below.'); | ||
this.recordErrors = childErrors; | ||
this.name = 'FullBatchFailureError'; | ||
} | ||
} | ||
exports.BaseBatchProcessingError = BaseBatchProcessingError; | ||
/** | ||
* When all batch records failed to be processed | ||
*/ | ||
class BatchProcessingError extends BaseBatchProcessingError { | ||
constructor(msg, childErrors) { | ||
super(msg, childErrors); | ||
const parentErrorString = this.message; | ||
this.message = this.formatErrors(parentErrorString); | ||
exports.FullBatchFailureError = FullBatchFailureError; | ||
class SqsFifoShortCircuitError extends BatchProcessingError { | ||
constructor() { | ||
super('A previous record failed processing. The remaining records were not processed to avoid out-of-order delivery.'); | ||
this.name = 'SqsFifoShortCircuitError'; | ||
} | ||
} | ||
exports.BatchProcessingError = BatchProcessingError; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxNQUFNLHdCQUF5QixTQUFRLEtBQUs7SUFLMUMsWUFBbUIsR0FBVyxFQUFFLFdBQW9CO1FBQ2xELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxZQUFZLENBQUMsaUJBQXlCO1FBQzNDLE1BQU0sU0FBUyxHQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFdkQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFhUSw0REFBd0I7QUFYakM7O0dBRUc7QUFDSCxNQUFNLG9CQUFxQixTQUFRLHdCQUF3QjtJQUN6RCxZQUFtQixHQUFXLEVBQUUsV0FBb0I7UUFDbEQsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4QixNQUFNLGlCQUFpQixHQUFXLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNGO0FBRWtDLG9EQUFvQiJ9 | ||
exports.SqsFifoShortCircuitError = SqsFifoShortCircuitError; | ||
class UnexpectedBatchTypeError extends BatchProcessingError { | ||
constructor() { | ||
super(`Unexpected batch type. Possible values are: ${Object.values(constants_1.EventType).join(', ')}`); | ||
this.name = 'UnexpectedBatchTypeError'; | ||
} | ||
} | ||
exports.UnexpectedBatchTypeError = UnexpectedBatchTypeError; |
@@ -6,6 +6,7 @@ export * from './constants'; | ||
export * from './BasePartialBatchProcessor'; | ||
export * from './BatchProcessorSync'; | ||
export * from './BatchProcessor'; | ||
export * from './AsyncBatchProcessor'; | ||
export * from './processPartialResponseSync'; | ||
export * from './processPartialResponse'; | ||
export * from './asyncProcessPartialResponse'; | ||
export * from './SqsFifoPartialProcessor'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -22,7 +22,6 @@ "use strict"; | ||
__exportStar(require("./BasePartialBatchProcessor"), exports); | ||
__exportStar(require("./BatchProcessorSync"), exports); | ||
__exportStar(require("./BatchProcessor"), exports); | ||
__exportStar(require("./AsyncBatchProcessor"), exports); | ||
__exportStar(require("./processPartialResponseSync"), exports); | ||
__exportStar(require("./processPartialResponse"), exports); | ||
__exportStar(require("./asyncProcessPartialResponse"), exports); | ||
__exportStar(require("./SqsFifoPartialProcessor"), exports); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1QiwyQ0FBeUI7QUFDekIsMENBQXdCO0FBQ3hCLHlEQUF1QztBQUN2Qyw4REFBNEM7QUFDNUMsbURBQWlDO0FBQ2pDLHdEQUFzQztBQUN0QywyREFBeUM7QUFDekMsZ0VBQThDO0FBQzlDLDREQUEwQyJ9 |
import { BasePartialBatchProcessor } from './BasePartialBatchProcessor'; | ||
import type { BaseRecord, BatchProcessingOptions, PartialItemFailureResponse } from './types'; | ||
/** | ||
* Higher level function to handle batch event processing | ||
* @param event Lambda's original event | ||
* @param recordHandler Callable function to process each record from the batch | ||
* @param processor Batch processor to handle partial failure cases | ||
* @returns Lambda Partial Batch Response | ||
*/ | ||
declare const processPartialResponse: (event: { | ||
Records: BaseRecord[]; | ||
}, recordHandler: CallableFunction, processor: BasePartialBatchProcessor, options?: BatchProcessingOptions) => PartialItemFailureResponse; | ||
}, recordHandler: CallableFunction, processor: BasePartialBatchProcessor, options?: BatchProcessingOptions) => Promise<PartialItemFailureResponse>; | ||
export { processPartialResponse }; | ||
//# sourceMappingURL=processPartialResponse.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.processPartialResponse = void 0; | ||
const constants_1 = require("./constants"); | ||
/** | ||
* Higher level function to handle batch event processing | ||
* @param event Lambda's original event | ||
* @param recordHandler Callable function to process each record from the batch | ||
* @param processor Batch processor to handle partial failure cases | ||
* @returns Lambda Partial Batch Response | ||
*/ | ||
const processPartialResponse = (event, recordHandler, processor, options) => { | ||
if (!event.Records) { | ||
const eventTypes = Object.values(constants_1.EventType).toString(); | ||
throw new Error('Failed to convert event to record batch for processing.\nPlease ensure batch event is a valid ' + | ||
eventTypes + | ||
' event.'); | ||
const errors_1 = require("./errors"); | ||
const processPartialResponse = async (event, recordHandler, processor, options) => { | ||
if (!event.Records || !Array.isArray(event.Records)) { | ||
throw new errors_1.UnexpectedBatchTypeError(); | ||
} | ||
processor.register(event.Records, recordHandler, options); | ||
processor.process(); | ||
await processor.process(); | ||
return processor.response(); | ||
}; | ||
exports.processPartialResponse = processPartialResponse; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc1BhcnRpYWxSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9jZXNzUGFydGlhbFJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJDQUF3QztBQU94Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQzdCLEtBQWdDLEVBQ2hDLGFBQStCLEVBQy9CLFNBQW9DLEVBQ3BDLE9BQWdDLEVBQ0osRUFBRTtJQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUNsQixNQUFNLFVBQVUsR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvRCxNQUFNLElBQUksS0FBSyxDQUNiLGdHQUFnRztZQUM5RixVQUFVO1lBQ1YsU0FBUyxDQUNaLENBQUM7S0FDSDtJQUVELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFMUQsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXBCLE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVPLHdEQUFzQiJ9 |
@@ -1,23 +0,9 @@ | ||
import { BatchProcessor } from './BatchProcessor'; | ||
import { BatchProcessorSync } from './BatchProcessorSync'; | ||
import type { FailureResponse, SuccessResponse } from './types'; | ||
/** | ||
* Process native partial responses from SQS FIFO queues | ||
* Stops processing records when the first record fails | ||
* The remaining records are reported as failed items | ||
*/ | ||
declare class SqsFifoPartialProcessor extends BatchProcessor { | ||
declare class SqsFifoPartialProcessor extends BatchProcessorSync { | ||
constructor(); | ||
/** | ||
* Call instance's handler for each record. | ||
* When the first failed message is detected, the process is short-circuited | ||
* And the remaining messages are reported as failed items | ||
*/ | ||
process(): (SuccessResponse | FailureResponse)[]; | ||
/** | ||
* Starting from the first failure index, fail all remaining messages and append them to the result list | ||
* @param firstFailureIndex Index of first message that failed | ||
* @param result List of success and failure responses with remaining messages failed | ||
*/ | ||
processSync(): (SuccessResponse | FailureResponse)[]; | ||
shortCircuitProcessing(firstFailureIndex: number, processedRecords: (SuccessResponse | FailureResponse)[]): (SuccessResponse | FailureResponse)[]; | ||
} | ||
export { SqsFifoPartialProcessor }; | ||
//# sourceMappingURL=SqsFifoPartialProcessor.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.SqsFifoPartialProcessor = void 0; | ||
const BatchProcessor_1 = require("./BatchProcessor"); | ||
const BatchProcessorSync_1 = require("./BatchProcessorSync"); | ||
const constants_1 = require("./constants"); | ||
/** | ||
* Process native partial responses from SQS FIFO queues | ||
* Stops processing records when the first record fails | ||
* The remaining records are reported as failed items | ||
*/ | ||
class SqsFifoPartialProcessor extends BatchProcessor_1.BatchProcessor { | ||
const errors_1 = require("./errors"); | ||
class SqsFifoPartialProcessor extends BatchProcessorSync_1.BatchProcessorSync { | ||
constructor() { | ||
super(constants_1.EventType.SQS); | ||
} | ||
/** | ||
* Call instance's handler for each record. | ||
* When the first failed message is detected, the process is short-circuited | ||
* And the remaining messages are reported as failed items | ||
*/ | ||
process() { | ||
processSync() { | ||
this.prepare(); | ||
@@ -25,8 +16,6 @@ const processedRecords = []; | ||
for (const record of this.records) { | ||
// If we have any failed messages, it means the last message failed | ||
// We should then short circuit the process and fail remaining messages | ||
if (this.failureMessages.length != 0) { | ||
return this.shortCircuitProcessing(currentIndex, processedRecords); | ||
} | ||
processedRecords.push(this.processRecord(record)); | ||
processedRecords.push(this.processRecordSync(record)); | ||
currentIndex++; | ||
@@ -37,7 +26,2 @@ } | ||
} | ||
/** | ||
* Starting from the first failure index, fail all remaining messages and append them to the result list | ||
* @param firstFailureIndex Index of first message that failed | ||
* @param result List of success and failure responses with remaining messages failed | ||
*/ | ||
shortCircuitProcessing(firstFailureIndex, processedRecords) { | ||
@@ -47,3 +31,3 @@ const remainingRecords = this.records.slice(firstFailureIndex); | ||
const data = this.toBatchType(record, this.eventType); | ||
processedRecords.push(this.failureHandler(data, new Error('A previous record failed processing'))); | ||
processedRecords.push(this.failureHandler(data, new errors_1.SqsFifoShortCircuitError())); | ||
} | ||
@@ -55,2 +39,1 @@ this.clean(); | ||
exports.SqsFifoPartialProcessor = SqsFifoPartialProcessor; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FzRmlmb1BhcnRpYWxQcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3FzRmlmb1BhcnRpYWxQcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtEO0FBQ2xELDJDQUF3QztBQUd4Qzs7OztHQUlHO0FBQ0gsTUFBTSx1QkFBd0IsU0FBUSwrQkFBYztJQUNsRDtRQUNFLEtBQUssQ0FBQyxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVmLE1BQU0sZ0JBQWdCLEdBQTBDLEVBQUUsQ0FBQztRQUNuRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pDLG1FQUFtRTtZQUNuRSx1RUFBdUU7WUFDdkUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNsRCxZQUFZLEVBQUUsQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUViLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxzQkFBc0IsQ0FDM0IsaUJBQXlCLEVBQ3pCLGdCQUF1RDtRQUV2RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFL0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsZ0JBQWdCLENBQUMsSUFBSSxDQUNuQixJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLEVBQ0osSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FDakQsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQUVRLDBEQUF1QiJ9 |
@@ -1,2 +0,2 @@ | ||
import { Context, DynamoDBRecord, KinesisStreamRecord, SQSRecord } from 'aws-lambda'; | ||
import type { Context, DynamoDBRecord, KinesisStreamRecord, SQSRecord } from 'aws-lambda'; | ||
type BatchProcessingOptions = { | ||
@@ -20,1 +20,2 @@ context: Context; | ||
export type { BatchProcessingOptions, BaseRecord, EventSourceDataClassTypes, ResultType, SuccessResponse, FailureResponse, PartialItemFailures, PartialItemFailureResponse, }; | ||
//# sourceMappingURL=types.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 |
{ | ||
"name": "@aws-lambda-powertools/batch", | ||
"version": "1.12.1-beta", | ||
"version": "1.13.0", | ||
"description": "The batch processing package for the Powertools for AWS Lambda (TypeScript) library.", | ||
@@ -5,0 +5,0 @@ "author": { |
@@ -63,5 +63,5 @@ # Powertools for AWS Lambda (TypeScript) - Batch Processing Utility <!-- omit in toc --> | ||
import { | ||
BatchProcessor, | ||
BatchProcessorSync, | ||
EventType, | ||
processPartialResponse, | ||
processPartialResponseSync, | ||
} from '@aws-lambda-powertools/batch'; | ||
@@ -76,3 +76,3 @@ import { Logger } from '@aws-lambda-powertools/logger'; | ||
const processor = new BatchProcessor(EventType.SQS); | ||
const processor = new BatchProcessorSync(EventType.SQS); | ||
const logger = new Logger(); | ||
@@ -92,3 +92,3 @@ | ||
): Promise<SQSBatchResponse> => { | ||
return processPartialResponse(event, recordHandler, processor, { | ||
return processPartialResponseSync(event, recordHandler, processor, { | ||
context, | ||
@@ -106,5 +106,5 @@ }); | ||
import { | ||
BatchProcessor, | ||
BatchProcessorSync, | ||
EventType, | ||
processPartialResponse, | ||
processPartialResponseSync, | ||
} from '@aws-lambda-powertools/batch'; | ||
@@ -119,3 +119,3 @@ import { Logger } from '@aws-lambda-powertools/logger'; | ||
const processor = new BatchProcessor(EventType.KinesisDataStreams); | ||
const processor = new BatchProcessorSync(EventType.KinesisDataStreams); | ||
const logger = new Logger(); | ||
@@ -133,3 +133,3 @@ | ||
): Promise<KinesisStreamBatchResponse> => { | ||
return processPartialResponse(event, recordHandler, processor, { | ||
return processPartialResponseSync(event, recordHandler, processor, { | ||
context, | ||
@@ -142,9 +142,9 @@ }); | ||
When using DynamoDB Streams as a Lambda event source, you can use the `BatchProcessor` with the `EventType.DynamoDBStreams` to process the records. The response will be a `DynamoDBBatchResponse` which contains a list of items that failed to be processed. | ||
When using DynamoDB Streams as a Lambda event source, you can use the `BatchProcessorSync` with the `EventType.DynamoDBStreams` to process the records. The response will be a `DynamoDBBatchResponse` which contains a list of items that failed to be processed. | ||
```ts | ||
import { | ||
BatchProcessor, | ||
BatchProcessorSync, | ||
EventType, | ||
processPartialResponse, | ||
processPartialResponseSync, | ||
} from '@aws-lambda-powertools/batch'; | ||
@@ -159,3 +159,3 @@ import { Logger } from '@aws-lambda-powertools/logger'; | ||
const processor = new BatchProcessor(EventType.DynamoDBStreams); | ||
const processor = new BatchProcessorSync(EventType.DynamoDBStreams); | ||
const logger = new Logger(); | ||
@@ -178,3 +178,3 @@ | ||
): Promise<DynamoDBBatchResponse> => { | ||
return processPartialResponse(event, recordHandler, processor, { | ||
return processPartialResponseSync(event, recordHandler, processor, { | ||
context, | ||
@@ -187,9 +187,9 @@ }); | ||
If your use case allows you to process multiple records at the same time without conflicting with each other, you can use the `AsyncBatchProcessor` to process records asynchronously. This will create an array of promises that will be resolved once all records have been processed. | ||
If your use case allows you to process multiple records at the same time without conflicting with each other, you can use the `BatchProcessor` to process records asynchronously. This will create an array of promises that will be resolved once all records have been processed. | ||
```ts | ||
import { | ||
AsyncBatchProcessor, | ||
BatchProcessor, | ||
EventType, | ||
asyncProcessPartialResponse, | ||
processPartialResponse, | ||
} from '@aws-lambda-powertools/batch'; | ||
@@ -204,3 +204,3 @@ import axios from 'axios'; // axios is an external dependency | ||
const processor = new AsyncBatchProcessor(EventType.SQS); | ||
const processor = new BatchProcessor(EventType.SQS); | ||
@@ -219,3 +219,3 @@ const recordHandler = async (record: SQSRecord): Promise<number> => { | ||
): Promise<SQSBatchResponse> => { | ||
return await asyncProcessPartialResponse(event, recordHandler, processor, { | ||
return await processPartialResponse(event, recordHandler, processor, { | ||
context, | ||
@@ -260,2 +260,3 @@ }); | ||
* [Certible](https://www.certible.com/) | ||
* [tecRacer GmbH & Co. KG](https://www.tecracer.com/) | ||
@@ -262,0 +263,0 @@ ### Sharing your work |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
37
42.31%0
-100%265
0.38%39496
-30.27%475
-37.83%