Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@datastream/aws

Package Overview
Dependencies
Maintainers
1
Versions
47
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@datastream/aws - npm Package Compare versions

Comparing version
0.3.2
to
0.4.0
+2
-2
dynamodb.node.mjs

@@ -98,3 +98,3 @@ import {

}
await timeout(3 ** retryCount);
await timeout(3 ** retryCount, { signal: streamOptions.signal });
retryCount++;

@@ -157,3 +157,3 @@ keys = UnprocessedKeys;

}
await timeout(3 ** retryCount);
await timeout(3 ** retryCount, { signal: streamOptions?.signal });
return dynamodbBatchWrite(

@@ -160,0 +160,0 @@ options,

{
"version": 3,
"sources": ["dynamodb.js"],
"sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tBatchGetItemCommand,\n\tBatchWriteItemCommand,\n\tDynamoDBClient,\n\tExecuteStatementCommand,\n\tQueryCommand,\n\tScanCommand,\n} from \"@aws-sdk/client-dynamodb\";\nimport { createWritableStream, timeout } from \"@datastream/core\";\nimport { awsClientDefaults } from \"./client.js\";\n\nlet client = new DynamoDBClient(awsClientDefaults);\nexport const awsDynamoDBSetClient = (ddbClient, _translateConfig) => {\n\tclient = ddbClient;\n};\nawsDynamoDBSetClient(client);\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new QueryCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBScanStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ScanCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBExecuteStatementStream = async (\n\toptions,\n\tstreamOptions = {},\n) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ExecuteStatementCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items ?? []) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.NextToken = response.NextToken;\n\t\t\texpectMore = !!response.NextToken;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBGetItemStream = async (options, streamOptions = {}) => {\n\tif (options.Keys?.length > 100) {\n\t\tthrow new Error(\n\t\t\t`awsDynamoDBGetItemStream Keys.length (${options.Keys.length}) exceeds BatchGetItem limit of 100`,\n\t\t);\n\t}\n\tasync function* command(options) {\n\t\tlet keys = options.Keys;\n\t\tlet retryCount = options.retryCount ?? 0;\n\t\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\t\twhile (true) {\n\t\t\tconst response = await client.send(\n\t\t\t\tnew BatchGetItemCommand({\n\t\t\t\t\tRequestItems: {\n\t\t\t\t\t\t[options.TableName]: { Keys: keys },\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t{ abortSignal: streamOptions.signal },\n\t\t\t);\n\t\t\tfor (const item of response.Responses[options.TableName]) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tconst UnprocessedKeys =\n\t\t\t\tresponse?.UnprocessedKeys?.[options.TableName]?.Keys ?? [];\n\t\t\tif (!UnprocessedKeys.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (retryCount >= retryMaxCount) {\n\t\t\t\tthrow new Error(\"awsDynamoDBBatchGetItem has UnprocessedKeys\", {\n\t\t\t\t\tcause: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tUnprocessedKeysCount: UnprocessedKeys.length,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait timeout(3 ** retryCount); // 3^10 == 59sec\n\t\t\tretryCount++;\n\t\t\tkeys = UnprocessedKeys;\n\t\t}\n\t}\n\treturn command(options);\n};\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tPutRequest: {\n\t\t\t\tItem: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tDeleteRequest: {\n\t\t\t\tKey: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nconst dynamodbBatchWrite = async (\n\toptions,\n\tbatch,\n\tstreamOptions,\n\tretryCount = 0,\n) => {\n\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\tconst { UnprocessedItems } = await client.send(\n\t\tnew BatchWriteItemCommand({\n\t\t\tRequestItems: {\n\t\t\t\t[options.TableName]: batch,\n\t\t\t},\n\t\t}),\n\t\t{ abortSignal: streamOptions?.signal },\n\t);\n\tif (UnprocessedItems?.[options.TableName]?.length) {\n\t\tif (retryCount >= retryMaxCount) {\n\t\t\tthrow new Error(\"awsDynamoDBBatchWriteItem has UnprocessedItems\", {\n\t\t\t\tcause: {\n\t\t\t\t\t...options,\n\t\t\t\t\tUnprocessedItemsCount: UnprocessedItems[options.TableName].length,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tawait timeout(3 ** retryCount); // 3^10 == 59sec\n\t\treturn dynamodbBatchWrite(\n\t\t\toptions,\n\t\t\tUnprocessedItems[options.TableName],\n\t\t\tstreamOptions,\n\t\t\tretryCount + 1,\n\t\t);\n\t}\n};\n\nexport default {\n\tsetClient: awsDynamoDBSetClient,\n\tqueryStream: awsDynamoDBQueryStream,\n\tscanStream: awsDynamoDBScanStream,\n\texecuteStatementStream: awsDynamoDBExecuteStatementStream,\n\tgetItemStream: awsDynamoDBGetItemStream,\n\tputItemStream: awsDynamoDBPutItemStream,\n\tdeleteItemStream: awsDynamoDBDeleteItemStream,\n};\n"],
"mappings": "AAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,sBAAsB,eAAe;AAC9C,SAAS,yBAAyB;AAElC,IAAI,SAAS,IAAI,eAAe,iBAAiB;AAC1C,MAAM,uBAAuB,CAAC,WAAW,qBAAqB;AACpE,WAAS;AACV;AACA,qBAAqB,MAAM;AAIpB,MAAM,yBAAyB,OAAO,SAAS,gBAAgB,CAAC,MAAM;AAC5E,kBAAgB,QAAQ,MAAM;AAC7B,QAAI,aAAa;AACjB,WAAO,YAAY;AAClB,YAAM,WAAW,MAAM,OAAO,KAAK,IAAI,aAAa,IAAI,GAAG;AAAA,QAC1D,aAAa,cAAc;AAAA,MAC5B,CAAC;AACD,iBAAW,QAAQ,SAAS,OAAO;AAClC,cAAM;AAAA,MACP;AACA,WAAK,oBAAoB,SAAS;AAClC,mBAAa,CAAC,CAAC,SAAS;AAAA,IACzB;AAAA,EACD;AACA,SAAO,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAC9B;AAEO,MAAM,wBAAwB,OAAO,SAAS,gBAAgB,CAAC,MAAM;AAC3E,kBAAgB,QAAQ,MAAM;AAC7B,QAAI,aAAa;AACjB,WAAO,YAAY;AAClB,YAAM,WAAW,MAAM,OAAO,KAAK,IAAI,YAAY,IAAI,GAAG;AAAA,QACzD,aAAa,cAAc;AAAA,MAC5B,CAAC;AACD,iBAAW,QAAQ,SAAS,OAAO;AAClC,cAAM;AAAA,MACP;AACA,WAAK,oBAAoB,SAAS;AAClC,mBAAa,CAAC,CAAC,SAAS;AAAA,IACzB;AAAA,EACD;AACA,SAAO,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAC9B;AAEO,MAAM,oCAAoC,OAChD,SACA,gBAAgB,CAAC,MACb;AACJ,kBAAgB,QAAQ,MAAM;AAC7B,QAAI,aAAa;AACjB,WAAO,YAAY;AAClB,YAAM,WAAW,MAAM,OAAO,KAAK,IAAI,wBAAwB,IAAI,GAAG;AAAA,QACrE,aAAa,cAAc;AAAA,MAC5B,CAAC;AACD,iBAAW,QAAQ,SAAS,SAAS,CAAC,GAAG;AACxC,cAAM;AAAA,MACP;AACA,WAAK,YAAY,SAAS;AAC1B,mBAAa,CAAC,CAAC,SAAS;AAAA,IACzB;AAAA,EACD;AACA,SAAO,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAC9B;AAEO,MAAM,2BAA2B,OAAO,SAAS,gBAAgB,CAAC,MAAM;AAC9E,MAAI,QAAQ,MAAM,SAAS,KAAK;AAC/B,UAAM,IAAI;AAAA,MACT,yCAAyC,QAAQ,KAAK,MAAM;AAAA,IAC7D;AAAA,EACD;AACA,kBAAgB,QAAQA,UAAS;AAChC,QAAI,OAAOA,SAAQ;AACnB,QAAI,aAAaA,SAAQ,cAAc;AACvC,UAAM,gBAAgBA,SAAQ,iBAAiB;AAC/C,WAAO,MAAM;AACZ,YAAM,WAAW,MAAM,OAAO;AAAA,QAC7B,IAAI,oBAAoB;AAAA,UACvB,cAAc;AAAA,YACb,CAACA,SAAQ,SAAS,GAAG,EAAE,MAAM,KAAK;AAAA,UACnC;AAAA,QACD,CAAC;AAAA,QACD,EAAE,aAAa,cAAc,OAAO;AAAA,MACrC;AACA,iBAAW,QAAQ,SAAS,UAAUA,SAAQ,SAAS,GAAG;AACzD,cAAM;AAAA,MACP;AACA,YAAM,kBACL,UAAU,kBAAkBA,SAAQ,SAAS,GAAG,QAAQ,CAAC;AAC1D,UAAI,CAAC,gBAAgB,QAAQ;AAC5B;AAAA,MACD;AAEA,UAAI,cAAc,eAAe;AAChC,cAAM,IAAI,MAAM,+CAA+C;AAAA,UAC9D,OAAO;AAAA,YACN,GAAGA;AAAA,YACH,sBAAsB,gBAAgB;AAAA,UACvC;AAAA,QACD,CAAC;AAAA,MACF;AAEA,YAAM,QAAQ,KAAK,UAAU;AAC7B;AACA,aAAO;AAAA,IACR;AAAA,EACD;AACA,SAAO,QAAQ,OAAO;AACvB;AAEO,MAAM,2BAA2B,CAAC,SAAS,gBAAgB,CAAC,MAAM;AACxE,MAAI,QAAQ,CAAC;AACb,QAAM,QAAQ,OAAO,UAAU;AAC9B,QAAI,MAAM,WAAW,IAAI;AACxB,YAAM,mBAAmB,SAAS,OAAO,aAAa;AACtD,cAAQ,CAAC;AAAA,IACV;AACA,UAAM,KAAK;AAAA,MACV,YAAY;AAAA,QACX,MAAM;AAAA,MACP;AAAA,IACD,CAAC;AAAA,EACF;AACA,QAAM,QAAQ,MACb,MAAM,SACH,mBAAmB,SAAS,OAAO,aAAa,IAChD;AACJ,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACxD;AAEO,MAAM,8BAA8B,CAAC,SAAS,gBAAgB,CAAC,MAAM;AAC3E,MAAI,QAAQ,CAAC;AACb,QAAM,QAAQ,OAAO,UAAU;AAC9B,QAAI,MAAM,WAAW,IAAI;AACxB,YAAM,mBAAmB,SAAS,OAAO,aAAa;AACtD,cAAQ,CAAC;AAAA,IACV;AACA,UAAM,KAAK;AAAA,MACV,eAAe;AAAA,QACd,KAAK;AAAA,MACN;AAAA,IACD,CAAC;AAAA,EACF;AACA,QAAM,QAAQ,MACb,MAAM,SACH,mBAAmB,SAAS,OAAO,aAAa,IAChD;AACJ,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACxD;AAEA,MAAM,qBAAqB,OAC1B,SACA,OACA,eACA,aAAa,MACT;AACJ,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO;AAAA,IACzC,IAAI,sBAAsB;AAAA,MACzB,cAAc;AAAA,QACb,CAAC,QAAQ,SAAS,GAAG;AAAA,MACtB;AAAA,IACD,CAAC;AAAA,IACD,EAAE,aAAa,eAAe,OAAO;AAAA,EACtC;AACA,MAAI,mBAAmB,QAAQ,SAAS,GAAG,QAAQ;AAClD,QAAI,cAAc,eAAe;AAChC,YAAM,IAAI,MAAM,kDAAkD;AAAA,QACjE,OAAO;AAAA,UACN,GAAG;AAAA,UACH,uBAAuB,iBAAiB,QAAQ,SAAS,EAAE;AAAA,QAC5D;AAAA,MACD,CAAC;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK,UAAU;AAC7B,WAAO;AAAA,MACN;AAAA,MACA,iBAAiB,QAAQ,SAAS;AAAA,MAClC;AAAA,MACA,aAAa;AAAA,IACd;AAAA,EACD;AACD;AAEA,IAAO,mBAAQ;AAAA,EACd,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AACnB;",
"sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tBatchGetItemCommand,\n\tBatchWriteItemCommand,\n\tDynamoDBClient,\n\tExecuteStatementCommand,\n\tQueryCommand,\n\tScanCommand,\n} from \"@aws-sdk/client-dynamodb\";\nimport { createWritableStream, timeout } from \"@datastream/core\";\nimport { awsClientDefaults } from \"./client.js\";\n\nlet client = new DynamoDBClient(awsClientDefaults);\nexport const awsDynamoDBSetClient = (ddbClient, _translateConfig) => {\n\tclient = ddbClient;\n};\nawsDynamoDBSetClient(client);\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new QueryCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBScanStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ScanCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBExecuteStatementStream = async (\n\toptions,\n\tstreamOptions = {},\n) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ExecuteStatementCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items ?? []) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.NextToken = response.NextToken;\n\t\t\texpectMore = !!response.NextToken;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBGetItemStream = async (options, streamOptions = {}) => {\n\tif (options.Keys?.length > 100) {\n\t\tthrow new Error(\n\t\t\t`awsDynamoDBGetItemStream Keys.length (${options.Keys.length}) exceeds BatchGetItem limit of 100`,\n\t\t);\n\t}\n\tasync function* command(options) {\n\t\tlet keys = options.Keys;\n\t\tlet retryCount = options.retryCount ?? 0;\n\t\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\t\twhile (true) {\n\t\t\tconst response = await client.send(\n\t\t\t\tnew BatchGetItemCommand({\n\t\t\t\t\tRequestItems: {\n\t\t\t\t\t\t[options.TableName]: { Keys: keys },\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t{ abortSignal: streamOptions.signal },\n\t\t\t);\n\t\t\tfor (const item of response.Responses[options.TableName]) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tconst UnprocessedKeys =\n\t\t\t\tresponse?.UnprocessedKeys?.[options.TableName]?.Keys ?? [];\n\t\t\tif (!UnprocessedKeys.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (retryCount >= retryMaxCount) {\n\t\t\t\tthrow new Error(\"awsDynamoDBBatchGetItem has UnprocessedKeys\", {\n\t\t\t\t\tcause: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tUnprocessedKeysCount: UnprocessedKeys.length,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait timeout(3 ** retryCount, { signal: streamOptions.signal }); // 3^10 == 59sec\n\t\t\tretryCount++;\n\t\t\tkeys = UnprocessedKeys;\n\t\t}\n\t}\n\treturn command(options);\n};\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tPutRequest: {\n\t\t\t\tItem: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tDeleteRequest: {\n\t\t\t\tKey: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nconst dynamodbBatchWrite = async (\n\toptions,\n\tbatch,\n\tstreamOptions,\n\tretryCount = 0,\n) => {\n\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\tconst { UnprocessedItems } = await client.send(\n\t\tnew BatchWriteItemCommand({\n\t\t\tRequestItems: {\n\t\t\t\t[options.TableName]: batch,\n\t\t\t},\n\t\t}),\n\t\t{ abortSignal: streamOptions?.signal },\n\t);\n\tif (UnprocessedItems?.[options.TableName]?.length) {\n\t\tif (retryCount >= retryMaxCount) {\n\t\t\tthrow new Error(\"awsDynamoDBBatchWriteItem has UnprocessedItems\", {\n\t\t\t\tcause: {\n\t\t\t\t\t...options,\n\t\t\t\t\tUnprocessedItemsCount: UnprocessedItems[options.TableName].length,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tawait timeout(3 ** retryCount, { signal: streamOptions?.signal }); // 3^10 == 59sec\n\t\treturn dynamodbBatchWrite(\n\t\t\toptions,\n\t\t\tUnprocessedItems[options.TableName],\n\t\t\tstreamOptions,\n\t\t\tretryCount + 1,\n\t\t);\n\t}\n};\n\nexport default {\n\tsetClient: awsDynamoDBSetClient,\n\tqueryStream: awsDynamoDBQueryStream,\n\tscanStream: awsDynamoDBScanStream,\n\texecuteStatementStream: awsDynamoDBExecuteStatementStream,\n\tgetItemStream: awsDynamoDBGetItemStream,\n\tputItemStream: awsDynamoDBPutItemStream,\n\tdeleteItemStream: awsDynamoDBDeleteItemStream,\n};\n"],
"mappings": "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",
"names": ["options"]
}

@@ -98,3 +98,3 @@ import {

}
await timeout(3 ** retryCount);
await timeout(3 ** retryCount, { signal: streamOptions.signal });
retryCount++;

@@ -157,3 +157,3 @@ keys = UnprocessedKeys;

}
await timeout(3 ** retryCount);
await timeout(3 ** retryCount, { signal: streamOptions?.signal });
return dynamodbBatchWrite(

@@ -160,0 +160,0 @@ options,

{
"version": 3,
"sources": ["dynamodb.js"],
"sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tBatchGetItemCommand,\n\tBatchWriteItemCommand,\n\tDynamoDBClient,\n\tExecuteStatementCommand,\n\tQueryCommand,\n\tScanCommand,\n} from \"@aws-sdk/client-dynamodb\";\nimport { createWritableStream, timeout } from \"@datastream/core\";\nimport { awsClientDefaults } from \"./client.js\";\n\nlet client = new DynamoDBClient(awsClientDefaults);\nexport const awsDynamoDBSetClient = (ddbClient, _translateConfig) => {\n\tclient = ddbClient;\n};\nawsDynamoDBSetClient(client);\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new QueryCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBScanStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ScanCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBExecuteStatementStream = async (\n\toptions,\n\tstreamOptions = {},\n) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ExecuteStatementCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items ?? []) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.NextToken = response.NextToken;\n\t\t\texpectMore = !!response.NextToken;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBGetItemStream = async (options, streamOptions = {}) => {\n\tif (options.Keys?.length > 100) {\n\t\tthrow new Error(\n\t\t\t`awsDynamoDBGetItemStream Keys.length (${options.Keys.length}) exceeds BatchGetItem limit of 100`,\n\t\t);\n\t}\n\tasync function* command(options) {\n\t\tlet keys = options.Keys;\n\t\tlet retryCount = options.retryCount ?? 0;\n\t\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\t\twhile (true) {\n\t\t\tconst response = await client.send(\n\t\t\t\tnew BatchGetItemCommand({\n\t\t\t\t\tRequestItems: {\n\t\t\t\t\t\t[options.TableName]: { Keys: keys },\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t{ abortSignal: streamOptions.signal },\n\t\t\t);\n\t\t\tfor (const item of response.Responses[options.TableName]) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tconst UnprocessedKeys =\n\t\t\t\tresponse?.UnprocessedKeys?.[options.TableName]?.Keys ?? [];\n\t\t\tif (!UnprocessedKeys.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (retryCount >= retryMaxCount) {\n\t\t\t\tthrow new Error(\"awsDynamoDBBatchGetItem has UnprocessedKeys\", {\n\t\t\t\t\tcause: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tUnprocessedKeysCount: UnprocessedKeys.length,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait timeout(3 ** retryCount); // 3^10 == 59sec\n\t\t\tretryCount++;\n\t\t\tkeys = UnprocessedKeys;\n\t\t}\n\t}\n\treturn command(options);\n};\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tPutRequest: {\n\t\t\t\tItem: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tDeleteRequest: {\n\t\t\t\tKey: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nconst dynamodbBatchWrite = async (\n\toptions,\n\tbatch,\n\tstreamOptions,\n\tretryCount = 0,\n) => {\n\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\tconst { UnprocessedItems } = await client.send(\n\t\tnew BatchWriteItemCommand({\n\t\t\tRequestItems: {\n\t\t\t\t[options.TableName]: batch,\n\t\t\t},\n\t\t}),\n\t\t{ abortSignal: streamOptions?.signal },\n\t);\n\tif (UnprocessedItems?.[options.TableName]?.length) {\n\t\tif (retryCount >= retryMaxCount) {\n\t\t\tthrow new Error(\"awsDynamoDBBatchWriteItem has UnprocessedItems\", {\n\t\t\t\tcause: {\n\t\t\t\t\t...options,\n\t\t\t\t\tUnprocessedItemsCount: UnprocessedItems[options.TableName].length,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tawait timeout(3 ** retryCount); // 3^10 == 59sec\n\t\treturn dynamodbBatchWrite(\n\t\t\toptions,\n\t\t\tUnprocessedItems[options.TableName],\n\t\t\tstreamOptions,\n\t\t\tretryCount + 1,\n\t\t);\n\t}\n};\n\nexport default {\n\tsetClient: awsDynamoDBSetClient,\n\tqueryStream: awsDynamoDBQueryStream,\n\tscanStream: awsDynamoDBScanStream,\n\texecuteStatementStream: awsDynamoDBExecuteStatementStream,\n\tgetItemStream: awsDynamoDBGetItemStream,\n\tputItemStream: awsDynamoDBPutItemStream,\n\tdeleteItemStream: awsDynamoDBDeleteItemStream,\n};\n"],
"mappings": "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",
"sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tBatchGetItemCommand,\n\tBatchWriteItemCommand,\n\tDynamoDBClient,\n\tExecuteStatementCommand,\n\tQueryCommand,\n\tScanCommand,\n} from \"@aws-sdk/client-dynamodb\";\nimport { createWritableStream, timeout } from \"@datastream/core\";\nimport { awsClientDefaults } from \"./client.js\";\n\nlet client = new DynamoDBClient(awsClientDefaults);\nexport const awsDynamoDBSetClient = (ddbClient, _translateConfig) => {\n\tclient = ddbClient;\n};\nawsDynamoDBSetClient(client);\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new QueryCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBScanStream = async (options, streamOptions = {}) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ScanCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.ExclusiveStartKey = response.LastEvaluatedKey;\n\t\t\texpectMore = !!response.LastEvaluatedKey;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBExecuteStatementStream = async (\n\toptions,\n\tstreamOptions = {},\n) => {\n\tasync function* command(opts) {\n\t\tlet expectMore = true;\n\t\twhile (expectMore) {\n\t\t\tconst response = await client.send(new ExecuteStatementCommand(opts), {\n\t\t\t\tabortSignal: streamOptions.signal,\n\t\t\t});\n\t\t\tfor (const item of response.Items ?? []) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\topts.NextToken = response.NextToken;\n\t\t\texpectMore = !!response.NextToken;\n\t\t}\n\t}\n\treturn command({ ...options });\n};\n\nexport const awsDynamoDBGetItemStream = async (options, streamOptions = {}) => {\n\tif (options.Keys?.length > 100) {\n\t\tthrow new Error(\n\t\t\t`awsDynamoDBGetItemStream Keys.length (${options.Keys.length}) exceeds BatchGetItem limit of 100`,\n\t\t);\n\t}\n\tasync function* command(options) {\n\t\tlet keys = options.Keys;\n\t\tlet retryCount = options.retryCount ?? 0;\n\t\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\t\twhile (true) {\n\t\t\tconst response = await client.send(\n\t\t\t\tnew BatchGetItemCommand({\n\t\t\t\t\tRequestItems: {\n\t\t\t\t\t\t[options.TableName]: { Keys: keys },\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t{ abortSignal: streamOptions.signal },\n\t\t\t);\n\t\t\tfor (const item of response.Responses[options.TableName]) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t\tconst UnprocessedKeys =\n\t\t\t\tresponse?.UnprocessedKeys?.[options.TableName]?.Keys ?? [];\n\t\t\tif (!UnprocessedKeys.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (retryCount >= retryMaxCount) {\n\t\t\t\tthrow new Error(\"awsDynamoDBBatchGetItem has UnprocessedKeys\", {\n\t\t\t\t\tcause: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tUnprocessedKeysCount: UnprocessedKeys.length,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait timeout(3 ** retryCount, { signal: streamOptions.signal }); // 3^10 == 59sec\n\t\t\tretryCount++;\n\t\t\tkeys = UnprocessedKeys;\n\t\t}\n\t}\n\treturn command(options);\n};\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tPutRequest: {\n\t\t\t\tItem: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions = {}) => {\n\tlet batch = [];\n\tconst write = async (chunk) => {\n\t\tif (batch.length === 25) {\n\t\t\tawait dynamodbBatchWrite(options, batch, streamOptions);\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push({\n\t\t\tDeleteRequest: {\n\t\t\t\tKey: chunk,\n\t\t\t},\n\t\t});\n\t};\n\tconst final = () =>\n\t\tbatch.length\n\t\t\t? dynamodbBatchWrite(options, batch, streamOptions)\n\t\t\t: undefined;\n\treturn createWritableStream(write, final, streamOptions);\n};\n\nconst dynamodbBatchWrite = async (\n\toptions,\n\tbatch,\n\tstreamOptions,\n\tretryCount = 0,\n) => {\n\tconst retryMaxCount = options.retryMaxCount ?? 10;\n\tconst { UnprocessedItems } = await client.send(\n\t\tnew BatchWriteItemCommand({\n\t\t\tRequestItems: {\n\t\t\t\t[options.TableName]: batch,\n\t\t\t},\n\t\t}),\n\t\t{ abortSignal: streamOptions?.signal },\n\t);\n\tif (UnprocessedItems?.[options.TableName]?.length) {\n\t\tif (retryCount >= retryMaxCount) {\n\t\t\tthrow new Error(\"awsDynamoDBBatchWriteItem has UnprocessedItems\", {\n\t\t\t\tcause: {\n\t\t\t\t\t...options,\n\t\t\t\t\tUnprocessedItemsCount: UnprocessedItems[options.TableName].length,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tawait timeout(3 ** retryCount, { signal: streamOptions?.signal }); // 3^10 == 59sec\n\t\treturn dynamodbBatchWrite(\n\t\t\toptions,\n\t\t\tUnprocessedItems[options.TableName],\n\t\t\tstreamOptions,\n\t\t\tretryCount + 1,\n\t\t);\n\t}\n};\n\nexport default {\n\tsetClient: awsDynamoDBSetClient,\n\tqueryStream: awsDynamoDBQueryStream,\n\tscanStream: awsDynamoDBScanStream,\n\texecuteStatementStream: awsDynamoDBExecuteStatementStream,\n\tgetItemStream: awsDynamoDBGetItemStream,\n\tputItemStream: awsDynamoDBPutItemStream,\n\tdeleteItemStream: awsDynamoDBDeleteItemStream,\n};\n"],
"mappings": "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",
"names": ["options"]
}
{
"name": "@datastream/aws",
"version": "0.3.2",
"version": "0.4.0",
"description": "AWS service streaming integrations for CloudWatch Logs, DynamoDB, Kinesis, Lambda, S3, SNS, and SQS",

@@ -151,3 +151,3 @@ "type": "module",

"dependencies": {
"@datastream/core": "0.3.2"
"@datastream/core": "0.4.0"
},

@@ -154,0 +154,0 @@ "peerDependencies": {