@squiz/db-lib 1.71.2 → 1.71.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +8 -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 +1 -0
  27. package/lib/dynamodb/AbstractDynamoDbRepository.d.ts.map +1 -0
  28. package/lib/dynamodb/AbstractDynamoDbRepository.js +367 -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 +698 -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.ts +1 -1
  73. package/src/dynamodb/getDynamoDbOptions.ts +1 -1
  74. package/tsconfig.json +5 -2
  75. package/tsconfig.tsbuildinfo +1 -1
  76. package/build.js +0 -31
@@ -0,0 +1,367 @@
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
+ * Finds all the items matching the partition key or
51
+ * the gsi key (when gsi index name is specified)
52
+ *
53
+ * @param item
54
+ * @param useSortKey
55
+ * @param index
56
+ * @throws MissingKeyValuesError
57
+ */
58
+ async queryItems(item, useSortKey = false, index) {
59
+ let pkName = this.keys.pk.attributeName;
60
+ let skName = this.keys.sk.attributeName;
61
+ let indexName = null;
62
+ if (index) {
63
+ if (this.indexes[index] === undefined) {
64
+ throw new __1.MissingKeyValuesError(`Table index '${index}' not defined on entity ${this.entityName}`);
65
+ }
66
+ indexName = index;
67
+ pkName = this.indexes[index].pk.attributeName;
68
+ skName = this.indexes[index].sk.attributeName;
69
+ }
70
+ const pk = this.getKey(item, pkName);
71
+ const keyConditionExpression = ['#pkName = :pkValue'];
72
+ const expressionAttributeNames = { '#pkName': pkName };
73
+ const expressionAttributeValues = { ':pkValue': pk };
74
+ if (useSortKey) {
75
+ const sk = this.getKey(item, skName);
76
+ keyConditionExpression.push('#skName = :skValue');
77
+ expressionAttributeNames['#skName'] = skName;
78
+ expressionAttributeValues[':skValue'] = sk;
79
+ }
80
+ const queryCommandInput = {
81
+ TableName: this.tableName,
82
+ KeyConditionExpression: keyConditionExpression.join(' AND '),
83
+ ExpressionAttributeNames: expressionAttributeNames,
84
+ ExpressionAttributeValues: expressionAttributeValues,
85
+ };
86
+ if (indexName) {
87
+ queryCommandInput['IndexName'] = String(indexName);
88
+ }
89
+ const output = await this.client.query(queryCommandInput);
90
+ return !output.Items ? [] : output.Items.map((item) => this.hydrateItem(item));
91
+ }
92
+ /**
93
+ * Update the existing item matching the key fields value
94
+ * in the passed in partialItem
95
+ * @param partialItem
96
+ * @param newValue
97
+ * @param transaction
98
+ *
99
+ * @returns Promise<SHAPE | undefined>
100
+ * @throws MissingKeyValuesError
101
+ */
102
+ async updateItem(partialItem, newValue, transaction = {}) {
103
+ var _a, _b;
104
+ const oldValue = await this.getItem(partialItem);
105
+ if (oldValue === undefined) {
106
+ return undefined;
107
+ }
108
+ const value = { ...oldValue, ...newValue };
109
+ this.assertValueMatchesModel(value);
110
+ this.convertSelectedValuesToJsonString(newValue);
111
+ const updateExpression = [];
112
+ const expressionAttributeNames = {};
113
+ const expressionAttributeValues = {};
114
+ for (const modelProperty of Object.keys(newValue)) {
115
+ const propName = `#${modelProperty}`;
116
+ const propValue = `:${modelProperty}`;
117
+ updateExpression.push(`${propName} = ${propValue}`);
118
+ expressionAttributeNames[propName] = modelProperty;
119
+ expressionAttributeValues[propValue] = (_a = newValue[modelProperty]) !== null && _a !== void 0 ? _a : null;
120
+ }
121
+ const updateCommandInput = {
122
+ TableName: this.tableName,
123
+ Key: {
124
+ [this.keys.pk.attributeName]: this.getPk(partialItem),
125
+ [this.keys.sk.attributeName]: this.getSk(partialItem),
126
+ },
127
+ UpdateExpression: 'SET ' + updateExpression.join(','),
128
+ ExpressionAttributeValues: expressionAttributeValues,
129
+ ExpressionAttributeNames: expressionAttributeNames,
130
+ ConditionExpression: `attribute_exists(${this.keys.pk.attributeName})`,
131
+ };
132
+ if ((_b = transaction.id) === null || _b === void 0 ? void 0 : _b.length) {
133
+ // this command will be executed together with
134
+ // other db write commands in the "transaction" block
135
+ this.dbManager.addWriteTransactionItem(transaction.id, {
136
+ Update: updateCommandInput,
137
+ });
138
+ return new this.classRef(value);
139
+ }
140
+ let output;
141
+ try {
142
+ output = await this.client.update({
143
+ ...updateCommandInput,
144
+ ReturnValues: 'ALL_NEW',
145
+ });
146
+ }
147
+ catch (e) {
148
+ if (e && e.name === 'ConditionalCheckFailedException') {
149
+ return undefined;
150
+ }
151
+ throw e;
152
+ }
153
+ let item = undefined;
154
+ if (output.Attributes) {
155
+ item = this.hydrateItem(output.Attributes);
156
+ }
157
+ return item ? item : undefined;
158
+ }
159
+ /**
160
+ * Adds new item to the table
161
+ *
162
+ * @param value
163
+ * @param transaction
164
+ *
165
+ * @returns Promise<SHAPE>
166
+ * @throws DuplicateItemError
167
+ * @throws MissingKeyValuesError
168
+ */
169
+ async createItem(value, transaction = {}) {
170
+ var _a;
171
+ this.assertValueMatchesModel(value);
172
+ const columns = {};
173
+ for (const modelProperty of Object.keys(value)) {
174
+ columns[modelProperty] = value[modelProperty];
175
+ }
176
+ this.convertSelectedValuesToJsonString(columns);
177
+ const keyFields = {
178
+ [this.keys.pk.attributeName]: this.getPk(value),
179
+ [this.keys.sk.attributeName]: this.getSk(value),
180
+ };
181
+ Object.keys(this.indexes).forEach((key) => {
182
+ const index = this.indexes[key];
183
+ keyFields[index.pk.attributeName] = this.getKey(value, index.pk.attributeName);
184
+ keyFields[index.sk.attributeName] = this.getKey(value, index.sk.attributeName);
185
+ });
186
+ const putCommandInput = {
187
+ TableName: this.tableName,
188
+ Item: {
189
+ ...keyFields,
190
+ ...columns,
191
+ },
192
+ ConditionExpression: `attribute_not_exists(${this.keys.pk.attributeName})`,
193
+ };
194
+ if ((_a = transaction.id) === null || _a === void 0 ? void 0 : _a.length) {
195
+ // this command will be executed together with
196
+ // other db write commands in the "transaction block"
197
+ this.dbManager.addWriteTransactionItem(transaction.id, {
198
+ Put: putCommandInput,
199
+ });
200
+ return value;
201
+ }
202
+ await this.client.put(putCommandInput);
203
+ return value;
204
+ }
205
+ /**
206
+ * Deletes an item from the table
207
+ *
208
+ * @param partialItem
209
+ * @param transaction
210
+ * @returns number
211
+ * @throw MissingKeyValuesError
212
+ */
213
+ async deleteItem(partialItem, transaction = {}) {
214
+ var _a;
215
+ const deleteCommandInput = {
216
+ TableName: this.tableName,
217
+ Key: {
218
+ [this.keys.pk.attributeName]: this.getPk(partialItem),
219
+ [this.keys.sk.attributeName]: this.getSk(partialItem),
220
+ },
221
+ ConditionExpression: `attribute_exists(${this.keys.pk.attributeName})`,
222
+ };
223
+ if ((_a = transaction.id) === null || _a === void 0 ? void 0 : _a.length) {
224
+ // For transaction block, don't worry if the item being deleted does not exist
225
+ delete deleteCommandInput.ConditionExpression;
226
+ // this command will be executed together with
227
+ // other db write commands in the "transaction block"
228
+ this.dbManager.addWriteTransactionItem(transaction.id, {
229
+ Delete: deleteCommandInput,
230
+ });
231
+ return 1;
232
+ }
233
+ try {
234
+ await this.client.delete(deleteCommandInput);
235
+ }
236
+ catch (e) {
237
+ if (e && e.name === 'ConditionalCheckFailedException') {
238
+ return 0;
239
+ }
240
+ throw e;
241
+ }
242
+ return 1;
243
+ }
244
+ /**
245
+ * Return repo model object from the db value
246
+ * @param item
247
+ * @returns
248
+ */
249
+ hydrateItem(item) {
250
+ for (const fieldName of Object.keys(item)) {
251
+ if (this.fieldsAsJsonString.includes(fieldName)) {
252
+ if (typeof item[fieldName] === 'string') {
253
+ item[fieldName] = JSON.parse(item[fieldName]);
254
+ }
255
+ else {
256
+ throw new InvalidDataFormatError_1.InvalidDataFormatError(`Field '${fieldName}' defined as JSON String has a non-string data`);
257
+ }
258
+ }
259
+ }
260
+ return new this.classRef(item);
261
+ }
262
+ convertSelectedValuesToJsonString(item) {
263
+ for (const fieldName of Object.keys(item)) {
264
+ if (this.fieldsAsJsonString.includes(fieldName)) {
265
+ item[fieldName] = JSON.stringify(item[fieldName]);
266
+ }
267
+ }
268
+ }
269
+ /**
270
+ * Evaluate the partition key value from the partial item
271
+ * @param item
272
+ * @returns string
273
+ * @throw MissingKeyValuesError
274
+ */
275
+ getPk(item) {
276
+ return this.getKey(item, this.keys.pk.attributeName);
277
+ }
278
+ /**
279
+ * Evaluate the sort key value from the partial item
280
+ * @param item
281
+ * @returns string
282
+ *
283
+ * @throw MissingKeyValuesError
284
+ */
285
+ getSk(item) {
286
+ return this.getKey(item, this.keys.sk.attributeName);
287
+ }
288
+ /**
289
+ * Evaluate the key value from the
290
+ *
291
+ * Example 1:
292
+ * Input:
293
+ * - item: {id: foo, name: 'some-name' }
294
+ * - attributeName: pk
295
+ * - this.keysFormat = { pk: 'item#{id}', 'sk': '#meta', ... }
296
+ * Output:
297
+ * - 'item#foo'
298
+ *
299
+ * Example 2:
300
+ * Input:
301
+ * - item: {id: foo, name: 'some-name', itemType: 'A' }
302
+ * - attributeName: sk
303
+ * - this.keysFormat = { pk: 'item#{id}', 'sk': 'type#{itemType}', ... }
304
+ * Output:
305
+ * - 'type#A'
306
+ *
307
+ * Example 3:
308
+ * Input:
309
+ * - item: {id: foo, name: 'some-name' }
310
+ * - attributeName: sk
311
+ * - this.keysFormat = { pk: 'item#{id}', 'sk': 'name-type#{itemType}{name}', ... }
312
+ * Output:
313
+ * - Error: "Key field "itemType" must be specified in the input item"
314
+ *
315
+ * @param item
316
+ * @param attributeName
317
+ *
318
+ * @returns string
319
+ * @throw MissingKeyValuesError
320
+ */
321
+ getKey(item, attributeName) {
322
+ var _a;
323
+ let keyFormat = this.keysFormat[attributeName];
324
+ if (keyFormat == undefined || !keyFormat.length) {
325
+ throw new __1.MissingKeyValuesError(`Key format not defined or empty for key attribute '${attributeName}' in entity ${this.entityName}`);
326
+ }
327
+ const matches = keyFormat.match(/{[a-zA-Z]+?}/g);
328
+ const replacements = !matches
329
+ ? []
330
+ : matches.map((match) => {
331
+ return {
332
+ property: match.slice(1, -1),
333
+ placeholder: match,
334
+ };
335
+ });
336
+ for (let i = 0; i < replacements.length; i++) {
337
+ const field = replacements[i].property;
338
+ if (item[field] === undefined) {
339
+ throw new __1.MissingKeyValuesError(`Key field "${String(field)}" must be specified in the input item in entity ${this.entityName}`);
340
+ }
341
+ keyFormat = keyFormat.replace(replacements[i].placeholder, String((_a = item[field]) !== null && _a !== void 0 ? _a : ''));
342
+ }
343
+ const moreMatches = keyFormat.match(/{[a-zA-Z]+?}/g);
344
+ if (moreMatches === null || moreMatches === void 0 ? void 0 : moreMatches.length) {
345
+ throw new __1.MissingKeyValuesError(`Cannot resolve key placeholder(s) for key attribute format '${this.keysFormat[attributeName]} in entity ${this.entityName}: '${moreMatches.join("','")}'`);
346
+ }
347
+ return keyFormat;
348
+ }
349
+ /**
350
+ * Validate the data matches with "DATA_MODEL"
351
+ * @param value
352
+ * @return void
353
+ */
354
+ assertValueMatchesModel(value) {
355
+ // Trigger AssertionError if model instantiation fails
356
+ // see the DATA_CLASS model class
357
+ const obj = new this.classRef(value);
358
+ const inputProperties = Object.keys(value);
359
+ const modelProperties = Object.keys(obj);
360
+ const excessProperties = inputProperties.filter((prop) => !modelProperties.includes(prop));
361
+ if (excessProperties.length > 0) {
362
+ throw new __1.InvalidDbSchemaError(`Excess properties in entity ${this.entityName}: ${excessProperties.join(', ')}`);
363
+ }
364
+ }
365
+ }
366
+ exports.AbstractDynamoDbRepository = AbstractDynamoDbRepository;
367
+ //# 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,EAAE,MAAM,8BAA8B,CAAC;AAkB1E,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"}