@factorearth/recordmiddleware-dataaccesslayer 0.0.1-y.9 → 1.0.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.
@@ -2,3 +2,4 @@ import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
2
2
  import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
3
3
  const dynamoDbClient = new DynamoDBClient();
4
4
  export const dynamoDbDocClient = DynamoDBDocumentClient.from(dynamoDbClient);
5
+ //# sourceMappingURL=aws-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-services.js","sourceRoot":"","sources":["../lib/aws-services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- import { BatchInput } from "index";
1
+ import { BatchInput } from "./index.js";
2
2
  export declare function batchDeleteItems(items: BatchInput[], tableName: string): Promise<void>;
@@ -1,9 +1,9 @@
1
1
  import { BatchWriteCommand } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
3
- import chunkBatch from "chunkBatch";
4
- import { MAX_ITEMS_BATCH_OPERATIONS } from "index";
2
+ import { dynamoDbDocClient } from "./aws-services.js";
3
+ import chunkBatch from "./chunkBatch.js";
4
+ import { MAX_ITEMS_BATCH_WRITE } from "./index.js";
5
5
  export async function batchDeleteItems(items, tableName) {
6
- const chunks = chunkBatch(items, MAX_ITEMS_BATCH_OPERATIONS);
6
+ const chunks = chunkBatch(items, MAX_ITEMS_BATCH_WRITE);
7
7
  for (const chunk of chunks) {
8
8
  const deleteRequests = chunk.map((id) => {
9
9
  return {
@@ -27,3 +27,4 @@ export async function batchDeleteItems(items, tableName) {
27
27
  }
28
28
  }
29
29
  }
30
+ //# sourceMappingURL=batchDeleteItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchDeleteItems.js","sourceRoot":"","sources":["../lib/batchDeleteItems.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAc,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAmB,EAAE,SAAiB;IAC5E,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACvC,OAAO;gBACN,aAAa,EAAE;oBACd,GAAG,EAAE,EAAE,EAAE,EAAE;iBACX;aACD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAA2B;YAC5C,YAAY,EAAE;gBACb,CAAC,SAAS,CAAC,EAAE,cAAc;aAC3B;SACD,CAAC;QACF,MAAM,OAAO,GAAsB,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC;YACJ,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -1,2 +1,2 @@
1
- import { BatchInput } from "index";
1
+ import { BatchInput } from "./index.js";
2
2
  export declare function batchGetItems(ids: BatchInput[], tableName: string): Promise<Record<string, any>[]>;
@@ -1,24 +1,35 @@
1
1
  import { BatchGetCommand } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
2
+ import { dynamoDbDocClient } from "./aws-services.js";
3
+ import chunkBatch from "./chunkBatch.js";
4
+ import { MAX_ITEMS_BATCH_READ } from "./index.js";
3
5
  export async function batchGetItems(ids, tableName) {
4
- const commandInput = {
5
- RequestItems: {
6
- [tableName]: {
7
- Keys: ids
6
+ const chunks = chunkBatch(ids, MAX_ITEMS_BATCH_READ);
7
+ const finalItems = [];
8
+ for (const chunk of chunks) {
9
+ const commandInput = {
10
+ RequestItems: {
11
+ [tableName]: {
12
+ Keys: chunk
13
+ }
8
14
  }
15
+ };
16
+ const command = new BatchGetCommand(commandInput);
17
+ try {
18
+ const sendResult = await dynamoDbDocClient.send(command);
19
+ const items = sendResult.Responses?.[tableName];
20
+ if (items) {
21
+ for (const item of items) {
22
+ finalItems.push(item);
23
+ }
24
+ }
25
+ ;
26
+ }
27
+ catch (err) {
28
+ console.error(`ERROR BATCH GETTING ITEMS FROM ${tableName}`);
29
+ console.error("IDS ", chunk);
30
+ console.error(err);
9
31
  }
10
- };
11
- const command = new BatchGetCommand(commandInput);
12
- try {
13
- const sendResult = await dynamoDbDocClient.send(command);
14
- const items = sendResult.Responses?.[tableName];
15
- if (items)
16
- return items;
17
- }
18
- catch (err) {
19
- console.error(`ERROR BATCH GETTING ITEMS FROM ${tableName}`);
20
- console.error("IDS ", ids);
21
- console.error(err);
22
32
  }
23
- return [];
33
+ return finalItems;
24
34
  }
35
+ //# sourceMappingURL=batchGetItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchGetItems.js","sourceRoot":"","sources":["../lib/batchGetItems.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAwB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAc,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAiB,EAAE,SAAiB;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAyB;YAC1C,YAAY,EAAE;gBACb,CAAC,SAAS,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK;iBACX;aACD;SACD,CAAC;QACF,MAAM,OAAO,GAAoB,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC;QACnE,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE,CAAC;gBACX,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBAC1B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC;YAAA,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC"}
@@ -1,2 +1,2 @@
1
- import { BatchInput } from "index";
1
+ import { BatchInput } from "./index.js";
2
2
  export declare function batchPutItems(items: BatchInput[], tableName: string): Promise<void>;
@@ -1,9 +1,9 @@
1
1
  import { BatchWriteCommand } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "./aws-services";
3
- import chunkBatch from "./chunkBatch";
4
- import { MAX_ITEMS_BATCH_OPERATIONS } from "index";
2
+ import { dynamoDbDocClient } from "./aws-services.js";
3
+ import chunkBatch from "./chunkBatch.js";
4
+ import { MAX_ITEMS_BATCH_WRITE } from "./index.js";
5
5
  export async function batchPutItems(items, tableName) {
6
- const chunks = chunkBatch(items, MAX_ITEMS_BATCH_OPERATIONS);
6
+ const chunks = chunkBatch(items, MAX_ITEMS_BATCH_WRITE);
7
7
  for (const chunk of chunks) {
8
8
  const putRequests = chunk.map((Item) => {
9
9
  return {
@@ -23,7 +23,8 @@ export async function batchPutItems(items, tableName) {
23
23
  }
24
24
  catch (err) {
25
25
  console.error(`ERROR BATCH PUTTING DOCUMENTS IN ${tableName}`, err);
26
- console.error(`DOCUMENTS: `, putRequests);
26
+ console.error(`DOCUMENTS `, putRequests);
27
27
  }
28
28
  }
29
29
  }
30
+ //# sourceMappingURL=batchPutItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchPutItems.js","sourceRoot":"","sources":["../lib/batchPutItems.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAc,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAmB,EAAE,SAAiB;IACzE,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACtC,OAAO;gBACN,UAAU,EAAE;oBACX,IAAI;iBACJ;aACD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAA2B;YAC5C,YAAY,EAAE;gBACb,CAAC,SAAS,CAAC,EAAE,WAAW;aACxB;SACD,CAAC;QACF,MAAM,OAAO,GAAsB,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC;YACJ,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,qCAAqC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -23,3 +23,4 @@ export default function chunkBatch(array, itemMax) {
23
23
  }
24
24
  return final;
25
25
  }
26
+ //# sourceMappingURL=chunkBatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkBatch.js","sourceRoot":"","sources":["../lib/chunkBatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAI,KAAU,EAAE,OAAe;IAChE,MAAM,KAAK,GAAU,EAAE,CAAC;IACxB,IAAI,KAAK,GAAQ,EAAE,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACpC,oCAAoC;YACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;QAEnB,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { DeleteCommand } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
2
+ import { dynamoDbDocClient } from "./aws-services.js";
3
3
  export async function deleteItem(id, tableName) {
4
4
  const commandInput = {
5
5
  TableName: tableName,
@@ -16,3 +16,4 @@ export async function deleteItem(id, tableName) {
16
16
  console.error(err);
17
17
  }
18
18
  }
19
+ //# sourceMappingURL=deleteItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteItem.js","sourceRoot":"","sources":["../lib/deleteItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAsB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAU,EAAE,SAAiB;IAC7D,MAAM,YAAY,GAAuB;QACxC,SAAS,EAAE,SAAS;QACpB,GAAG,EAAE;YACJ,EAAE;SACF;KACD,CAAC;IACF,MAAM,OAAO,GAAkB,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC;QACJ,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,OAAO,SAAS,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACF,CAAC"}
package/dist/getItem.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export declare const getItem: (id: string, tableName: string) => Promise<Record<string, any> | null | undefined>;
2
- export declare const getItemsByIndex: (indexName: string, tableName: string, attributeValue: string, attribute: string) => Promise<Record<string, any>[]>;
2
+ export declare const getItemsByIndex: (indexName: string, tableName: string, attributeValue: string, attribute: string, columns?: string[]) => Promise<Record<string, any>[]>;
package/dist/getItem.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { dynamoDbDocClient } from "./aws-services.js";
2
2
  import { GetCommand, QueryCommand } from "@aws-sdk/lib-dynamodb";
3
+ import { _columnsAndAttributeToReturn } from "./utils.js";
3
4
  export const getItem = async (id, tableName) => {
4
5
  const params = {
5
6
  TableName: tableName,
@@ -16,18 +17,20 @@ export const getItem = async (id, tableName) => {
16
17
  return null;
17
18
  }
18
19
  };
19
- export const getItemsByIndex = async (indexName, tableName, attributeValue, attribute) => {
20
+ export const getItemsByIndex = async (indexName, tableName, attributeValue, attribute, columns) => {
21
+ const { expressionAttributeNames, columnsToReturn } = _columnsAndAttributeToReturn({ attribute, columns });
20
22
  const params = {
21
23
  TableName: tableName,
22
24
  IndexName: indexName,
23
25
  KeyConditionExpression: `#fk = :fkval`,
24
- ExpressionAttributeNames: {
25
- "#fk": `${attribute}`
26
- },
26
+ ExpressionAttributeNames: expressionAttributeNames,
27
27
  ExpressionAttributeValues: {
28
28
  ":fkval": attributeValue
29
29
  }
30
30
  };
31
+ if (columnsToReturn) {
32
+ params.ProjectionExpression = columnsToReturn;
33
+ }
31
34
  try {
32
35
  const data = await dynamoDbDocClient.send(new QueryCommand(params));
33
36
  return data.Items || [];
@@ -37,3 +40,4 @@ export const getItemsByIndex = async (indexName, tableName, attributeValue, attr
37
40
  return [];
38
41
  }
39
42
  };
43
+ //# sourceMappingURL=getItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getItem.js","sourceRoot":"","sources":["../lib/getItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAmB,YAAY,EAAqB,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,EAAU,EAAE,SAAiB,EAAG,EAAE;IAC/D,MAAM,MAAM,GAAoB;QAC/B,SAAS,EAAE,SAAS;QACpB,GAAG,EAAE;YACJ,EAAE;SACF;KACD,CAAC;IACF,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,SAAiB,EAAE,SAAiB,EAAE,cAAqB,EAAE,SAAiB,EAAE,OAAkB,EAAE,EAAE;IAC3I,MAAM,EAAE,wBAAwB,EAAE,eAAe,EAAE,GAAG,4BAA4B,CAAC,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;IAEzG,MAAM,MAAM,GAAsB;QACjC,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,sBAAsB,EAAE,cAAc;QACtC,wBAAwB,EAAE,wBAAwB;QAClD,yBAAyB,EAAE;YAC1B,QAAQ,EAAE,cAAc;SACxB;KACD,CAAC;IAEF,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,CAAC,oBAAoB,GAAG,eAAe,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,15 @@
1
- export * from "./aws-services";
2
- export * from "./batchDeleteItems";
3
- export * from "./batchGetItems";
4
- export * from "./batchPutItems";
5
- export * from "./chunkBatch";
6
- export * from "./deleteItem";
7
- export * from "./getItem";
8
- export * from "./putItem";
9
- export * from "./updateItem";
10
- export declare const MAX_ITEMS_BATCH_OPERATIONS = 25;
1
+ export * from "./aws-services.js";
2
+ export * from "./batchDeleteItems.js";
3
+ export * from "./batchGetItems.js";
4
+ export * from "./batchPutItems.js";
5
+ export * from "./chunkBatch.js";
6
+ export * from "./deleteItem.js";
7
+ export * from "./getItem.js";
8
+ export * from "./putItem.js";
9
+ export * from "./updateItem.js";
10
+ export * from "./utils.js";
11
+ export declare const MAX_ITEMS_BATCH_WRITE = 25;
12
+ export declare const MAX_ITEMS_BATCH_READ = 100;
11
13
  export interface BatchInput {
12
14
  id: string;
13
15
  }
package/dist/index.js CHANGED
@@ -1,10 +1,13 @@
1
- export * from "./aws-services";
2
- export * from "./batchDeleteItems";
3
- export * from "./batchGetItems";
4
- export * from "./batchPutItems";
5
- export * from "./chunkBatch";
6
- export * from "./deleteItem";
7
- export * from "./getItem";
8
- export * from "./putItem";
9
- export * from "./updateItem";
10
- export const MAX_ITEMS_BATCH_OPERATIONS = 25;
1
+ export * from "./aws-services.js";
2
+ export * from "./batchDeleteItems.js";
3
+ export * from "./batchGetItems.js";
4
+ export * from "./batchPutItems.js";
5
+ export * from "./chunkBatch.js";
6
+ export * from "./deleteItem.js";
7
+ export * from "./getItem.js";
8
+ export * from "./putItem.js";
9
+ export * from "./updateItem.js";
10
+ export * from "./utils.js";
11
+ export const MAX_ITEMS_BATCH_WRITE = 25;
12
+ export const MAX_ITEMS_BATCH_READ = 100;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAE3B,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC"}
package/dist/putItem.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { PutCommand } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
2
+ import { dynamoDbDocClient } from "./aws-services.js";
3
3
  export async function putItem(item, tableName) {
4
4
  const commandInput = {
5
5
  Item: item,
@@ -15,3 +15,4 @@ export async function putItem(item, tableName) {
15
15
  console.error(err);
16
16
  }
17
17
  }
18
+ //# sourceMappingURL=putItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"putItem.js","sourceRoot":"","sources":["../lib/putItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAyB,EAAE,SAAiB;IACzE,MAAM,YAAY,GAAoB;QACrC,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,SAAS;KACpB,CAAC;IACF,MAAM,OAAO,GAAe,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC;QACJ,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { UpdateCommand } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
2
+ import { dynamoDbDocClient } from "./aws-services.js";
3
3
  export async function updateItem(item, tableName) {
4
4
  const commandInput = {
5
5
  TableName: tableName,
@@ -15,3 +15,4 @@ export async function updateItem(item, tableName) {
15
15
  console.error(err);
16
16
  }
17
17
  }
18
+ //# sourceMappingURL=updateItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateItem.js","sourceRoot":"","sources":["../lib/updateItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAsB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAyB,EAAE,SAAiB;IAC5E,MAAM,YAAY,GAAuB;QACxC,SAAS,EAAE,SAAS;QACpB,GAAG,EAAE,IAAI;KACT,CAAC;IACF,MAAM,OAAO,GAAkB,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC;QACJ,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const _columnsAndAttributeToReturn: ({ attribute, columns, }: {
2
+ attribute: string;
3
+ columns?: string[];
4
+ }) => {
5
+ expressionAttributeNames: {
6
+ [key: string]: string;
7
+ };
8
+ columnsToReturn: string | undefined;
9
+ };
package/dist/utils.js ADDED
@@ -0,0 +1,14 @@
1
+ export const _columnsAndAttributeToReturn = ({ attribute, columns, }) => {
2
+ const expressionAttributeNames = {
3
+ "#fk": `${attribute}`,
4
+ };
5
+ const columnsToReturn = columns
6
+ ?.map((col, index) => {
7
+ const placeholder = `#col${index}`;
8
+ expressionAttributeNames[placeholder] = col;
9
+ return placeholder;
10
+ })
11
+ .join(", ");
12
+ return { expressionAttributeNames, columnsToReturn };
13
+ };
14
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAC5C,SAAS,EACT,OAAO,GAIP,EAAE,EAAE;IACJ,MAAM,wBAAwB,GAA8B;QAC3D,KAAK,EAAE,GAAG,SAAS,EAAE;KACrB,CAAC;IAEF,MAAM,eAAe,GAAG,OAAO;QAC9B,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,WAAW,GAAG,OAAO,KAAK,EAAE,CAAC;QACnC,wBAAwB,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAC5C,OAAO,WAAW,CAAC;IACpB,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,CAAC;AACtD,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,33 +1,36 @@
1
1
  {
2
- "name": "@factorearth/recordmiddleware-dataaccesslayer",
3
- "version": "0.0.1-y.9",
4
- "description": "A module for accessing dynamdb efficiently",
5
- "author": "madtrx <marlin.makori@gmail.com>",
6
- "homepage": "https://github.com/FactorEarth/RecordMiddleware#readme",
7
- "license": "ISC",
8
- "type": "module",
9
- "main": "dist/index.js",
10
- "types": "dist/index.d.ts",
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/FactorEarth/RecordMiddleware.git"
14
- },
15
- "scripts": {
16
- "test": "node ./__tests__/dataAccessLayer.test.js"
17
- },
18
- "bugs": {
19
- "url": "https://github.com/FactorEarth/RecordMiddleware/issues"
20
- },
21
- "dependencies": {
22
- "@aws-sdk/client-dynamodb": "^3.585.0",
23
- "@aws-sdk/lib-dynamodb": "^3.585.0"
24
- },
25
- "devDependencies": {
26
- "@types/node": "^20.12.13"
27
- },
28
- "publishConfig": {
29
- "access": "public",
30
- "registry": "https://registry.npmjs.org/"
31
- },
32
- "gitHead": "5072833d64b021125ba46394928ca84ddae91093"
2
+ "name": "@factorearth/recordmiddleware-dataaccesslayer",
3
+ "version": "1.0.0",
4
+ "description": "A module for accessing dynamdb efficiently",
5
+ "author": "madtrx <marlin.makori@gmail.com>",
6
+ "homepage": "https://github.com/FactorEarth/RecordMiddleware#readme",
7
+ "license": "ISC",
8
+ "main": "dist/index",
9
+ "types": "dist/index",
10
+ "type": "module",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "test": "node ./__tests__/errorHandler.test.js"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/FactorEarth/RecordMiddleware.git"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/FactorEarth/RecordMiddleware/issues"
23
+ },
24
+ "dependencies": {
25
+ "@aws-sdk/client-dynamodb": "^3.585.0",
26
+ "@aws-sdk/lib-dynamodb": "^3.585.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20.12.13"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public",
33
+ "registry": "https://registry.npmjs.org/"
34
+ },
35
+ "gitHead": "c1b81a1d2d0b8acfdfed6c8f305e08e66fee9b1c"
33
36
  }
@@ -1,5 +0,0 @@
1
- import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
2
- import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
3
-
4
- const dynamoDbClient = new DynamoDBClient();
5
- export const dynamoDbDocClient = DynamoDBDocumentClient.from(dynamoDbClient);
@@ -1,29 +0,0 @@
1
- import { BatchWriteCommand, BatchWriteCommandInput } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
3
- import chunkBatch from "chunkBatch";
4
- import { BatchInput, MAX_ITEMS_BATCH_OPERATIONS } from "index";
5
-
6
- export async function batchDeleteItems(items: BatchInput[], tableName: string) {
7
- const chunks = chunkBatch(items, MAX_ITEMS_BATCH_OPERATIONS);
8
- for (const chunk of chunks) {
9
- const deleteRequests = chunk.map((id) => {
10
- return {
11
- DeleteRequest: {
12
- Key: { id }
13
- }
14
- };
15
- });
16
- const commandInput: BatchWriteCommandInput = {
17
- RequestItems: {
18
- [tableName]: deleteRequests
19
- }
20
- };
21
- const command: BatchWriteCommand = new BatchWriteCommand(commandInput);
22
- try {
23
- await dynamoDbDocClient.send(command);
24
- } catch (err) {
25
- console.error(`ERROR BATCH DELETING FROM TABLE ${tableName}`, err);
26
- console.log('IDS', deleteRequests);
27
- }
28
- }
29
- }
@@ -1,24 +0,0 @@
1
- import { BatchGetCommand, BatchGetCommandInput } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
3
- import { BatchInput } from "index";
4
-
5
- export async function batchGetItems(ids: BatchInput[], tableName: string) {
6
- const commandInput: BatchGetCommandInput = {
7
- RequestItems: {
8
- [tableName]: {
9
- Keys: ids
10
- }
11
- }
12
- };
13
- const command: BatchGetCommand = new BatchGetCommand(commandInput);
14
- try {
15
- const sendResult = await dynamoDbDocClient.send(command);
16
- const items = sendResult.Responses?.[tableName];
17
- if (items) return items;
18
- } catch (err) {
19
- console.error(`ERROR BATCH GETTING ITEMS FROM ${tableName}`);
20
- console.error("IDS ", ids);
21
- console.error(err);
22
- }
23
- return [];
24
- }
@@ -1,29 +0,0 @@
1
- import { BatchWriteCommand, BatchWriteCommandInput } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "./aws-services";
3
- import chunkBatch from "./chunkBatch";
4
- import { BatchInput, MAX_ITEMS_BATCH_OPERATIONS } from "index";
5
-
6
- export async function batchPutItems(items: BatchInput[], tableName: string) {
7
- const chunks = chunkBatch(items, MAX_ITEMS_BATCH_OPERATIONS);
8
- for (const chunk of chunks) {
9
- const putRequests = chunk.map((Item) => {
10
- return {
11
- PutRequest: {
12
- Item
13
- }
14
- };
15
- });
16
- const commandInput: BatchWriteCommandInput = {
17
- RequestItems: {
18
- [tableName]: putRequests
19
- }
20
- };
21
- const command: BatchWriteCommand = new BatchWriteCommand(commandInput);
22
- try {
23
- await dynamoDbDocClient.send(command);
24
- } catch (err) {
25
- console.error(`ERROR BATCH PUTTING DOCUMENTS IN ${tableName}`, err);
26
- console.error(`DOCUMENTS: `, putRequests);
27
- }
28
- }
29
- }
package/lib/chunkBatch.ts DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * Given an array of items, this module chunks them out into smaller arrays of {@link itemMax} length
3
- * @param array An array of items that we want to divide into a subset of arrays
4
- * @param itemMax The maximum number of items that can be in each array
5
- * @returns An array of item arrays
6
- */
7
- export default function chunkBatch<T>(array: T[], itemMax: number): T[][] {
8
- const final: T[][] = [];
9
- let chunk: T[] = [];
10
- for (let i = 0; i < array.length; i++) {
11
- const element = array[i];
12
- if (i !== 0 && (i % itemMax === 0)) {
13
- // Its the beginning of the next one
14
- final.push(chunk);
15
- chunk = [element];
16
-
17
- } else {
18
- chunk.push(element);
19
- }
20
- }
21
-
22
- if (chunk.length > 0) {
23
- final.push(chunk);
24
- }
25
-
26
- return final;
27
- }
package/lib/deleteItem.ts DELETED
@@ -1,18 +0,0 @@
1
- import { DeleteCommand, DeleteCommandInput } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
3
-
4
- export async function deleteItem(id: string, tableName: string) {
5
- const commandInput: DeleteCommandInput = {
6
- TableName: tableName,
7
- Key: {
8
- id
9
- }
10
- };
11
- const command: DeleteCommand = new DeleteCommand(commandInput);
12
- try {
13
- await dynamoDbDocClient.send(command);
14
- } catch (err) {
15
- console.error(`ERROR DELETING DOCUMENT ${id} in ${tableName}`);
16
- console.error(err);
17
- }
18
- }
package/lib/getItem.ts DELETED
@@ -1,41 +0,0 @@
1
- import { dynamoDbDocClient } from "./aws-services.js";
2
- import { GetCommand, GetCommandInput, QueryCommand, QueryCommandInput } from "@aws-sdk/lib-dynamodb";
3
-
4
- export const getItem = async (id: string, tableName: string) => {
5
- const params: GetCommandInput = {
6
- TableName: tableName,
7
- Key: {
8
- id
9
- }
10
- };
11
- try {
12
- const data = await dynamoDbDocClient.send(new GetCommand(params));
13
- return data.Item;
14
- } catch (err) {
15
- console.error("Error", err);
16
- return null;
17
- }
18
- }
19
-
20
- export const getItemsByIndex = async (indexName: string, tableName: string, attributeValue:string, attribute: string) => {
21
-
22
- const params: QueryCommandInput = {
23
- TableName: tableName,
24
- IndexName: indexName,
25
- KeyConditionExpression: `#fk = :fkval`,
26
- ExpressionAttributeNames: {
27
- "#fk" : `${attribute}`
28
- },
29
- ExpressionAttributeValues: {
30
- ":fkval": attributeValue
31
- }
32
- };
33
-
34
- try {
35
- const data = await dynamoDbDocClient.send(new QueryCommand(params));
36
- return data.Items || [];
37
- } catch (err) {
38
- console.error("Error", err);
39
- return [];
40
- }
41
- }
package/lib/index.ts DELETED
@@ -1,15 +0,0 @@
1
- export * from "./aws-services";
2
- export * from "./batchDeleteItems";
3
- export * from "./batchGetItems";
4
- export * from "./batchPutItems";
5
- export * from "./chunkBatch";
6
- export * from "./deleteItem";
7
- export * from "./getItem";
8
- export * from "./putItem";
9
- export * from "./updateItem";
10
-
11
- export const MAX_ITEMS_BATCH_OPERATIONS = 25;
12
-
13
- export interface BatchInput {
14
- id: string;
15
- }
package/lib/putItem.ts DELETED
@@ -1,17 +0,0 @@
1
- import { PutCommand, PutCommandInput } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
3
-
4
- export async function putItem(item: Record<string, any>, tableName: string) {
5
- const commandInput: PutCommandInput = {
6
- Item: item,
7
- TableName: tableName
8
- };
9
- const command: PutCommand = new PutCommand(commandInput);
10
- try {
11
- await dynamoDbDocClient.send(command);
12
- } catch (err) {
13
- console.error(`ERROR PUTTING ITEM IN ${tableName}`);
14
- console.error("ITEM: ", item);
15
- console.error(err);
16
- }
17
- }
package/lib/updateItem.ts DELETED
@@ -1,17 +0,0 @@
1
- import { UpdateCommand, UpdateCommandInput } from "@aws-sdk/lib-dynamodb";
2
- import { dynamoDbDocClient } from "aws-services";
3
-
4
- export async function updateItem(item: Record<string, any>, tableName: string) {
5
- const commandInput: UpdateCommandInput = {
6
- TableName: tableName,
7
- Key: item
8
- };
9
- const command: UpdateCommand = new UpdateCommand(commandInput);
10
- try {
11
- await dynamoDbDocClient.send(command);
12
- } catch (err) {
13
- console.error(`ERROR UPDATING ITEM IN TABLE ${tableName}`);
14
- console.error(`ITEM: `, item);
15
- console.error(err);
16
- }
17
- }
package/tsconfig.json DELETED
@@ -1,33 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "baseUrl": "lib",
4
- "rootDir": "lib",
5
- "outDir": "dist",
6
- "target": "ESNext",
7
- "types": [
8
- "node"
9
- ],
10
- "lib": [
11
- "ESNext",
12
- "DOM",
13
- "DOM.Iterable"
14
- ],
15
- "module": "ESNext",
16
- "moduleResolution": "node",
17
- "skipLibCheck": true,
18
- "strict": true,
19
- "esModuleInterop": true,
20
- "forceConsistentCasingInFileNames": true,
21
- "declaration": true,
22
- "allowJs": true,
23
- "resolveJsonModule": true,
24
- },
25
- "include": [
26
- "lib/**/*.d.ts",
27
- "lib/**/*.ts",
28
- "lib/**/*.tsx"
29
- ],
30
- "exclude": [
31
- "./**/*.test.tsx"
32
- ],
33
- }