ag-common 0.0.723 → 0.0.724

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.
@@ -156,26 +156,42 @@ const batchDelete = (_a) => __awaiter(void 0, [_a], void 0, function* ({ tableNa
156
156
  });
157
157
  exports.batchDelete = batchDelete;
158
158
  const scan = (tableName, opt) => __awaiter(void 0, void 0, void 0, function* () {
159
+ var _b, _c;
159
160
  try {
160
161
  let ExclusiveStartKey;
161
162
  let Items = [];
163
+ // Handle projection attributes
164
+ const projectionAttrs = (_b = opt === null || opt === void 0 ? void 0 : opt.requiredAttributeList) === null || _b === void 0 ? void 0 : _b.reduce((acc, attr, index) => {
165
+ const escapedName = `#proj${index}`;
166
+ acc[escapedName] = attr;
167
+ return acc;
168
+ }, {});
169
+ // Merge projection attribute names with filter attribute names
170
+ const expressionAttributeNames = Object.assign(Object.assign({}, projectionAttrs), (_c = opt === null || opt === void 0 ? void 0 : opt.filter) === null || _c === void 0 ? void 0 : _c.attrNames);
162
171
  do {
163
- let params = new lib_dynamodb_1.ScanCommand(Object.assign(Object.assign(Object.assign(Object.assign({ TableName: tableName }, ((opt === null || opt === void 0 ? void 0 : opt.filter) && Object.assign({ FilterExpression: opt.filter.filterExpression, ExpressionAttributeNames: opt.filter.attrNames }, (opt.filter.attrValues && {
172
+ const params = new lib_dynamodb_1.ScanCommand(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ TableName: tableName }, ((opt === null || opt === void 0 ? void 0 : opt.filter) && Object.assign({ FilterExpression: opt.filter.filterExpression }, (opt.filter.attrValues && {
164
173
  ExpressionAttributeValues: opt.filter.attrValues,
165
- })))), ((opt === null || opt === void 0 ? void 0 : opt.requiredAttributeList) && {
166
- ProjectionExpression: opt.requiredAttributeList.join(', '),
167
- })), { ExclusiveStartKey }), ((opt === null || opt === void 0 ? void 0 : opt.limit) && { Limit: opt.limit })));
174
+ })))), (Object.keys(expressionAttributeNames).length > 0 && {
175
+ ExpressionAttributeNames: expressionAttributeNames,
176
+ })), ((opt === null || opt === void 0 ? void 0 : opt.requiredAttributeList) && {
177
+ ProjectionExpression: opt.requiredAttributeList
178
+ .map((_, index) => `#proj${index}`)
179
+ .join(', '),
180
+ })), { ExclusiveStartKey }), (((opt === null || opt === void 0 ? void 0 : opt.limit) && Items.length < opt.limit) && {
181
+ Limit: opt.limit - Items.length
182
+ })));
168
183
  (0, log_1.debug)(`running dynamo scan=${JSON.stringify(params, null, 2)}`);
169
- const { Items: newitems, LastEvaluatedKey,
170
- // eslint-disable-next-line no-await-in-loop
171
- } = yield exports.dynamoDb.send(params);
184
+ const { Items: newItems = [], LastEvaluatedKey, } = yield exports.dynamoDb.send(params);
172
185
  ExclusiveStartKey = LastEvaluatedKey;
173
- if (newitems) {
174
- Items.push(...newitems.map((r) => r));
186
+ Items.push(...newItems);
187
+ // Break the loop if we've reached the limit
188
+ if ((opt === null || opt === void 0 ? void 0 : opt.limit) && Items.length >= opt.limit) {
189
+ break;
175
190
  }
176
- } while (ExclusiveStartKey && (!(opt === null || opt === void 0 ? void 0 : opt.limit) || Items.length < opt.limit));
177
- if (opt === null || opt === void 0 ? void 0 : opt.limit) {
178
- ({ part: Items } = (0, array_1.take)(Items, opt.limit));
191
+ } while (ExclusiveStartKey);
192
+ // Ensure we don't return more items than the limit
193
+ if ((opt === null || opt === void 0 ? void 0 : opt.limit) && Items.length > opt.limit) {
194
+ Items = Items.slice(0, opt.limit);
179
195
  }
180
196
  (0, log_1.debug)(`dynamo scan against ${tableName} ok, count=${Items.length}`);
181
197
  return { data: Items };
@@ -186,8 +202,8 @@ const scan = (tableName, opt) => __awaiter(void 0, void 0, void 0, function* ()
186
202
  }
187
203
  });
188
204
  exports.scan = scan;
189
- const getItemsDynamo = (_b) => __awaiter(void 0, [_b], void 0, function* ({ tableName, items, }) {
190
- var _c, _d;
205
+ const getItemsDynamo = (_d) => __awaiter(void 0, [_d], void 0, function* ({ tableName, items, }) {
206
+ var _e, _f;
191
207
  const params = new lib_dynamodb_1.BatchGetCommand({
192
208
  RequestItems: {
193
209
  [tableName]: {
@@ -199,7 +215,7 @@ const getItemsDynamo = (_b) => __awaiter(void 0, [_b], void 0, function* ({ tabl
199
215
  });
200
216
  try {
201
217
  let res = yield exports.dynamoDb.send(params);
202
- let data = (_d = (_c = res.Responses) === null || _c === void 0 ? void 0 : _c[tableName].map((r) => r)) !== null && _d !== void 0 ? _d : [];
218
+ let data = (_f = (_e = res.Responses) === null || _e === void 0 ? void 0 : _e[tableName].map((r) => r)) !== null && _f !== void 0 ? _f : [];
203
219
  return { data };
204
220
  }
205
221
  catch (e) {
@@ -209,7 +225,7 @@ const getItemsDynamo = (_b) => __awaiter(void 0, [_b], void 0, function* ({ tabl
209
225
  }
210
226
  });
211
227
  exports.getItemsDynamo = getItemsDynamo;
212
- const getItemDynamo = (_e) => __awaiter(void 0, [_e], void 0, function* ({ tableName, pkName, pkValue, }) {
228
+ const getItemDynamo = (_g) => __awaiter(void 0, [_g], void 0, function* ({ tableName, pkName, pkValue, }) {
213
229
  let r = yield (0, exports.getItemsDynamo)({ tableName, items: [{ pkName, pkValue }] });
214
230
  if ('error' in r) {
215
231
  return { error: r.error };
@@ -217,7 +233,7 @@ const getItemDynamo = (_e) => __awaiter(void 0, [_e], void 0, function* ({ table
217
233
  return { data: r.data[0] };
218
234
  });
219
235
  exports.getItemDynamo = getItemDynamo;
220
- const queryDynamo = (_f) => __awaiter(void 0, [_f], void 0, function* ({ tableName, pkName, pkValue, pkOperator = '=', skName, skValue, skOperator = '=', indexName, limit = 1000, startKey, filterName, filterValue, filterOperator = '=', sortAscending = true, }) {
236
+ const queryDynamo = (_h) => __awaiter(void 0, [_h], void 0, function* ({ tableName, pkName, pkValue, pkOperator = '=', skName, skValue, skOperator = '=', indexName, limit = 1000, startKey, filterName, filterValue, filterOperator = '=', sortAscending = true, }) {
221
237
  let kce = `#${pkName.toLowerCase()} ${pkOperator} :${pkName.toLowerCase()}`;
222
238
  const ean = { [`#${pkName.toLowerCase()}`]: pkName };
223
239
  const eav = {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.723",
2
+ "version": "0.0.724",
3
3
  "name": "ag-common",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",