@mbc-cqrs-serverless/core 1.1.0-beta.0 → 1.1.0

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.
@@ -0,0 +1,136 @@
1
+ /**
2
+ * AWS Mock Manager
3
+ *
4
+ * Provides standardized setup and teardown for AWS SDK mock clients
5
+ * in integration tests. This eliminates repetitive mock configuration
6
+ * across test files and ensures consistent mock behavior.
7
+ *
8
+ * Usage:
9
+ * import { AWSMockManager, createDynamoDBMock } from './utilities/aws-mock-manager'
10
+ *
11
+ * // Option 1: Use individual mock creators
12
+ * const { mock, client, reset, restore } = createDynamoDBMock()
13
+ *
14
+ * // Option 2: Use the manager for multiple services
15
+ * const manager = new AWSMockManager()
16
+ * const dynamoDB = manager.getDynamoDB()
17
+ * const s3 = manager.getS3()
18
+ *
19
+ * beforeEach(() => manager.resetAll())
20
+ * afterAll(() => manager.restoreAll())
21
+ */
22
+ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
23
+ import { S3Client } from '@aws-sdk/client-s3';
24
+ import { SESv2Client } from '@aws-sdk/client-sesv2';
25
+ import { SFNClient } from '@aws-sdk/client-sfn';
26
+ import { SNSClient } from '@aws-sdk/client-sns';
27
+ import { SQSClient } from '@aws-sdk/client-sqs';
28
+ import { AwsClientStub } from 'aws-sdk-client-mock';
29
+ /**
30
+ * Configuration options for mock clients
31
+ */
32
+ export interface MockClientOptions {
33
+ region?: string;
34
+ maxAttempts?: number;
35
+ retryMode?: 'standard' | 'adaptive';
36
+ }
37
+ /**
38
+ * Result from creating a mock client
39
+ */
40
+ export interface MockClientResult<TClient> {
41
+ /** The mock client stub for configuring responses */
42
+ mock: AwsClientStub<TClient>;
43
+ /** The actual client instance configured with the mock */
44
+ client: TClient;
45
+ /** Reset the mock to clear all configured behaviors */
46
+ reset: () => void;
47
+ /** Restore the mock and destroy the client */
48
+ restore: () => void;
49
+ }
50
+ /**
51
+ * Creates a mocked DynamoDB client
52
+ */
53
+ export declare function createDynamoDBMock(options?: MockClientOptions): MockClientResult<DynamoDBClient>;
54
+ /**
55
+ * Creates a mocked S3 client
56
+ */
57
+ export declare function createS3Mock(options?: MockClientOptions): MockClientResult<S3Client>;
58
+ /**
59
+ * Creates a mocked SQS client
60
+ */
61
+ export declare function createSQSMock(options?: MockClientOptions): MockClientResult<SQSClient>;
62
+ /**
63
+ * Creates a mocked SNS client
64
+ */
65
+ export declare function createSNSMock(options?: MockClientOptions): MockClientResult<SNSClient>;
66
+ /**
67
+ * Creates a mocked Step Functions client
68
+ */
69
+ export declare function createSFNMock(options?: MockClientOptions): MockClientResult<SFNClient>;
70
+ /**
71
+ * Creates a mocked SES v2 client
72
+ */
73
+ export declare function createSESMock(options?: MockClientOptions): MockClientResult<SESv2Client>;
74
+ /**
75
+ * Manages multiple AWS mock clients for test suites
76
+ */
77
+ export declare class AWSMockManager {
78
+ private dynamoDB?;
79
+ private s3?;
80
+ private sqs?;
81
+ private sns?;
82
+ private sfn?;
83
+ private ses?;
84
+ private options;
85
+ constructor(options?: MockClientOptions);
86
+ /**
87
+ * Gets or creates the DynamoDB mock
88
+ */
89
+ getDynamoDB(): MockClientResult<DynamoDBClient>;
90
+ /**
91
+ * Gets or creates the S3 mock
92
+ */
93
+ getS3(): MockClientResult<S3Client>;
94
+ /**
95
+ * Gets or creates the SQS mock
96
+ */
97
+ getSQS(): MockClientResult<SQSClient>;
98
+ /**
99
+ * Gets or creates the SNS mock
100
+ */
101
+ getSNS(): MockClientResult<SNSClient>;
102
+ /**
103
+ * Gets or creates the Step Functions mock
104
+ */
105
+ getSFN(): MockClientResult<SFNClient>;
106
+ /**
107
+ * Gets or creates the SES mock
108
+ */
109
+ getSES(): MockClientResult<SESv2Client>;
110
+ /**
111
+ * Resets all active mocks
112
+ */
113
+ resetAll(): void;
114
+ /**
115
+ * Restores all mocks and destroys clients
116
+ */
117
+ restoreAll(): void;
118
+ }
119
+ /**
120
+ * Creates a standard test setup with beforeEach/afterAll hooks
121
+ * for use with Jest describe blocks
122
+ */
123
+ export declare function setupAWSMocks(services: Array<'dynamodb' | 's3' | 'sqs' | 'sns' | 'sfn' | 'ses'>, options?: MockClientOptions): {
124
+ manager: AWSMockManager;
125
+ beforeEachHook: () => void;
126
+ afterAllHook: () => void;
127
+ };
128
+ /**
129
+ * Quick setup function that returns individual mocks for common patterns
130
+ */
131
+ export declare function createTestMocks<T extends Array<'dynamodb' | 's3' | 'sqs' | 'sns' | 'sfn' | 'ses'>>(services: T, options?: MockClientOptions): {
132
+ [K in T[number]]: K extends 'dynamodb' ? MockClientResult<DynamoDBClient> : K extends 's3' ? MockClientResult<S3Client> : K extends 'sqs' ? MockClientResult<SQSClient> : K extends 'sns' ? MockClientResult<SNSClient> : K extends 'sfn' ? MockClientResult<SFNClient> : K extends 'ses' ? MockClientResult<SESv2Client> : never;
133
+ } & {
134
+ resetAll: () => void;
135
+ restoreAll: () => void;
136
+ };
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ /**
3
+ * AWS Mock Manager
4
+ *
5
+ * Provides standardized setup and teardown for AWS SDK mock clients
6
+ * in integration tests. This eliminates repetitive mock configuration
7
+ * across test files and ensures consistent mock behavior.
8
+ *
9
+ * Usage:
10
+ * import { AWSMockManager, createDynamoDBMock } from './utilities/aws-mock-manager'
11
+ *
12
+ * // Option 1: Use individual mock creators
13
+ * const { mock, client, reset, restore } = createDynamoDBMock()
14
+ *
15
+ * // Option 2: Use the manager for multiple services
16
+ * const manager = new AWSMockManager()
17
+ * const dynamoDB = manager.getDynamoDB()
18
+ * const s3 = manager.getS3()
19
+ *
20
+ * beforeEach(() => manager.resetAll())
21
+ * afterAll(() => manager.restoreAll())
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.AWSMockManager = void 0;
25
+ exports.createDynamoDBMock = createDynamoDBMock;
26
+ exports.createS3Mock = createS3Mock;
27
+ exports.createSQSMock = createSQSMock;
28
+ exports.createSNSMock = createSNSMock;
29
+ exports.createSFNMock = createSFNMock;
30
+ exports.createSESMock = createSESMock;
31
+ exports.setupAWSMocks = setupAWSMocks;
32
+ exports.createTestMocks = createTestMocks;
33
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
34
+ const client_s3_1 = require("@aws-sdk/client-s3");
35
+ const client_sesv2_1 = require("@aws-sdk/client-sesv2");
36
+ const client_sfn_1 = require("@aws-sdk/client-sfn");
37
+ const client_sns_1 = require("@aws-sdk/client-sns");
38
+ const client_sqs_1 = require("@aws-sdk/client-sqs");
39
+ const aws_sdk_client_mock_1 = require("aws-sdk-client-mock");
40
+ /**
41
+ * Default AWS region for test clients
42
+ */
43
+ const DEFAULT_REGION = 'ap-northeast-1';
44
+ // ============================================================================
45
+ // Individual Mock Creators
46
+ // ============================================================================
47
+ /**
48
+ * Creates a mocked DynamoDB client
49
+ */
50
+ function createDynamoDBMock(options = {}) {
51
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_dynamodb_1.DynamoDBClient);
52
+ const client = new client_dynamodb_1.DynamoDBClient({
53
+ region: options.region || DEFAULT_REGION,
54
+ maxAttempts: options.maxAttempts,
55
+ retryMode: options.retryMode,
56
+ });
57
+ return {
58
+ mock,
59
+ client,
60
+ reset: () => mock.reset(),
61
+ restore: () => {
62
+ mock.restore();
63
+ client.destroy();
64
+ },
65
+ };
66
+ }
67
+ /**
68
+ * Creates a mocked S3 client
69
+ */
70
+ function createS3Mock(options = {}) {
71
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_s3_1.S3Client);
72
+ const client = new client_s3_1.S3Client({
73
+ region: options.region || DEFAULT_REGION,
74
+ maxAttempts: options.maxAttempts,
75
+ retryMode: options.retryMode,
76
+ });
77
+ return {
78
+ mock,
79
+ client,
80
+ reset: () => mock.reset(),
81
+ restore: () => {
82
+ mock.restore();
83
+ client.destroy();
84
+ },
85
+ };
86
+ }
87
+ /**
88
+ * Creates a mocked SQS client
89
+ */
90
+ function createSQSMock(options = {}) {
91
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_sqs_1.SQSClient);
92
+ const client = new client_sqs_1.SQSClient({
93
+ region: options.region || DEFAULT_REGION,
94
+ maxAttempts: options.maxAttempts,
95
+ retryMode: options.retryMode,
96
+ });
97
+ return {
98
+ mock,
99
+ client,
100
+ reset: () => mock.reset(),
101
+ restore: () => {
102
+ mock.restore();
103
+ client.destroy();
104
+ },
105
+ };
106
+ }
107
+ /**
108
+ * Creates a mocked SNS client
109
+ */
110
+ function createSNSMock(options = {}) {
111
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_sns_1.SNSClient);
112
+ const client = new client_sns_1.SNSClient({
113
+ region: options.region || DEFAULT_REGION,
114
+ maxAttempts: options.maxAttempts,
115
+ retryMode: options.retryMode,
116
+ });
117
+ return {
118
+ mock,
119
+ client,
120
+ reset: () => mock.reset(),
121
+ restore: () => {
122
+ mock.restore();
123
+ client.destroy();
124
+ },
125
+ };
126
+ }
127
+ /**
128
+ * Creates a mocked Step Functions client
129
+ */
130
+ function createSFNMock(options = {}) {
131
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_sfn_1.SFNClient);
132
+ const client = new client_sfn_1.SFNClient({
133
+ region: options.region || DEFAULT_REGION,
134
+ maxAttempts: options.maxAttempts,
135
+ retryMode: options.retryMode,
136
+ });
137
+ return {
138
+ mock,
139
+ client,
140
+ reset: () => mock.reset(),
141
+ restore: () => {
142
+ mock.restore();
143
+ client.destroy();
144
+ },
145
+ };
146
+ }
147
+ /**
148
+ * Creates a mocked SES v2 client
149
+ */
150
+ function createSESMock(options = {}) {
151
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_sesv2_1.SESv2Client);
152
+ const client = new client_sesv2_1.SESv2Client({
153
+ region: options.region || DEFAULT_REGION,
154
+ maxAttempts: options.maxAttempts,
155
+ retryMode: options.retryMode,
156
+ });
157
+ return {
158
+ mock,
159
+ client,
160
+ reset: () => mock.reset(),
161
+ restore: () => {
162
+ mock.restore();
163
+ client.destroy();
164
+ },
165
+ };
166
+ }
167
+ // ============================================================================
168
+ // AWS Mock Manager Class
169
+ // ============================================================================
170
+ /**
171
+ * Manages multiple AWS mock clients for test suites
172
+ */
173
+ class AWSMockManager {
174
+ constructor(options = {}) {
175
+ this.options = options;
176
+ }
177
+ /**
178
+ * Gets or creates the DynamoDB mock
179
+ */
180
+ getDynamoDB() {
181
+ if (!this.dynamoDB) {
182
+ this.dynamoDB = createDynamoDBMock(this.options);
183
+ }
184
+ return this.dynamoDB;
185
+ }
186
+ /**
187
+ * Gets or creates the S3 mock
188
+ */
189
+ getS3() {
190
+ if (!this.s3) {
191
+ this.s3 = createS3Mock(this.options);
192
+ }
193
+ return this.s3;
194
+ }
195
+ /**
196
+ * Gets or creates the SQS mock
197
+ */
198
+ getSQS() {
199
+ if (!this.sqs) {
200
+ this.sqs = createSQSMock(this.options);
201
+ }
202
+ return this.sqs;
203
+ }
204
+ /**
205
+ * Gets or creates the SNS mock
206
+ */
207
+ getSNS() {
208
+ if (!this.sns) {
209
+ this.sns = createSNSMock(this.options);
210
+ }
211
+ return this.sns;
212
+ }
213
+ /**
214
+ * Gets or creates the Step Functions mock
215
+ */
216
+ getSFN() {
217
+ if (!this.sfn) {
218
+ this.sfn = createSFNMock(this.options);
219
+ }
220
+ return this.sfn;
221
+ }
222
+ /**
223
+ * Gets or creates the SES mock
224
+ */
225
+ getSES() {
226
+ if (!this.ses) {
227
+ this.ses = createSESMock(this.options);
228
+ }
229
+ return this.ses;
230
+ }
231
+ /**
232
+ * Resets all active mocks
233
+ */
234
+ resetAll() {
235
+ this.dynamoDB?.reset();
236
+ this.s3?.reset();
237
+ this.sqs?.reset();
238
+ this.sns?.reset();
239
+ this.sfn?.reset();
240
+ this.ses?.reset();
241
+ }
242
+ /**
243
+ * Restores all mocks and destroys clients
244
+ */
245
+ restoreAll() {
246
+ this.dynamoDB?.restore();
247
+ this.s3?.restore();
248
+ this.sqs?.restore();
249
+ this.sns?.restore();
250
+ this.sfn?.restore();
251
+ this.ses?.restore();
252
+ this.dynamoDB = undefined;
253
+ this.s3 = undefined;
254
+ this.sqs = undefined;
255
+ this.sns = undefined;
256
+ this.sfn = undefined;
257
+ this.ses = undefined;
258
+ }
259
+ }
260
+ exports.AWSMockManager = AWSMockManager;
261
+ // ============================================================================
262
+ // Test Setup Helpers
263
+ // ============================================================================
264
+ /**
265
+ * Creates a standard test setup with beforeEach/afterAll hooks
266
+ * for use with Jest describe blocks
267
+ */
268
+ function setupAWSMocks(services, options = {}) {
269
+ const manager = new AWSMockManager(options);
270
+ // Initialize requested services
271
+ services.forEach((service) => {
272
+ switch (service) {
273
+ case 'dynamodb':
274
+ manager.getDynamoDB();
275
+ break;
276
+ case 's3':
277
+ manager.getS3();
278
+ break;
279
+ case 'sqs':
280
+ manager.getSQS();
281
+ break;
282
+ case 'sns':
283
+ manager.getSNS();
284
+ break;
285
+ case 'sfn':
286
+ manager.getSFN();
287
+ break;
288
+ case 'ses':
289
+ manager.getSES();
290
+ break;
291
+ }
292
+ });
293
+ return {
294
+ manager,
295
+ beforeEachHook: () => manager.resetAll(),
296
+ afterAllHook: () => manager.restoreAll(),
297
+ };
298
+ }
299
+ /**
300
+ * Quick setup function that returns individual mocks for common patterns
301
+ */
302
+ function createTestMocks(services, options = {}) {
303
+ const mocks = {};
304
+ services.forEach((service) => {
305
+ switch (service) {
306
+ case 'dynamodb':
307
+ mocks.dynamodb = createDynamoDBMock(options);
308
+ break;
309
+ case 's3':
310
+ mocks.s3 = createS3Mock(options);
311
+ break;
312
+ case 'sqs':
313
+ mocks.sqs = createSQSMock(options);
314
+ break;
315
+ case 'sns':
316
+ mocks.sns = createSNSMock(options);
317
+ break;
318
+ case 'sfn':
319
+ mocks.sfn = createSFNMock(options);
320
+ break;
321
+ case 'ses':
322
+ mocks.ses = createSESMock(options);
323
+ break;
324
+ }
325
+ });
326
+ return {
327
+ ...mocks,
328
+ resetAll: () => {
329
+ Object.values(mocks).forEach((m) => m.reset());
330
+ },
331
+ restoreAll: () => {
332
+ Object.values(mocks).forEach((m) => m.restore());
333
+ },
334
+ };
335
+ }
336
+ //# sourceMappingURL=aws-mock-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-mock-manager.js","sourceRoot":"","sources":["../../../src/integration/utilities/aws-mock-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Integration Test Utilities
3
+ *
4
+ * This module provides shared utilities for integration tests:
5
+ *
6
+ * - aws-error-factory: Factory functions for creating AWS SDK errors
7
+ * - aws-mock-manager: Mock client setup and teardown helpers
8
+ * - test-assertions: Reusable assertion functions
9
+ * - test-data-builders: Test data generation utilities
10
+ *
11
+ * Usage:
12
+ * import {
13
+ * createDynamoDBError,
14
+ * createDynamoDBMock,
15
+ * assertIsRetriableError,
16
+ * createTestItem
17
+ * } from './utilities'
18
+ */
19
+ export { type AWSError, type AWSErrorMetadata, type CreateAWSErrorOptions, createDynamoDBError, createHttpStatusError, createNetworkError, createS3Error, createSESError, createSFNError, createSNSError, createSQSError, createTimeoutError, type DynamoDBErrorName, isNetworkError, isRetriableAWSError, isThrottlingError, type NetworkErrorCode, type S3ErrorName, type SESErrorName, type SFNErrorName, type SNSErrorName, type SQSErrorName, } from './aws-error-factory';
20
+ export { AWSMockManager, createDynamoDBMock, createS3Mock, createSESMock, createSFNMock, createSNSMock, createSQSMock, createTestMocks, type MockClientOptions, type MockClientResult, setupAWSMocks, } from './aws-mock-manager';
21
+ export { assertAllMatch, assertArrayLength, assertCompletesWithin, assertDynamoDBResponseMetadata, assertErrorMetadata, assertHasRequestId, assertIsClientFault, assertIsNetworkError, assertIsNotRetriableError, assertIsRetriableError, assertIsServerFault, assertIsThrottlingError, assertIsTimeoutError, assertMemoryIncreaseLessThan, assertNoMemoryLeak, assertResponseStructure, assertTakesAtLeast, assertThrowsErrorMatching, assertThrowsErrorWithName, assertUniqueBy, forceGC, getHeapUsed, } from './test-assertions';
22
+ export { createBatchGetRequest, createBatchWriteRequest, createKey, createKeys, createLargeTestData, createMarshalledItem, createMarshalledItems, createMixedTypeTestData, createNestedTestData, createRandomString, createS3Content, createS3Metadata, createSFNExecutionName, createSFNInput, createSNSMessage, createSQSBatchEntries, createSQSMessageBody, createTestItem, type CreateTestItemOptions, createTestItems, DYNAMODB_BATCH_SIZE, marshall, splitIntoBatches, type TestItem, unmarshall, unmarshallItem, unmarshallItems, } from './test-data-builders';
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /**
3
+ * Integration Test Utilities
4
+ *
5
+ * This module provides shared utilities for integration tests:
6
+ *
7
+ * - aws-error-factory: Factory functions for creating AWS SDK errors
8
+ * - aws-mock-manager: Mock client setup and teardown helpers
9
+ * - test-assertions: Reusable assertion functions
10
+ * - test-data-builders: Test data generation utilities
11
+ *
12
+ * Usage:
13
+ * import {
14
+ * createDynamoDBError,
15
+ * createDynamoDBMock,
16
+ * assertIsRetriableError,
17
+ * createTestItem
18
+ * } from './utilities'
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.createMarshalledItems = exports.createMarshalledItem = exports.createLargeTestData = exports.createKeys = exports.createKey = exports.createBatchWriteRequest = exports.createBatchGetRequest = exports.getHeapUsed = exports.forceGC = exports.assertUniqueBy = exports.assertThrowsErrorWithName = exports.assertThrowsErrorMatching = exports.assertTakesAtLeast = exports.assertResponseStructure = exports.assertNoMemoryLeak = exports.assertMemoryIncreaseLessThan = exports.assertIsTimeoutError = exports.assertIsThrottlingError = exports.assertIsServerFault = exports.assertIsRetriableError = exports.assertIsNotRetriableError = exports.assertIsNetworkError = exports.assertIsClientFault = exports.assertHasRequestId = exports.assertErrorMetadata = exports.assertDynamoDBResponseMetadata = exports.assertCompletesWithin = exports.assertArrayLength = exports.assertAllMatch = exports.setupAWSMocks = exports.createTestMocks = exports.createSQSMock = exports.createSNSMock = exports.createSFNMock = exports.createSESMock = exports.createS3Mock = exports.createDynamoDBMock = exports.AWSMockManager = exports.isThrottlingError = exports.isRetriableAWSError = exports.isNetworkError = exports.createTimeoutError = exports.createSQSError = exports.createSNSError = exports.createSFNError = exports.createSESError = exports.createS3Error = exports.createNetworkError = exports.createHttpStatusError = exports.createDynamoDBError = void 0;
22
+ exports.unmarshallItems = exports.unmarshallItem = exports.unmarshall = exports.splitIntoBatches = exports.marshall = exports.DYNAMODB_BATCH_SIZE = exports.createTestItems = exports.createTestItem = exports.createSQSMessageBody = exports.createSQSBatchEntries = exports.createSNSMessage = exports.createSFNInput = exports.createSFNExecutionName = exports.createS3Metadata = exports.createS3Content = exports.createRandomString = exports.createNestedTestData = exports.createMixedTypeTestData = void 0;
23
+ // AWS Error Factory
24
+ var aws_error_factory_1 = require("./aws-error-factory");
25
+ Object.defineProperty(exports, "createDynamoDBError", { enumerable: true, get: function () { return aws_error_factory_1.createDynamoDBError; } });
26
+ Object.defineProperty(exports, "createHttpStatusError", { enumerable: true, get: function () { return aws_error_factory_1.createHttpStatusError; } });
27
+ Object.defineProperty(exports, "createNetworkError", { enumerable: true, get: function () { return aws_error_factory_1.createNetworkError; } });
28
+ Object.defineProperty(exports, "createS3Error", { enumerable: true, get: function () { return aws_error_factory_1.createS3Error; } });
29
+ Object.defineProperty(exports, "createSESError", { enumerable: true, get: function () { return aws_error_factory_1.createSESError; } });
30
+ Object.defineProperty(exports, "createSFNError", { enumerable: true, get: function () { return aws_error_factory_1.createSFNError; } });
31
+ Object.defineProperty(exports, "createSNSError", { enumerable: true, get: function () { return aws_error_factory_1.createSNSError; } });
32
+ Object.defineProperty(exports, "createSQSError", { enumerable: true, get: function () { return aws_error_factory_1.createSQSError; } });
33
+ Object.defineProperty(exports, "createTimeoutError", { enumerable: true, get: function () { return aws_error_factory_1.createTimeoutError; } });
34
+ Object.defineProperty(exports, "isNetworkError", { enumerable: true, get: function () { return aws_error_factory_1.isNetworkError; } });
35
+ Object.defineProperty(exports, "isRetriableAWSError", { enumerable: true, get: function () { return aws_error_factory_1.isRetriableAWSError; } });
36
+ Object.defineProperty(exports, "isThrottlingError", { enumerable: true, get: function () { return aws_error_factory_1.isThrottlingError; } });
37
+ // AWS Mock Manager
38
+ var aws_mock_manager_1 = require("./aws-mock-manager");
39
+ Object.defineProperty(exports, "AWSMockManager", { enumerable: true, get: function () { return aws_mock_manager_1.AWSMockManager; } });
40
+ Object.defineProperty(exports, "createDynamoDBMock", { enumerable: true, get: function () { return aws_mock_manager_1.createDynamoDBMock; } });
41
+ Object.defineProperty(exports, "createS3Mock", { enumerable: true, get: function () { return aws_mock_manager_1.createS3Mock; } });
42
+ Object.defineProperty(exports, "createSESMock", { enumerable: true, get: function () { return aws_mock_manager_1.createSESMock; } });
43
+ Object.defineProperty(exports, "createSFNMock", { enumerable: true, get: function () { return aws_mock_manager_1.createSFNMock; } });
44
+ Object.defineProperty(exports, "createSNSMock", { enumerable: true, get: function () { return aws_mock_manager_1.createSNSMock; } });
45
+ Object.defineProperty(exports, "createSQSMock", { enumerable: true, get: function () { return aws_mock_manager_1.createSQSMock; } });
46
+ Object.defineProperty(exports, "createTestMocks", { enumerable: true, get: function () { return aws_mock_manager_1.createTestMocks; } });
47
+ Object.defineProperty(exports, "setupAWSMocks", { enumerable: true, get: function () { return aws_mock_manager_1.setupAWSMocks; } });
48
+ // Test Assertions
49
+ var test_assertions_1 = require("./test-assertions");
50
+ Object.defineProperty(exports, "assertAllMatch", { enumerable: true, get: function () { return test_assertions_1.assertAllMatch; } });
51
+ Object.defineProperty(exports, "assertArrayLength", { enumerable: true, get: function () { return test_assertions_1.assertArrayLength; } });
52
+ Object.defineProperty(exports, "assertCompletesWithin", { enumerable: true, get: function () { return test_assertions_1.assertCompletesWithin; } });
53
+ Object.defineProperty(exports, "assertDynamoDBResponseMetadata", { enumerable: true, get: function () { return test_assertions_1.assertDynamoDBResponseMetadata; } });
54
+ Object.defineProperty(exports, "assertErrorMetadata", { enumerable: true, get: function () { return test_assertions_1.assertErrorMetadata; } });
55
+ Object.defineProperty(exports, "assertHasRequestId", { enumerable: true, get: function () { return test_assertions_1.assertHasRequestId; } });
56
+ Object.defineProperty(exports, "assertIsClientFault", { enumerable: true, get: function () { return test_assertions_1.assertIsClientFault; } });
57
+ Object.defineProperty(exports, "assertIsNetworkError", { enumerable: true, get: function () { return test_assertions_1.assertIsNetworkError; } });
58
+ Object.defineProperty(exports, "assertIsNotRetriableError", { enumerable: true, get: function () { return test_assertions_1.assertIsNotRetriableError; } });
59
+ Object.defineProperty(exports, "assertIsRetriableError", { enumerable: true, get: function () { return test_assertions_1.assertIsRetriableError; } });
60
+ Object.defineProperty(exports, "assertIsServerFault", { enumerable: true, get: function () { return test_assertions_1.assertIsServerFault; } });
61
+ Object.defineProperty(exports, "assertIsThrottlingError", { enumerable: true, get: function () { return test_assertions_1.assertIsThrottlingError; } });
62
+ Object.defineProperty(exports, "assertIsTimeoutError", { enumerable: true, get: function () { return test_assertions_1.assertIsTimeoutError; } });
63
+ Object.defineProperty(exports, "assertMemoryIncreaseLessThan", { enumerable: true, get: function () { return test_assertions_1.assertMemoryIncreaseLessThan; } });
64
+ Object.defineProperty(exports, "assertNoMemoryLeak", { enumerable: true, get: function () { return test_assertions_1.assertNoMemoryLeak; } });
65
+ Object.defineProperty(exports, "assertResponseStructure", { enumerable: true, get: function () { return test_assertions_1.assertResponseStructure; } });
66
+ Object.defineProperty(exports, "assertTakesAtLeast", { enumerable: true, get: function () { return test_assertions_1.assertTakesAtLeast; } });
67
+ Object.defineProperty(exports, "assertThrowsErrorMatching", { enumerable: true, get: function () { return test_assertions_1.assertThrowsErrorMatching; } });
68
+ Object.defineProperty(exports, "assertThrowsErrorWithName", { enumerable: true, get: function () { return test_assertions_1.assertThrowsErrorWithName; } });
69
+ Object.defineProperty(exports, "assertUniqueBy", { enumerable: true, get: function () { return test_assertions_1.assertUniqueBy; } });
70
+ Object.defineProperty(exports, "forceGC", { enumerable: true, get: function () { return test_assertions_1.forceGC; } });
71
+ Object.defineProperty(exports, "getHeapUsed", { enumerable: true, get: function () { return test_assertions_1.getHeapUsed; } });
72
+ // Test Data Builders
73
+ var test_data_builders_1 = require("./test-data-builders");
74
+ Object.defineProperty(exports, "createBatchGetRequest", { enumerable: true, get: function () { return test_data_builders_1.createBatchGetRequest; } });
75
+ Object.defineProperty(exports, "createBatchWriteRequest", { enumerable: true, get: function () { return test_data_builders_1.createBatchWriteRequest; } });
76
+ Object.defineProperty(exports, "createKey", { enumerable: true, get: function () { return test_data_builders_1.createKey; } });
77
+ Object.defineProperty(exports, "createKeys", { enumerable: true, get: function () { return test_data_builders_1.createKeys; } });
78
+ Object.defineProperty(exports, "createLargeTestData", { enumerable: true, get: function () { return test_data_builders_1.createLargeTestData; } });
79
+ Object.defineProperty(exports, "createMarshalledItem", { enumerable: true, get: function () { return test_data_builders_1.createMarshalledItem; } });
80
+ Object.defineProperty(exports, "createMarshalledItems", { enumerable: true, get: function () { return test_data_builders_1.createMarshalledItems; } });
81
+ Object.defineProperty(exports, "createMixedTypeTestData", { enumerable: true, get: function () { return test_data_builders_1.createMixedTypeTestData; } });
82
+ Object.defineProperty(exports, "createNestedTestData", { enumerable: true, get: function () { return test_data_builders_1.createNestedTestData; } });
83
+ Object.defineProperty(exports, "createRandomString", { enumerable: true, get: function () { return test_data_builders_1.createRandomString; } });
84
+ Object.defineProperty(exports, "createS3Content", { enumerable: true, get: function () { return test_data_builders_1.createS3Content; } });
85
+ Object.defineProperty(exports, "createS3Metadata", { enumerable: true, get: function () { return test_data_builders_1.createS3Metadata; } });
86
+ Object.defineProperty(exports, "createSFNExecutionName", { enumerable: true, get: function () { return test_data_builders_1.createSFNExecutionName; } });
87
+ Object.defineProperty(exports, "createSFNInput", { enumerable: true, get: function () { return test_data_builders_1.createSFNInput; } });
88
+ Object.defineProperty(exports, "createSNSMessage", { enumerable: true, get: function () { return test_data_builders_1.createSNSMessage; } });
89
+ Object.defineProperty(exports, "createSQSBatchEntries", { enumerable: true, get: function () { return test_data_builders_1.createSQSBatchEntries; } });
90
+ Object.defineProperty(exports, "createSQSMessageBody", { enumerable: true, get: function () { return test_data_builders_1.createSQSMessageBody; } });
91
+ Object.defineProperty(exports, "createTestItem", { enumerable: true, get: function () { return test_data_builders_1.createTestItem; } });
92
+ Object.defineProperty(exports, "createTestItems", { enumerable: true, get: function () { return test_data_builders_1.createTestItems; } });
93
+ Object.defineProperty(exports, "DYNAMODB_BATCH_SIZE", { enumerable: true, get: function () { return test_data_builders_1.DYNAMODB_BATCH_SIZE; } });
94
+ Object.defineProperty(exports, "marshall", { enumerable: true, get: function () { return test_data_builders_1.marshall; } });
95
+ Object.defineProperty(exports, "splitIntoBatches", { enumerable: true, get: function () { return test_data_builders_1.splitIntoBatches; } });
96
+ Object.defineProperty(exports, "unmarshall", { enumerable: true, get: function () { return test_data_builders_1.unmarshall; } });
97
+ Object.defineProperty(exports, "unmarshallItem", { enumerable: true, get: function () { return test_data_builders_1.unmarshallItem; } });
98
+ Object.defineProperty(exports, "unmarshallItems", { enumerable: true, get: function () { return test_data_builders_1.unmarshallItems; } });
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integration/utilities/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;AAEH,oBAAoB;AACpB,yDAuB4B;AAnB1B,wHAAA,mBAAmB,OAAA;AACnB,0HAAA,qBAAqB,OAAA;AACrB,uHAAA,kBAAkB,OAAA;AAClB,kHAAA,aAAa,OAAA;AACb,mHAAA,cAAc,OAAA;AACd,mHAAA,cAAc,OAAA;AACd,mHAAA,cAAc,OAAA;AACd,mHAAA,cAAc,OAAA;AACd,uHAAA,kBAAkB,OAAA;AAElB,mHAAA,cAAc,OAAA;AACd,wHAAA,mBAAmB,OAAA;AACnB,sHAAA,iBAAiB,OAAA;AASnB,mBAAmB;AACnB,uDAY2B;AAXzB,kHAAA,cAAc,OAAA;AACd,sHAAA,kBAAkB,OAAA;AAClB,gHAAA,YAAY,OAAA;AACZ,iHAAA,aAAa,OAAA;AACb,iHAAA,aAAa,OAAA;AACb,iHAAA,aAAa,OAAA;AACb,iHAAA,aAAa,OAAA;AACb,mHAAA,eAAe,OAAA;AAGf,iHAAA,aAAa,OAAA;AAGf,kBAAkB;AAClB,qDAuB0B;AAtBxB,iHAAA,cAAc,OAAA;AACd,oHAAA,iBAAiB,OAAA;AACjB,wHAAA,qBAAqB,OAAA;AACrB,iIAAA,8BAA8B,OAAA;AAC9B,sHAAA,mBAAmB,OAAA;AACnB,qHAAA,kBAAkB,OAAA;AAClB,sHAAA,mBAAmB,OAAA;AACnB,uHAAA,oBAAoB,OAAA;AACpB,4HAAA,yBAAyB,OAAA;AACzB,yHAAA,sBAAsB,OAAA;AACtB,sHAAA,mBAAmB,OAAA;AACnB,0HAAA,uBAAuB,OAAA;AACvB,uHAAA,oBAAoB,OAAA;AACpB,+HAAA,4BAA4B,OAAA;AAC5B,qHAAA,kBAAkB,OAAA;AAClB,0HAAA,uBAAuB,OAAA;AACvB,qHAAA,kBAAkB,OAAA;AAClB,4HAAA,yBAAyB,OAAA;AACzB,4HAAA,yBAAyB,OAAA;AACzB,iHAAA,cAAc,OAAA;AACd,0GAAA,OAAO,OAAA;AACP,8GAAA,WAAW,OAAA;AAGb,qBAAqB;AACrB,2DA4B6B;AA3B3B,2HAAA,qBAAqB,OAAA;AACrB,6HAAA,uBAAuB,OAAA;AACvB,+GAAA,SAAS,OAAA;AACT,gHAAA,UAAU,OAAA;AACV,yHAAA,mBAAmB,OAAA;AACnB,0HAAA,oBAAoB,OAAA;AACpB,2HAAA,qBAAqB,OAAA;AACrB,6HAAA,uBAAuB,OAAA;AACvB,0HAAA,oBAAoB,OAAA;AACpB,wHAAA,kBAAkB,OAAA;AAClB,qHAAA,eAAe,OAAA;AACf,sHAAA,gBAAgB,OAAA;AAChB,4HAAA,sBAAsB,OAAA;AACtB,oHAAA,cAAc,OAAA;AACd,sHAAA,gBAAgB,OAAA;AAChB,2HAAA,qBAAqB,OAAA;AACrB,0HAAA,oBAAoB,OAAA;AACpB,oHAAA,cAAc,OAAA;AAEd,qHAAA,eAAe,OAAA;AACf,yHAAA,mBAAmB,OAAA;AACnB,8GAAA,QAAQ,OAAA;AACR,sHAAA,gBAAgB,OAAA;AAEhB,gHAAA,UAAU,OAAA;AACV,oHAAA,cAAc,OAAA;AACd,qHAAA,eAAe,OAAA"}