@squiz/db-lib 1.71.2 → 1.72.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/lib/AbstractRepository.d.ts +2 -0
  3. package/lib/AbstractRepository.d.ts.map +1 -0
  4. package/lib/AbstractRepository.integration.spec.d.ts +1 -0
  5. package/lib/AbstractRepository.integration.spec.d.ts.map +1 -0
  6. package/lib/AbstractRepository.integration.spec.js +118 -0
  7. package/lib/AbstractRepository.integration.spec.js.map +1 -0
  8. package/lib/AbstractRepository.js +187 -0
  9. package/lib/AbstractRepository.js.map +1 -0
  10. package/lib/ConnectionManager.d.ts +1 -0
  11. package/lib/ConnectionManager.d.ts.map +1 -0
  12. package/lib/ConnectionManager.js +58 -0
  13. package/lib/ConnectionManager.js.map +1 -0
  14. package/lib/Migrator.d.ts +1 -0
  15. package/lib/Migrator.d.ts.map +1 -0
  16. package/lib/Migrator.js +160 -0
  17. package/lib/Migrator.js.map +1 -0
  18. package/lib/PostgresErrorCodes.d.ts +1 -0
  19. package/lib/PostgresErrorCodes.d.ts.map +1 -0
  20. package/lib/PostgresErrorCodes.js +274 -0
  21. package/lib/PostgresErrorCodes.js.map +1 -0
  22. package/lib/Repositories.d.ts +1 -0
  23. package/lib/Repositories.d.ts.map +1 -0
  24. package/lib/Repositories.js +3 -0
  25. package/lib/Repositories.js.map +1 -0
  26. package/lib/dynamodb/AbstractDynamoDbRepository.d.ts +50 -9
  27. package/lib/dynamodb/AbstractDynamoDbRepository.d.ts.map +1 -0
  28. package/lib/dynamodb/AbstractDynamoDbRepository.js +456 -0
  29. package/lib/dynamodb/AbstractDynamoDbRepository.js.map +1 -0
  30. package/lib/dynamodb/AbstractDynamoDbRepository.spec.d.ts +1 -0
  31. package/lib/dynamodb/AbstractDynamoDbRepository.spec.d.ts.map +1 -0
  32. package/lib/dynamodb/AbstractDynamoDbRepository.spec.js +924 -0
  33. package/lib/dynamodb/AbstractDynamoDbRepository.spec.js.map +1 -0
  34. package/lib/dynamodb/DynamoDbManager.d.ts +1 -0
  35. package/lib/dynamodb/DynamoDbManager.d.ts.map +1 -0
  36. package/lib/dynamodb/DynamoDbManager.js +66 -0
  37. package/lib/dynamodb/DynamoDbManager.js.map +1 -0
  38. package/lib/dynamodb/getDynamoDbOptions.d.ts +1 -0
  39. package/lib/dynamodb/getDynamoDbOptions.d.ts.map +1 -0
  40. package/lib/dynamodb/getDynamoDbOptions.js +15 -0
  41. package/lib/dynamodb/getDynamoDbOptions.js.map +1 -0
  42. package/lib/error/DuplicateItemError.d.ts +1 -0
  43. package/lib/error/DuplicateItemError.d.ts.map +1 -0
  44. package/lib/error/DuplicateItemError.js +12 -0
  45. package/lib/error/DuplicateItemError.js.map +1 -0
  46. package/lib/error/InvalidDataFormatError.d.ts +1 -0
  47. package/lib/error/InvalidDataFormatError.d.ts.map +1 -0
  48. package/lib/error/InvalidDataFormatError.js +12 -0
  49. package/lib/error/InvalidDataFormatError.js.map +1 -0
  50. package/lib/error/InvalidDbSchemaError.d.ts +1 -0
  51. package/lib/error/InvalidDbSchemaError.d.ts.map +1 -0
  52. package/lib/error/InvalidDbSchemaError.js +12 -0
  53. package/lib/error/InvalidDbSchemaError.js.map +1 -0
  54. package/lib/error/MissingKeyValuesError.d.ts +1 -0
  55. package/lib/error/MissingKeyValuesError.d.ts.map +1 -0
  56. package/lib/error/MissingKeyValuesError.js +12 -0
  57. package/lib/error/MissingKeyValuesError.js.map +1 -0
  58. package/lib/error/TransactionError.d.ts +1 -0
  59. package/lib/error/TransactionError.d.ts.map +1 -0
  60. package/lib/error/TransactionError.js +12 -0
  61. package/lib/error/TransactionError.js.map +1 -0
  62. package/lib/getConnectionInfo.d.ts +1 -0
  63. package/lib/getConnectionInfo.d.ts.map +1 -0
  64. package/lib/getConnectionInfo.js +30 -0
  65. package/lib/getConnectionInfo.js.map +1 -0
  66. package/lib/index.d.ts +1 -0
  67. package/lib/index.d.ts.map +1 -0
  68. package/lib/index.js +33 -70416
  69. package/lib/index.js.map +1 -7
  70. package/package.json +5 -5
  71. package/src/AbstractRepository.ts +26 -20
  72. package/src/dynamodb/AbstractDynamoDbRepository.spec.ts +289 -37
  73. package/src/dynamodb/AbstractDynamoDbRepository.ts +140 -31
  74. package/src/dynamodb/getDynamoDbOptions.ts +1 -1
  75. package/tsconfig.json +5 -2
  76. package/tsconfig.tsbuildinfo +1 -1
  77. package/build.js +0 -31
@@ -0,0 +1,456 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractDynamoDbRepository = void 0;
4
+ const __1 = require("..");
5
+ const InvalidDataFormatError_1 = require("../error/InvalidDataFormatError");
6
+ class AbstractDynamoDbRepository {
7
+ constructor(tableName, dbManager, entityName, entityDefinition, classRef) {
8
+ this.tableName = tableName;
9
+ this.dbManager = dbManager;
10
+ this.entityName = entityName;
11
+ this.entityDefinition = entityDefinition;
12
+ this.classRef = classRef;
13
+ this.client = dbManager.client;
14
+ this.keys = entityDefinition.keys;
15
+ this.indexes = entityDefinition.indexes;
16
+ this.fieldsAsJsonString = entityDefinition.fieldsAsJsonString;
17
+ this.keysFormat = {
18
+ [this.keys.pk.attributeName]: this.keys.pk.format,
19
+ [this.keys.sk.attributeName]: this.keys.sk.format,
20
+ };
21
+ Object.keys(this.indexes).forEach((key) => {
22
+ const index = this.indexes[key];
23
+ this.keysFormat[index.pk.attributeName] = index.pk.format;
24
+ this.keysFormat[index.sk.attributeName] = index.sk.format;
25
+ });
26
+ }
27
+ /**
28
+ * Get the single item matching the key fields value in the given
29
+ * partial item. Will throw MissingKeyValuesError if key field values
30
+ * are missing
31
+ *
32
+ * @param item
33
+ *
34
+ * @throws MissingKeyValuesError
35
+ */
36
+ async getItem(item) {
37
+ const output = await this.client.get({
38
+ TableName: this.tableName,
39
+ Key: {
40
+ [this.keys.pk.attributeName]: this.getPk(item),
41
+ [this.keys.sk.attributeName]: this.getSk(item),
42
+ },
43
+ });
44
+ if (output.Item === undefined) {
45
+ return undefined;
46
+ }
47
+ return this.hydrateItem(output.Item);
48
+ }
49
+ /**
50
+ * Get the single item each matching the key fields value in the given
51
+ * partial items. Will throw MissingKeyValuesError if key field values
52
+ * are missing
53
+ * Uses batchGet() to request 100 items in a batch
54
+ *
55
+ * @param item
56
+ *
57
+ * @throws MissingKeyValuesError
58
+ */
59
+ async getItems(items) {
60
+ // this is the maximum items allowed by BatchGetItem()
61
+ const batchSize = 100;
62
+ let result = [];
63
+ for (let i = 0; i < items.length; i += batchSize) {
64
+ const batchResult = await this.getBatchItems(items.slice(i, i + batchSize));
65
+ result = result.concat(batchResult);
66
+ }
67
+ return result;
68
+ }
69
+ /**
70
+ * Returns the batch items from the items primary key
71
+ *
72
+ * @param items
73
+ * @returns
74
+ */
75
+ async getBatchItems(items) {
76
+ const keys = [];
77
+ for (const item of items) {
78
+ keys.push({
79
+ [this.keys.pk.attributeName]: this.getPk(item),
80
+ [this.keys.sk.attributeName]: this.getSk(item),
81
+ });
82
+ }
83
+ const output = await this.client.batchGet({
84
+ RequestItems: {
85
+ [this.tableName]: {
86
+ Keys: keys,
87
+ },
88
+ },
89
+ });
90
+ if (output.Responses && output.Responses[this.tableName].length) {
91
+ return output.Responses[this.tableName].map((i) => this.hydrateItem(i));
92
+ }
93
+ return [];
94
+ }
95
+ /**
96
+ * Finds all the items matching the partition key or
97
+ * the gsi key (when gsi index name is specified)
98
+ *
99
+ * @param item
100
+ * @param options
101
+ * @throws MissingKeyValuesError
102
+ */
103
+ async queryItems(item, options) {
104
+ var _a, _b;
105
+ const useSortKey = (options === null || options === void 0 ? void 0 : options.useSortKey) || (options === null || options === void 0 ? void 0 : options.filter);
106
+ const index = options === null || options === void 0 ? void 0 : options.index;
107
+ let pkName = this.keys.pk.attributeName;
108
+ let skName = this.keys.sk.attributeName;
109
+ let indexName = null;
110
+ if (index) {
111
+ if (this.indexes[index] === undefined) {
112
+ throw new __1.MissingKeyValuesError(`Table index '${index}' not defined on entity ${this.entityName}`);
113
+ }
114
+ indexName = index;
115
+ pkName = this.indexes[index].pk.attributeName;
116
+ skName = this.indexes[index].sk.attributeName;
117
+ }
118
+ const pk = this.getKey(item, pkName);
119
+ const keyConditionExpression = ['#pkName = :pkValue'];
120
+ const expressionAttributeNames = { '#pkName': pkName };
121
+ const expressionAttributeValues = { ':pkValue': pk };
122
+ if (useSortKey) {
123
+ const sk = (_b = (_a = options === null || options === void 0 ? void 0 : options.filter) === null || _a === void 0 ? void 0 : _a.keyword) !== null && _b !== void 0 ? _b : this.getKey(item, skName);
124
+ keyConditionExpression.push(this.getFilterKeyConditionExpression(options === null || options === void 0 ? void 0 : options.filter));
125
+ expressionAttributeNames['#skName'] = skName;
126
+ expressionAttributeValues[':skValue'] = sk;
127
+ }
128
+ const queryCommandInput = {
129
+ TableName: this.tableName,
130
+ KeyConditionExpression: keyConditionExpression.join(' AND '),
131
+ ExpressionAttributeNames: expressionAttributeNames,
132
+ ExpressionAttributeValues: expressionAttributeValues,
133
+ };
134
+ if (indexName) {
135
+ queryCommandInput['IndexName'] = String(indexName);
136
+ }
137
+ if ((options === null || options === void 0 ? void 0 : options.order) !== undefined) {
138
+ queryCommandInput.ScanIndexForward = options.order === 'asc';
139
+ }
140
+ if ((options === null || options === void 0 ? void 0 : options.limit) !== undefined) {
141
+ queryCommandInput.Limit = options.limit;
142
+ }
143
+ const output = await this.client.query(queryCommandInput);
144
+ return !output.Items ? [] : output.Items.map((item) => this.hydrateItem(item));
145
+ }
146
+ /**
147
+ * Evaluate filter condition for sort key
148
+ * @param filter
149
+ * @returns string
150
+ */
151
+ getFilterKeyConditionExpression(filter) {
152
+ if (filter === undefined) {
153
+ return '#skName = :skValue';
154
+ }
155
+ else if (filter.type === 'begins_with') {
156
+ return 'begins_with(#skName, :skValue)';
157
+ }
158
+ throw new Error(`Invalid query filter type: ${filter === null || filter === void 0 ? void 0 : filter.type}`);
159
+ }
160
+ /**
161
+ * Update the existing item matching the key fields value
162
+ * in the passed newValue
163
+ * @param newValue
164
+ * @param transaction
165
+ *
166
+ * @returns Promise<SHAPE | undefined>
167
+ * @throws MissingKeyValuesError
168
+ */
169
+ async updateItem(newValue, transaction = {}) {
170
+ var _a, _b;
171
+ const oldValue = await this.getItem(newValue);
172
+ if (oldValue === undefined) {
173
+ return undefined;
174
+ }
175
+ const value = { ...oldValue, ...newValue };
176
+ this.assertValueMatchesModel(value);
177
+ this.convertSelectedValuesToJsonString(newValue);
178
+ const updateExpression = [];
179
+ const expressionAttributeNames = {};
180
+ const expressionAttributeValues = {};
181
+ for (const modelProperty of Object.keys(newValue)) {
182
+ const propValue = (_a = newValue[modelProperty]) !== null && _a !== void 0 ? _a : null;
183
+ if (propValue === oldValue[modelProperty]) {
184
+ // don't need to update the properties that are unchanged
185
+ continue;
186
+ }
187
+ const propName = `#${modelProperty}`;
188
+ const propValuePlaceHolder = `:${modelProperty}`;
189
+ updateExpression.push(`${propName} = ${propValuePlaceHolder}`);
190
+ expressionAttributeNames[propName] = modelProperty;
191
+ expressionAttributeValues[propValuePlaceHolder] = propValue;
192
+ }
193
+ if (!updateExpression.length) {
194
+ // nothing to update
195
+ return value;
196
+ }
197
+ const updateCommandInput = {
198
+ TableName: this.tableName,
199
+ Key: {
200
+ [this.keys.pk.attributeName]: this.getPk(newValue),
201
+ [this.keys.sk.attributeName]: this.getSk(newValue),
202
+ },
203
+ UpdateExpression: 'SET ' + updateExpression.join(','),
204
+ ExpressionAttributeValues: expressionAttributeValues,
205
+ ExpressionAttributeNames: expressionAttributeNames,
206
+ ConditionExpression: `attribute_exists(${this.keys.pk.attributeName})`,
207
+ };
208
+ if ((_b = transaction.id) === null || _b === void 0 ? void 0 : _b.length) {
209
+ // this command will be executed together with
210
+ // other db write commands in the "transaction" block
211
+ this.dbManager.addWriteTransactionItem(transaction.id, {
212
+ Update: updateCommandInput,
213
+ });
214
+ return new this.classRef(value);
215
+ }
216
+ let output;
217
+ try {
218
+ output = await this.client.update({
219
+ ...updateCommandInput,
220
+ ReturnValues: 'ALL_NEW',
221
+ });
222
+ }
223
+ catch (e) {
224
+ if (e && e.name === 'ConditionalCheckFailedException') {
225
+ return undefined;
226
+ }
227
+ throw e;
228
+ }
229
+ let item = undefined;
230
+ if (output.Attributes) {
231
+ item = this.hydrateItem(output.Attributes);
232
+ }
233
+ return item ? item : undefined;
234
+ }
235
+ /**
236
+ * Adds new item to the table
237
+ *
238
+ * @param value
239
+ * @param transaction
240
+ * @param additionalValue Additional item properties that are not part of the DATA_CLASS
241
+ *
242
+ * @returns Promise<SHAPE>
243
+ * @throws DuplicateItemError
244
+ * @throws MissingKeyValuesError
245
+ */
246
+ async createItem(value, transaction = {}, additionalValue = {}) {
247
+ var _a;
248
+ this.assertValueMatchesModel(value);
249
+ const columns = {};
250
+ for (const modelProperty of Object.keys(value)) {
251
+ columns[modelProperty] = value[modelProperty];
252
+ }
253
+ this.convertSelectedValuesToJsonString(columns);
254
+ const keyFields = {
255
+ [this.keys.pk.attributeName]: this.getPk({ ...value, ...additionalValue }),
256
+ [this.keys.sk.attributeName]: this.getSk({ ...value, ...additionalValue }),
257
+ };
258
+ Object.keys(this.indexes).forEach((key) => {
259
+ const index = this.indexes[key];
260
+ keyFields[index.pk.attributeName] = this.getKey({ ...value, ...additionalValue }, index.pk.attributeName);
261
+ keyFields[index.sk.attributeName] = this.getKey({ ...value, ...additionalValue }, index.sk.attributeName);
262
+ });
263
+ const putCommandInput = {
264
+ TableName: this.tableName,
265
+ Item: {
266
+ ...keyFields,
267
+ ...columns,
268
+ },
269
+ ConditionExpression: `attribute_not_exists(${this.keys.pk.attributeName})`,
270
+ };
271
+ if ((_a = transaction.id) === null || _a === void 0 ? void 0 : _a.length) {
272
+ // this command will be executed together with
273
+ // other db write commands in the "transaction block"
274
+ this.dbManager.addWriteTransactionItem(transaction.id, {
275
+ Put: putCommandInput,
276
+ });
277
+ return value;
278
+ }
279
+ await this.client.put(putCommandInput);
280
+ return value;
281
+ }
282
+ /**
283
+ * Deletes an item from the table
284
+ *
285
+ * @param partialItem
286
+ * @param transaction
287
+ * @returns number
288
+ * @throw MissingKeyValuesError
289
+ */
290
+ async deleteItem(partialItem, transaction = {}) {
291
+ var _a;
292
+ const deleteCommandInput = {
293
+ TableName: this.tableName,
294
+ Key: {
295
+ [this.keys.pk.attributeName]: this.getPk(partialItem),
296
+ [this.keys.sk.attributeName]: this.getSk(partialItem),
297
+ },
298
+ ConditionExpression: `attribute_exists(${this.keys.pk.attributeName})`,
299
+ };
300
+ if ((_a = transaction.id) === null || _a === void 0 ? void 0 : _a.length) {
301
+ // For transaction block, don't worry if the item being deleted does not exist
302
+ delete deleteCommandInput.ConditionExpression;
303
+ // this command will be executed together with
304
+ // other db write commands in the "transaction block"
305
+ this.dbManager.addWriteTransactionItem(transaction.id, {
306
+ Delete: deleteCommandInput,
307
+ });
308
+ return 1;
309
+ }
310
+ try {
311
+ await this.client.delete(deleteCommandInput);
312
+ }
313
+ catch (e) {
314
+ if (e && e.name === 'ConditionalCheckFailedException') {
315
+ return 0;
316
+ }
317
+ throw e;
318
+ }
319
+ return 1;
320
+ }
321
+ /**
322
+ * Return repo model object from the db value
323
+ * @param item
324
+ * @returns
325
+ */
326
+ hydrateItem(item) {
327
+ for (const fieldName of Object.keys(item)) {
328
+ if (this.fieldsAsJsonString.includes(fieldName)) {
329
+ if (typeof item[fieldName] === 'string') {
330
+ item[fieldName] = JSON.parse(item[fieldName]);
331
+ }
332
+ else {
333
+ throw new InvalidDataFormatError_1.InvalidDataFormatError(`Field '${fieldName}' defined as JSON String has a non-string data`);
334
+ }
335
+ }
336
+ }
337
+ return new this.classRef(item);
338
+ }
339
+ convertSelectedValuesToJsonString(item) {
340
+ for (const fieldName of Object.keys(item)) {
341
+ if (this.fieldsAsJsonString.includes(fieldName)) {
342
+ item[fieldName] = JSON.stringify(item[fieldName]);
343
+ }
344
+ }
345
+ }
346
+ /**
347
+ * Evaluate the partition key value from the partial item
348
+ * @param item
349
+ * @returns string
350
+ * @throw MissingKeyValuesError
351
+ */
352
+ getPk(item) {
353
+ return this.getKey(item, this.keys.pk.attributeName);
354
+ }
355
+ /**
356
+ * Evaluate the sort key value from the partial item
357
+ * @param item
358
+ * @returns string
359
+ *
360
+ * @throw MissingKeyValuesError
361
+ */
362
+ getSk(item) {
363
+ return this.getKey(item, this.keys.sk.attributeName);
364
+ }
365
+ /**
366
+ * Evaluate the key value from the
367
+ *
368
+ * Example 1:
369
+ * Input:
370
+ * - item: {id: foo, name: 'some-name' }
371
+ * - attributeName: pk
372
+ * - this.keysFormat = { pk: 'item#{id}', 'sk': '#meta', ... }
373
+ * Output:
374
+ * - 'item#foo'
375
+ *
376
+ * Example 2:
377
+ * Input:
378
+ * - item: {id: foo, name: 'some-name', itemType: 'A' }
379
+ * - attributeName: sk
380
+ * - this.keysFormat = { pk: 'item#{id}', 'sk': 'type#{itemType}', ... }
381
+ * Output:
382
+ * - 'type#A'
383
+ *
384
+ * Example 3:
385
+ * Input:
386
+ * - item: {id: foo, name: 'some-name' }
387
+ * - attributeName: sk
388
+ * - this.keysFormat = { pk: 'item#{id}', 'sk': 'name-type#{itemType}{name}', ... }
389
+ * Output:
390
+ * - Error: "Key field "itemType" must be specified in the input item"
391
+ *
392
+ * @param item
393
+ * @param attributeName
394
+ *
395
+ * @returns string
396
+ * @throw MissingKeyValuesError
397
+ */
398
+ getKey(item, attributeName) {
399
+ var _a;
400
+ let keyFormat = this.keysFormat[attributeName];
401
+ if (keyFormat == undefined || !keyFormat.length) {
402
+ throw new __1.MissingKeyValuesError(`Key format not defined or empty for key attribute '${attributeName}' in entity ${this.entityName}`);
403
+ }
404
+ const matches = keyFormat.match(/{[a-zA-Z]+?}/g);
405
+ const replacements = !matches
406
+ ? []
407
+ : matches.map((match) => {
408
+ return {
409
+ property: match.slice(1, -1),
410
+ placeholder: match,
411
+ };
412
+ });
413
+ for (let i = 0; i < replacements.length; i++) {
414
+ const field = replacements[i].property;
415
+ if (item[field] === undefined) {
416
+ throw new __1.MissingKeyValuesError(`Key field "${String(field)}" must be specified in the input item in entity ${this.entityName}`);
417
+ }
418
+ keyFormat = keyFormat.replace(replacements[i].placeholder, String((_a = item[field]) !== null && _a !== void 0 ? _a : ''));
419
+ }
420
+ const moreMatches = keyFormat.match(/{[a-zA-Z]+?}/g);
421
+ if (moreMatches === null || moreMatches === void 0 ? void 0 : moreMatches.length) {
422
+ throw new __1.MissingKeyValuesError(`Cannot resolve key placeholder(s) for key attribute format '${this.keysFormat[attributeName]} in entity ${this.entityName}: '${moreMatches.join("','")}'`);
423
+ }
424
+ return keyFormat;
425
+ }
426
+ /**
427
+ * Whether the given property name is part of the entity's pk/sk string
428
+ * @param propertyName
429
+ * @returns boolean
430
+ */
431
+ isPropertyPartOfKeys(propertyName) {
432
+ if (this.keysFormat[this.keys.pk.attributeName].search(`{${propertyName}}`) !== -1)
433
+ return true;
434
+ if (this.keysFormat[this.keys.sk.attributeName].search(`{${propertyName}}`) !== -1)
435
+ return true;
436
+ return false;
437
+ }
438
+ /**
439
+ * Validate the data matches with "DATA_MODEL"
440
+ * @param value
441
+ * @return void
442
+ */
443
+ assertValueMatchesModel(value) {
444
+ // Trigger AssertionError if model instantiation fails
445
+ // see the DATA_CLASS model class
446
+ const obj = new this.classRef(value);
447
+ const inputProperties = Object.keys(value);
448
+ const modelProperties = Object.keys(obj);
449
+ const excessProperties = inputProperties.filter((prop) => !modelProperties.includes(prop));
450
+ if (excessProperties.length > 0) {
451
+ throw new __1.InvalidDbSchemaError(`Excess properties in entity ${this.entityName}: ${excessProperties.join(', ')}`);
452
+ }
453
+ }
454
+ }
455
+ exports.AbstractDynamoDbRepository = AbstractDynamoDbRepository;
456
+ //# sourceMappingURL=AbstractDynamoDbRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractDynamoDbRepository.js","sourceRoot":"","sources":["../../src/dynamodb/AbstractDynamoDbRepository.ts"],"names":[],"mappings":"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"}
@@ -24,3 +24,4 @@ declare class TestItemRepository extends AbstractDynamoDbRepository<ITestItem, T
24
24
  constructor(tableName: string, dbManager: TestDbManager);
25
25
  }
26
26
  export {};
27
+ //# sourceMappingURL=AbstractDynamoDbRepository.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractDynamoDbRepository.spec.d.ts","sourceRoot":"","sources":["../../src/dynamodb/AbstractDynamoDbRepository.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAgB,MAAM,8BAA8B,CAAC;AAoBxF,OAAO,EAAE,eAAe,EAAe,MAAM,mBAAmB,CAAC;AAIjE,OAAO,0BAA0B,CAAC;AAQlC,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,QAAS,YAAW,SAAS;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;gBAEV,IAAI,GAAE,OAAO,CAAC,SAAS,CAAM;CAoB1C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;AAgC9D,cAAM,kBAAmB,SAAQ,0BAA0B,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAClE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa;CAGxD"}