@spytecgps/lambda-utils 0.9.17 → 0.9.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.d.ts CHANGED
@@ -39,9 +39,11 @@ export declare type BaseRecord = Omit<SQSRecord, 'body' | 'messageAttributes'>;
39
39
  export interface MessageEvent<RecordType extends BaseRecord> {
40
40
  Records: RecordType[];
41
41
  }
42
- export interface SQSWrapperArgs<RecordType extends BaseRecord> {
42
+ export declare type SQSWrapperArgs<RecordType extends BaseRecord> = {
43
43
  event: SQSEvent;
44
44
  context?: Context;
45
45
  schema?: Joi.ObjectSchema<MessageEvent<RecordType>>;
46
- handler: (e: MessageEvent<RecordType>) => void | Promise<void>;
47
- }
46
+ handler?: (e: MessageEvent<RecordType>) => void | Promise<void>;
47
+ singleHandler?: (record: RecordType) => void | Promise<void>;
48
+ mode?: 'serial' | 'parallel';
49
+ };
@@ -93,17 +93,11 @@ exports.SpytecJoi = Joi.extend(function (joi) { return ({
93
93
  .required()
94
94
  .error(new Error('Missing query parameters')),
95
95
  }); }, function (joi) { return ({
96
- type: 'dateString',
97
- base: joi.string(),
98
- coerce: function (stringDateValue) {
99
- try {
100
- var x = moment.tz(stringDateValue, 'UTC');
101
- return {
102
- value: x.toJSON(),
103
- };
104
- }
105
- catch (err) {
106
- return null;
107
- }
96
+ type: 'date',
97
+ base: joi.date(),
98
+ prepare: function (value) {
99
+ return {
100
+ value: moment.tz(value, 'UTC').toDate(),
101
+ };
108
102
  },
109
103
  }); });
@@ -1,3 +1,3 @@
1
1
  import { SQSWrapperArgs } from '../types';
2
- declare const sqsEventWrapper: <RecordType extends Pick<import("aws-lambda").SQSRecord, "messageId" | "receiptHandle" | "attributes" | "md5OfBody" | "eventSource" | "eventSourceARN" | "awsRegion">>({ event, context, schema, handler, }: SQSWrapperArgs<RecordType>) => Promise<void>;
2
+ declare const sqsEventWrapper: <RecordType extends Pick<import("aws-lambda").SQSRecord, "messageId" | "receiptHandle" | "attributes" | "md5OfBody" | "eventSource" | "eventSourceARN" | "awsRegion">>({ event, context, schema, handler, singleHandler, mode, }: SQSWrapperArgs<RecordType>) => Promise<void>;
3
3
  export default sqsEventWrapper;
@@ -38,29 +38,71 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  var validateEvent_1 = require("../validation/validateEvent");
40
40
  var sdk_1 = require("@spytecgps/sdk");
41
+ function processEvent(validatedEvent, handler, singleHandler, mode) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var records, _i, records_1, record;
44
+ return __generator(this, function (_a) {
45
+ switch (_a.label) {
46
+ case 0:
47
+ if (!(handler || singleHandler)) {
48
+ throw new Error("handler or singleHandler not defined");
49
+ }
50
+ if (!handler) return [3 /*break*/, 2];
51
+ return [4 /*yield*/, handler(validatedEvent)];
52
+ case 1:
53
+ _a.sent();
54
+ return [3 /*break*/, 9];
55
+ case 2:
56
+ if (!singleHandler) return [3 /*break*/, 9];
57
+ records = validatedEvent.Records;
58
+ if (!(mode === 'serial')) return [3 /*break*/, 7];
59
+ _i = 0, records_1 = records;
60
+ _a.label = 3;
61
+ case 3:
62
+ if (!(_i < records_1.length)) return [3 /*break*/, 6];
63
+ record = records_1[_i];
64
+ return [4 /*yield*/, singleHandler(record)];
65
+ case 4:
66
+ _a.sent();
67
+ _a.label = 5;
68
+ case 5:
69
+ _i++;
70
+ return [3 /*break*/, 3];
71
+ case 6: return [3 /*break*/, 9];
72
+ case 7:
73
+ if (!(mode === 'parallel')) return [3 /*break*/, 9];
74
+ return [4 /*yield*/, Promise.all(records.map(function (record) { return singleHandler(record); }))];
75
+ case 8:
76
+ _a.sent();
77
+ _a.label = 9;
78
+ case 9: return [2 /*return*/];
79
+ }
80
+ });
81
+ });
82
+ }
41
83
  var sqsEventWrapper = function (_a) {
42
- var event = _a.event, context = _a.context, schema = _a.schema, handler = _a.handler;
84
+ var event = _a.event, context = _a.context, schema = _a.schema, handler = _a.handler, singleHandler = _a.singleHandler, _b = _a.mode, mode = _b === void 0 ? 'serial' : _b;
43
85
  return __awaiter(void 0, void 0, void 0, function () {
44
86
  var start, validatedEvent, err_1;
45
- return __generator(this, function (_b) {
46
- switch (_b.label) {
87
+ return __generator(this, function (_c) {
88
+ switch (_c.label) {
47
89
  case 0:
48
90
  start = new Date().getTime();
49
91
  if (event && context) {
50
92
  sdk_1.logger.withRequest(event, context);
51
93
  }
52
94
  sdk_1.logger.info(event, "sqsEventWrapper - got event");
53
- _b.label = 1;
95
+ _c.label = 1;
54
96
  case 1:
55
- _b.trys.push([1, 3, , 4]);
97
+ _c.trys.push([1, 3, , 4]);
56
98
  validatedEvent = validateEvent_1.default(event, schema);
57
- return [4 /*yield*/, handler(validatedEvent)];
99
+ return [4 /*yield*/, processEvent(validatedEvent, handler, singleHandler, mode)];
58
100
  case 2:
59
- _b.sent();
101
+ _c.sent();
60
102
  sdk_1.logger.info({ requestTime: new Date().getTime() - start }, "sqsEventWrapper - finished");
61
103
  return [3 /*break*/, 4];
62
104
  case 3:
63
- err_1 = _b.sent();
105
+ err_1 = _c.sent();
64
106
  sdk_1.logger.error({ err: err_1 }, "sqsEventWrapper - caught error");
65
107
  throw err_1;
66
108
  case 4: return [2 /*return*/];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spytecgps/lambda-utils",
3
- "version": "0.9.17",
3
+ "version": "0.9.19",
4
4
  "description": "Lambda Utils",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",