@squiz/dx-common-lib 1.72.1 → 1.72.3
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/CHANGELOG.md +12 -0
- package/lib/events/EventBusService.d.ts +107 -0
- package/lib/events/EventBusService.js +196 -0
- package/lib/events/EventBusService.js.map +1 -0
- package/lib/events/EventBusService.spec.d.ts +1 -0
- package/lib/events/EventBusService.spec.js +527 -0
- package/lib/events/EventBusService.spec.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/stream/EventStreamHandler.d.ts +38 -0
- package/lib/stream/EventStreamHandler.js +128 -0
- package/lib/stream/EventStreamHandler.js.map +1 -0
- package/lib/stream/EventStreamHandler.spec.d.ts +1 -0
- package/lib/stream/EventStreamHandler.spec.js +364 -0
- package/lib/stream/EventStreamHandler.spec.js.map +1 -0
- package/lib/stream/StreamUtils.d.ts +38 -0
- package/lib/stream/StreamUtils.js +59 -0
- package/lib/stream/StreamUtils.js.map +1 -0
- package/lib/stream/StreamUtils.spec.d.ts +1 -0
- package/lib/stream/StreamUtils.spec.js +92 -0
- package/lib/stream/StreamUtils.spec.js.map +1 -0
- package/package.json +3 -2
- package/src/events/EventBusService.spec.ts +707 -0
- package/src/events/EventBusService.ts +316 -0
- package/src/index.ts +3 -0
- package/src/stream/EventStreamHandler.spec.ts +440 -0
- package/src/stream/EventStreamHandler.ts +192 -0
- package/src/stream/StreamUtils.spec.ts +113 -0
- package/src/stream/StreamUtils.ts +58 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/*!
|
|
4
|
+
* @license
|
|
5
|
+
* Copyright Squiz Australia Pty Ltd. All Rights Reserved.
|
|
6
|
+
*/
|
|
7
|
+
const StreamUtils_1 = require("./StreamUtils");
|
|
8
|
+
describe('StreamUtils', () => {
|
|
9
|
+
describe('extractTenantIdFromArn', () => {
|
|
10
|
+
it('should extract tenant ID from valid CMP table ARN', () => {
|
|
11
|
+
const arn = 'arn:aws:dynamodb:us-east-1:123456789012:table/dev.cmp-service.tenant123/stream/2024-01-01T00:00:00.000';
|
|
12
|
+
const tenantId = (0, StreamUtils_1.extractTenantIdFromArn)(arn, 'cmp');
|
|
13
|
+
expect(tenantId).toBe('tenant123');
|
|
14
|
+
});
|
|
15
|
+
it('should extract tenant ID from valid content table ARN', () => {
|
|
16
|
+
const arn = 'arn:aws:dynamodb:us-east-1:123456789012:table/prod.content-service.acme/stream/2024-01-01T00:00:00.000';
|
|
17
|
+
const tenantId = (0, StreamUtils_1.extractTenantIdFromArn)(arn, 'content');
|
|
18
|
+
expect(tenantId).toBe('acme');
|
|
19
|
+
});
|
|
20
|
+
it('should extract only the last segment as tenant ID', () => {
|
|
21
|
+
const arn = 'arn:aws:dynamodb:us-east-1:123456789012:table/dev.cmp-service.tenant123/stream/2024-01-01T00:00:00.000';
|
|
22
|
+
const tenantId = (0, StreamUtils_1.extractTenantIdFromArn)(arn, 'cmp');
|
|
23
|
+
expect(tenantId).toBe('tenant123');
|
|
24
|
+
});
|
|
25
|
+
it('should throw error for invalid ARN format', () => {
|
|
26
|
+
const invalidArn = 'not-a-valid-arn';
|
|
27
|
+
expect(() => (0, StreamUtils_1.extractTenantIdFromArn)(invalidArn, 'cmp')).toThrow('Invalid ARN format');
|
|
28
|
+
});
|
|
29
|
+
it('should throw error for invalid table name format', () => {
|
|
30
|
+
const arn = 'arn:aws:dynamodb:us-east-1:123456789012:table/invalid-table-name/stream/2024-01-01T00:00:00.000';
|
|
31
|
+
expect(() => (0, StreamUtils_1.extractTenantIdFromArn)(arn, 'cmp')).toThrow('Invalid cmp table name format');
|
|
32
|
+
});
|
|
33
|
+
it('should throw error when service identifier does not match', () => {
|
|
34
|
+
const arn = 'arn:aws:dynamodb:us-east-1:123456789012:table/dev.content-service.tenant123/stream/2024-01-01T00:00:00.000';
|
|
35
|
+
expect(() => (0, StreamUtils_1.extractTenantIdFromArn)(arn, 'cmp')).toThrow('Invalid cmp table name format');
|
|
36
|
+
});
|
|
37
|
+
it('should throw error for ARN with missing table name segment', () => {
|
|
38
|
+
const arn = 'arn:aws:dynamodb:us-east-1:123456789012:table//stream/2024-01-01T00:00:00.000';
|
|
39
|
+
expect(() => (0, StreamUtils_1.extractTenantIdFromArn)(arn, 'cmp')).toThrow('Invalid ARN format');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('getDynamoValue', () => {
|
|
43
|
+
it('should extract string value from DynamoDB attribute', () => {
|
|
44
|
+
const attr = { S: 'test-value' };
|
|
45
|
+
expect((0, StreamUtils_1.getDynamoValue)(attr)).toBe('test-value');
|
|
46
|
+
});
|
|
47
|
+
it('should extract number value from DynamoDB attribute', () => {
|
|
48
|
+
const attr = { N: '123' };
|
|
49
|
+
expect((0, StreamUtils_1.getDynamoValue)(attr)).toBe('123');
|
|
50
|
+
});
|
|
51
|
+
it('should prefer string value over number value', () => {
|
|
52
|
+
const attr = { S: 'string-value', N: '123' };
|
|
53
|
+
expect((0, StreamUtils_1.getDynamoValue)(attr)).toBe('string-value');
|
|
54
|
+
});
|
|
55
|
+
it('should return undefined when attribute is undefined', () => {
|
|
56
|
+
expect((0, StreamUtils_1.getDynamoValue)(undefined)).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
it('should return undefined when both S and N are undefined', () => {
|
|
59
|
+
const attr = {};
|
|
60
|
+
expect((0, StreamUtils_1.getDynamoValue)(attr)).toBeUndefined();
|
|
61
|
+
});
|
|
62
|
+
it('should return undefined when attribute has no S or N property', () => {
|
|
63
|
+
const attr = { M: {} };
|
|
64
|
+
expect((0, StreamUtils_1.getDynamoValue)(attr)).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
it('should handle empty string values by returning undefined', () => {
|
|
67
|
+
const attr = { S: '' };
|
|
68
|
+
expect((0, StreamUtils_1.getDynamoValue)(attr)).toBeUndefined();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('getActionType', () => {
|
|
72
|
+
it('should return create for INSERT events', () => {
|
|
73
|
+
expect((0, StreamUtils_1.getActionType)('INSERT')).toBe('create');
|
|
74
|
+
});
|
|
75
|
+
it('should return delete for REMOVE events', () => {
|
|
76
|
+
expect((0, StreamUtils_1.getActionType)('REMOVE')).toBe('delete');
|
|
77
|
+
});
|
|
78
|
+
it('should return update for MODIFY events', () => {
|
|
79
|
+
expect((0, StreamUtils_1.getActionType)('MODIFY')).toBe('update');
|
|
80
|
+
});
|
|
81
|
+
it('should return update for unknown event types', () => {
|
|
82
|
+
expect((0, StreamUtils_1.getActionType)('UNKNOWN')).toBe('update');
|
|
83
|
+
});
|
|
84
|
+
it('should return update when event name is undefined', () => {
|
|
85
|
+
expect((0, StreamUtils_1.getActionType)(undefined)).toBe('update');
|
|
86
|
+
});
|
|
87
|
+
it('should return update when event name is empty string', () => {
|
|
88
|
+
expect((0, StreamUtils_1.getActionType)('')).toBe('update');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=StreamUtils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamUtils.spec.js","sourceRoot":"","sources":["../../src/stream/StreamUtils.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squiz/dx-common-lib",
|
|
3
|
-
"version": "1.72.
|
|
3
|
+
"version": "1.72.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"private": false,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"author": "",
|
|
17
17
|
"license": "ISC",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@aws-sdk/client-secrets-manager": "3.
|
|
19
|
+
"@aws-sdk/client-secrets-manager": "^3.946.0",
|
|
20
20
|
"@squiz/dx-logger-lib": "^1.65.1",
|
|
21
21
|
"archiver": "7.0.1",
|
|
22
22
|
"escape-string-regexp": "4.0.0",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"@types/jest": "28.1.8",
|
|
32
32
|
"@types/lodash.clonedeep": "4.5.9",
|
|
33
33
|
"@types/node": "22.10.5",
|
|
34
|
+
"aws-lambda": "^1.0.7",
|
|
34
35
|
"dotenv": "16.6.1",
|
|
35
36
|
"jest": "29.4.1",
|
|
36
37
|
"ts-jest": "29.0.5",
|