@ftschopp/dynatable-core 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.
Files changed (197) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +17 -0
  3. package/dist/builders/batch-get/create-batch-get-builder.d.ts +18 -0
  4. package/dist/builders/batch-get/create-batch-get-builder.d.ts.map +1 -0
  5. package/dist/builders/batch-get/create-batch-get-builder.js +71 -0
  6. package/dist/builders/batch-get/index.d.ts +3 -0
  7. package/dist/builders/batch-get/index.d.ts.map +1 -0
  8. package/dist/builders/batch-get/index.js +18 -0
  9. package/dist/builders/batch-get/types.d.ts +25 -0
  10. package/dist/builders/batch-get/types.d.ts.map +1 -0
  11. package/dist/builders/batch-get/types.js +2 -0
  12. package/dist/builders/batch-write/create-batch-write-builder.d.ts +12 -0
  13. package/dist/builders/batch-write/create-batch-write-builder.d.ts.map +1 -0
  14. package/dist/builders/batch-write/create-batch-write-builder.js +35 -0
  15. package/dist/builders/batch-write/index.d.ts +3 -0
  16. package/dist/builders/batch-write/index.d.ts.map +1 -0
  17. package/dist/builders/batch-write/index.js +18 -0
  18. package/dist/builders/batch-write/types.d.ts +30 -0
  19. package/dist/builders/batch-write/types.d.ts.map +1 -0
  20. package/dist/builders/batch-write/types.js +2 -0
  21. package/dist/builders/delete/create-delete-builder.d.ts +9 -0
  22. package/dist/builders/delete/create-delete-builder.d.ts.map +1 -0
  23. package/dist/builders/delete/create-delete-builder.js +72 -0
  24. package/dist/builders/delete/index.d.ts +3 -0
  25. package/dist/builders/delete/index.d.ts.map +1 -0
  26. package/dist/builders/delete/index.js +18 -0
  27. package/dist/builders/delete/types.d.ts +11 -0
  28. package/dist/builders/delete/types.d.ts.map +1 -0
  29. package/dist/builders/delete/types.js +2 -0
  30. package/dist/builders/get/create-get-builder.d.ts +12 -0
  31. package/dist/builders/get/create-get-builder.d.ts.map +1 -0
  32. package/dist/builders/get/create-get-builder.js +95 -0
  33. package/dist/builders/get/index.d.ts +3 -0
  34. package/dist/builders/get/index.d.ts.map +1 -0
  35. package/dist/builders/get/index.js +18 -0
  36. package/dist/builders/get/types.d.ts +28 -0
  37. package/dist/builders/get/types.d.ts.map +1 -0
  38. package/dist/builders/get/types.js +2 -0
  39. package/dist/builders/index.d.ts +12 -0
  40. package/dist/builders/index.d.ts.map +1 -0
  41. package/dist/builders/index.js +29 -0
  42. package/dist/builders/put/create-put-builder.d.ts +9 -0
  43. package/dist/builders/put/create-put-builder.d.ts.map +1 -0
  44. package/dist/builders/put/create-put-builder.js +104 -0
  45. package/dist/builders/put/index.d.ts +3 -0
  46. package/dist/builders/put/index.d.ts.map +1 -0
  47. package/dist/builders/put/index.js +18 -0
  48. package/dist/builders/put/types.d.ts +17 -0
  49. package/dist/builders/put/types.d.ts.map +1 -0
  50. package/dist/builders/put/types.js +2 -0
  51. package/dist/builders/query/create-query-builder.d.ts +9 -0
  52. package/dist/builders/query/create-query-builder.d.ts.map +1 -0
  53. package/dist/builders/query/create-query-builder.js +283 -0
  54. package/dist/builders/query/index.d.ts +3 -0
  55. package/dist/builders/query/index.d.ts.map +1 -0
  56. package/dist/builders/query/index.js +18 -0
  57. package/dist/builders/query/types.d.ts +79 -0
  58. package/dist/builders/query/types.d.ts.map +1 -0
  59. package/dist/builders/query/types.js +2 -0
  60. package/dist/builders/scan/create-scan-builder.d.ts +12 -0
  61. package/dist/builders/scan/create-scan-builder.d.ts.map +1 -0
  62. package/dist/builders/scan/create-scan-builder.js +103 -0
  63. package/dist/builders/scan/index.d.ts +3 -0
  64. package/dist/builders/scan/index.d.ts.map +1 -0
  65. package/dist/builders/scan/index.js +18 -0
  66. package/dist/builders/scan/types.d.ts +43 -0
  67. package/dist/builders/scan/types.d.ts.map +1 -0
  68. package/dist/builders/scan/types.js +2 -0
  69. package/dist/builders/shared/conditions.d.ts +18 -0
  70. package/dist/builders/shared/conditions.d.ts.map +1 -0
  71. package/dist/builders/shared/conditions.js +48 -0
  72. package/dist/builders/shared/index.d.ts +4 -0
  73. package/dist/builders/shared/index.d.ts.map +1 -0
  74. package/dist/builders/shared/index.js +19 -0
  75. package/dist/builders/shared/operators.d.ts +12 -0
  76. package/dist/builders/shared/operators.d.ts.map +1 -0
  77. package/dist/builders/shared/operators.js +197 -0
  78. package/dist/builders/shared/types.d.ts +77 -0
  79. package/dist/builders/shared/types.d.ts.map +1 -0
  80. package/dist/builders/shared/types.js +6 -0
  81. package/dist/builders/transact-get/create-transact-get-builder.d.ts +18 -0
  82. package/dist/builders/transact-get/create-transact-get-builder.d.ts.map +1 -0
  83. package/dist/builders/transact-get/create-transact-get-builder.js +60 -0
  84. package/dist/builders/transact-get/index.d.ts +3 -0
  85. package/dist/builders/transact-get/index.d.ts.map +1 -0
  86. package/dist/builders/transact-get/index.js +18 -0
  87. package/dist/builders/transact-get/types.d.ts +28 -0
  88. package/dist/builders/transact-get/types.d.ts.map +1 -0
  89. package/dist/builders/transact-get/types.js +2 -0
  90. package/dist/builders/transact-write/create-transact-write-builder.d.ts +18 -0
  91. package/dist/builders/transact-write/create-transact-write-builder.d.ts.map +1 -0
  92. package/dist/builders/transact-write/create-transact-write-builder.js +97 -0
  93. package/dist/builders/transact-write/index.d.ts +3 -0
  94. package/dist/builders/transact-write/index.d.ts.map +1 -0
  95. package/dist/builders/transact-write/index.js +18 -0
  96. package/dist/builders/transact-write/types.d.ts +34 -0
  97. package/dist/builders/transact-write/types.d.ts.map +1 -0
  98. package/dist/builders/transact-write/types.js +2 -0
  99. package/dist/builders/update/create-update-builder.d.ts +14 -0
  100. package/dist/builders/update/create-update-builder.d.ts.map +1 -0
  101. package/dist/builders/update/create-update-builder.js +180 -0
  102. package/dist/builders/update/index.d.ts +3 -0
  103. package/dist/builders/update/index.d.ts.map +1 -0
  104. package/dist/builders/update/index.js +18 -0
  105. package/dist/builders/update/types.d.ts +35 -0
  106. package/dist/builders/update/types.d.ts.map +1 -0
  107. package/dist/builders/update/types.js +2 -0
  108. package/dist/core/types.d.ts +224 -0
  109. package/dist/core/types.d.ts.map +1 -0
  110. package/dist/core/types.js +3 -0
  111. package/dist/entity.d.ts +73 -0
  112. package/dist/entity.d.ts.map +1 -0
  113. package/dist/entity.js +161 -0
  114. package/dist/index.d.ts +4 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +20 -0
  117. package/dist/table.d.ts +70 -0
  118. package/dist/table.d.ts.map +1 -0
  119. package/dist/table.js +69 -0
  120. package/dist/utils/dynamodb-logger.d.ts +118 -0
  121. package/dist/utils/dynamodb-logger.d.ts.map +1 -0
  122. package/dist/utils/dynamodb-logger.js +125 -0
  123. package/dist/utils/model-utils.d.ts +24 -0
  124. package/dist/utils/model-utils.d.ts.map +1 -0
  125. package/dist/utils/model-utils.js +88 -0
  126. package/dist/utils/zod-utils.d.ts +13 -0
  127. package/dist/utils/zod-utils.d.ts.map +1 -0
  128. package/dist/utils/zod-utils.js +35 -0
  129. package/eslint.config.mjs +4 -0
  130. package/jest.config.js +11 -0
  131. package/package.json +36 -0
  132. package/src/builders/README.md +272 -0
  133. package/src/builders/batch-get/README.md +98 -0
  134. package/src/builders/batch-get/create-batch-get-builder.test.ts +165 -0
  135. package/src/builders/batch-get/create-batch-get-builder.ts +106 -0
  136. package/src/builders/batch-get/index.ts +2 -0
  137. package/src/builders/batch-get/types.ts +29 -0
  138. package/src/builders/batch-write/README.md +204 -0
  139. package/src/builders/batch-write/create-batch-write-builder.test.ts +173 -0
  140. package/src/builders/batch-write/create-batch-write-builder.ts +49 -0
  141. package/src/builders/batch-write/index.ts +2 -0
  142. package/src/builders/batch-write/types.ts +33 -0
  143. package/src/builders/delete/create-delete-builder.test.ts +294 -0
  144. package/src/builders/delete/create-delete-builder.ts +100 -0
  145. package/src/builders/delete/index.ts +2 -0
  146. package/src/builders/delete/types.ts +11 -0
  147. package/src/builders/get/create-get-builder.test.ts +272 -0
  148. package/src/builders/get/create-get-builder.ts +140 -0
  149. package/src/builders/get/index.ts +2 -0
  150. package/src/builders/get/types.ts +30 -0
  151. package/src/builders/index.ts +14 -0
  152. package/src/builders/put/create-put-builder.test.ts +213 -0
  153. package/src/builders/put/create-put-builder.ts +151 -0
  154. package/src/builders/put/index.ts +2 -0
  155. package/src/builders/put/types.ts +18 -0
  156. package/src/builders/query/create-query-builder.test.ts +230 -0
  157. package/src/builders/query/create-query-builder.ts +353 -0
  158. package/src/builders/query/index.ts +2 -0
  159. package/src/builders/query/types.ts +95 -0
  160. package/src/builders/scan/create-scan-builder.test.ts +260 -0
  161. package/src/builders/scan/create-scan-builder.ts +217 -0
  162. package/src/builders/scan/index.ts +2 -0
  163. package/src/builders/scan/types.ts +49 -0
  164. package/src/builders/shared/conditions.ts +58 -0
  165. package/src/builders/shared/index.ts +3 -0
  166. package/src/builders/shared/operators.test.ts +270 -0
  167. package/src/builders/shared/operators.ts +200 -0
  168. package/src/builders/shared/types.ts +100 -0
  169. package/src/builders/transact-get/README.md +167 -0
  170. package/src/builders/transact-get/create-transact-get-builder.test.ts +239 -0
  171. package/src/builders/transact-get/create-transact-get-builder.ts +67 -0
  172. package/src/builders/transact-get/index.ts +2 -0
  173. package/src/builders/transact-get/types.ts +31 -0
  174. package/src/builders/transact-write/README.md +166 -0
  175. package/src/builders/transact-write/create-transact-write-builder.test.ts +288 -0
  176. package/src/builders/transact-write/create-transact-write-builder.ts +118 -0
  177. package/src/builders/transact-write/index.ts +2 -0
  178. package/src/builders/transact-write/types.ts +33 -0
  179. package/src/builders/update/create-update-builder.test.ts +333 -0
  180. package/src/builders/update/create-update-builder.ts +284 -0
  181. package/src/builders/update/index.ts +2 -0
  182. package/src/builders/update/types.ts +42 -0
  183. package/src/core/types.test.ts +506 -0
  184. package/src/core/types.ts +290 -0
  185. package/src/entity.ts +337 -0
  186. package/src/index.ts +22 -0
  187. package/src/table.ts +109 -0
  188. package/src/utils/dynamodb-logger.test.ts +246 -0
  189. package/src/utils/dynamodb-logger.ts +175 -0
  190. package/src/utils/model-utils.test.ts +232 -0
  191. package/src/utils/model-utils.ts +101 -0
  192. package/src/utils/zod-utils.test.ts +272 -0
  193. package/src/utils/zod-utils.ts +36 -0
  194. package/tests/integration/instagram-clone.integration.test.ts +966 -0
  195. package/tests/integration/pagination-timestamps.integration.test.ts +375 -0
  196. package/tests/integration/transactions.integration.test.ts +529 -0
  197. package/tsconfig.json +12 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,62 @@
1
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
2
+
3
+
4
+ ### Features
5
+
6
+ * major initial release ([e282548](https://github.com/ftschopp/dynatable/commit/e28254895a40fdc26bab1dde2c634f663857ec16))
7
+
8
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
9
+
10
+
11
+ ### Features
12
+
13
+ * major initial release ([e282548](https://github.com/ftschopp/dynatable/commit/e28254895a40fdc26bab1dde2c634f663857ec16))
14
+
15
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
16
+
17
+
18
+ ### Features
19
+
20
+ * major initial release ([fc6e561](https://github.com/ftschopp/dynatable/commit/fc6e561a4b06507a7acd9ae6fb594936a65d7c4f))
21
+
22
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
23
+
24
+
25
+ ### Features
26
+
27
+ * major initial release ([fc6e561](https://github.com/ftschopp/dynatable/commit/fc6e561a4b06507a7acd9ae6fb594936a65d7c4f))
28
+
29
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
30
+
31
+
32
+ ### Features
33
+
34
+ * major initial release ([fc6e561](https://github.com/ftschopp/dynatable/commit/fc6e561a4b06507a7acd9ae6fb594936a65d7c4f))
35
+
36
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
37
+
38
+
39
+ ### Features
40
+
41
+ * major initial release ([fc6e561](https://github.com/ftschopp/dynatable/commit/fc6e561a4b06507a7acd9ae6fb594936a65d7c4f))
42
+
43
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
44
+
45
+
46
+ ### Features
47
+
48
+ * major initial release ([fc6e561](https://github.com/ftschopp/dynatable/commit/fc6e561a4b06507a7acd9ae6fb594936a65d7c4f))
49
+
50
+ # @ftschopp/dynatable-core 1.0.0 (2026-01-10)
51
+
52
+
53
+ ### Features
54
+
55
+ * major initial release ([fc6e561](https://github.com/ftschopp/dynatable/commit/fc6e561a4b06507a7acd9ae6fb594936a65d7c4f))
56
+
57
+ # Changelog
58
+
59
+ All notable changes to this project will be documented in this file.
60
+
61
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
62
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # @ftschopp/dynatable-core
2
+
3
+ A type-safe, functional programming library for AWS DynamoDB with Single Table Design support.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @ftschopp/dynatable-core
9
+ ```
10
+
11
+ ## Documentation
12
+
13
+ See the [main repository](https://github.com/ftschopp/dynatable) for full documentation and examples.
14
+
15
+ ## License
16
+
17
+ MIT
@@ -0,0 +1,18 @@
1
+ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
2
+ import { BatchGetBuilder } from './types';
3
+ import { DynamoDBLogger } from '../../utils/dynamodb-logger';
4
+ /**
5
+ * Creates a BatchGetBuilder to retrieve multiple items by their keys.
6
+ *
7
+ * @param requestItems - An object where keys are table names and values are objects containing Keys array
8
+ * @param client - DynamoDB client instance
9
+ * @param options - Optional configuration (projection, consistentRead)
10
+ * @param logger - Optional logger instance
11
+ */
12
+ export declare function createBatchGetBuilder<Model>(requestItems: Record<string, {
13
+ Keys: any[];
14
+ }>, client: DynamoDBClient, options?: {
15
+ projection?: (keyof Model)[];
16
+ consistentRead?: boolean;
17
+ }, logger?: DynamoDBLogger): BatchGetBuilder<Model>;
18
+ //# sourceMappingURL=create-batch-get-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-batch-get-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get/create-batch-get-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM1D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EACzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,EAC7C,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,EACD,MAAM,CAAC,EAAE,cAAc,GACtB,eAAe,CAAC,KAAK,CAAC,CA+ExB"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBatchGetBuilder = createBatchGetBuilder;
4
+ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
+ /**
6
+ * Creates a BatchGetBuilder to retrieve multiple items by their keys.
7
+ *
8
+ * @param requestItems - An object where keys are table names and values are objects containing Keys array
9
+ * @param client - DynamoDB client instance
10
+ * @param options - Optional configuration (projection, consistentRead)
11
+ * @param logger - Optional logger instance
12
+ */
13
+ function createBatchGetBuilder(requestItems, client, options, logger) {
14
+ const projection = options?.projection ?? [];
15
+ const isConsistent = options?.consistentRead ?? false;
16
+ return {
17
+ /**
18
+ * Select only specific attributes to retrieve.
19
+ */
20
+ select(attrs) {
21
+ return createBatchGetBuilder(requestItems, client, {
22
+ projection: attrs,
23
+ consistentRead: isConsistent,
24
+ }, logger);
25
+ },
26
+ /**
27
+ * Enable strongly consistent read.
28
+ */
29
+ consistentRead() {
30
+ return createBatchGetBuilder(requestItems, client, {
31
+ projection,
32
+ consistentRead: true,
33
+ }, logger);
34
+ },
35
+ /**
36
+ * Build the underlying DynamoDB input parameters.
37
+ */
38
+ dbParams() {
39
+ // Apply projection and consistentRead to all tables
40
+ const enhancedRequestItems = Object.entries(requestItems).reduce((acc, [tableName, tableRequest]) => {
41
+ acc[tableName] = {
42
+ Keys: tableRequest.Keys,
43
+ ...(projection.length > 0 && {
44
+ ProjectionExpression: projection.join(', '),
45
+ }),
46
+ ...(isConsistent && { ConsistentRead: true }),
47
+ };
48
+ return acc;
49
+ }, {});
50
+ return {
51
+ RequestItems: enhancedRequestItems,
52
+ };
53
+ },
54
+ /**
55
+ * Execute the BatchGetItem command and return the items.
56
+ */
57
+ async execute() {
58
+ const params = this.dbParams();
59
+ const result = await client.send(new lib_dynamodb_1.BatchGetCommand(params));
60
+ logger?.log('BatchGetCommand', params, result);
61
+ // Transform the response into a more usable format
62
+ const responses = {};
63
+ if (result.Responses) {
64
+ for (const [tableName, items] of Object.entries(result.Responses)) {
65
+ responses[tableName] = items;
66
+ }
67
+ }
68
+ return responses;
69
+ },
70
+ };
71
+ }
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './create-batch-get-builder';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./create-batch-get-builder"), exports);
@@ -0,0 +1,25 @@
1
+ import { BatchGetItemCommandInput } from '@aws-sdk/client-dynamodb';
2
+ /**
3
+ * BatchGetBuilder allows you to retrieve multiple items from one or more tables
4
+ * in a single request.
5
+ */
6
+ export type BatchGetBuilder<Model> = {
7
+ /**
8
+ * Select only specific attributes to retrieve for all items.
9
+ */
10
+ select(attrs: (keyof Model)[]): BatchGetBuilder<Model>;
11
+ /**
12
+ * Enable strongly consistent read for all items.
13
+ */
14
+ consistentRead(): BatchGetBuilder<Model>;
15
+ /**
16
+ * Build the underlying DynamoDB BatchGetItem input parameters.
17
+ */
18
+ dbParams(): BatchGetItemCommandInput;
19
+ /**
20
+ * Execute the BatchGetItem command and return the items.
21
+ * Returns an object mapping table names to arrays of items.
22
+ */
23
+ execute(): Promise<Record<string, Model[]>>;
24
+ };
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI;IACnC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvD;;OAEG;IACH,cAAc,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IAEzC;;OAEG;IACH,QAAQ,IAAI,wBAAwB,CAAC;IAErC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;CAC7C,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
2
+ import { BatchWriteBuilder, WriteRequest } from './types';
3
+ import { DynamoDBLogger } from '../../utils/dynamodb-logger';
4
+ /**
5
+ * Creates a BatchWriteBuilder to put or delete multiple items.
6
+ *
7
+ * @param requestItems - An object where keys are table names and values are arrays of WriteRequest
8
+ * @param client - DynamoDB client instance
9
+ * @param logger - Optional logger instance
10
+ */
11
+ export declare function createBatchWriteBuilder(requestItems: Record<string, WriteRequest[]>, client: DynamoDBClient, logger?: DynamoDBLogger): BatchWriteBuilder;
12
+ //# sourceMappingURL=create-batch-write-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-batch-write-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-write/create-batch-write-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM1D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAC5C,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,cAAc,GACtB,iBAAiB,CA2BnB"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBatchWriteBuilder = createBatchWriteBuilder;
4
+ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
+ /**
6
+ * Creates a BatchWriteBuilder to put or delete multiple items.
7
+ *
8
+ * @param requestItems - An object where keys are table names and values are arrays of WriteRequest
9
+ * @param client - DynamoDB client instance
10
+ * @param logger - Optional logger instance
11
+ */
12
+ function createBatchWriteBuilder(requestItems, client, logger) {
13
+ return {
14
+ /**
15
+ * Build the underlying DynamoDB input parameters.
16
+ */
17
+ dbParams() {
18
+ return {
19
+ RequestItems: requestItems,
20
+ };
21
+ },
22
+ /**
23
+ * Execute the BatchWriteItem command.
24
+ */
25
+ async execute() {
26
+ const params = this.dbParams();
27
+ const result = await client.send(new lib_dynamodb_1.BatchWriteCommand(params));
28
+ logger?.log('BatchWriteCommand', params, result);
29
+ // Return unprocessed items if any
30
+ return {
31
+ unprocessedItems: result.UnprocessedItems,
32
+ };
33
+ },
34
+ };
35
+ }
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './create-batch-write-builder';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-write/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./create-batch-write-builder"), exports);
@@ -0,0 +1,30 @@
1
+ import { BatchWriteItemCommandInput } from '@aws-sdk/client-dynamodb';
2
+ /**
3
+ * A single write request that can be either a PutRequest or DeleteRequest
4
+ */
5
+ export type WriteRequest = {
6
+ PutRequest?: {
7
+ Item: any;
8
+ };
9
+ DeleteRequest?: {
10
+ Key: any;
11
+ };
12
+ };
13
+ /**
14
+ * BatchWriteBuilder allows you to put or delete multiple items from one or more tables
15
+ * in a single request.
16
+ */
17
+ export type BatchWriteBuilder = {
18
+ /**
19
+ * Build the underlying DynamoDB BatchWriteItem input parameters.
20
+ */
21
+ dbParams(): BatchWriteItemCommandInput;
22
+ /**
23
+ * Execute the BatchWriteItem command.
24
+ * Returns unprocessed items if any requests failed.
25
+ */
26
+ execute(): Promise<{
27
+ unprocessedItems?: Record<string, WriteRequest[]>;
28
+ }>;
29
+ };
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-write/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,GAAG,CAAC;KACX,CAAC;IACF,aAAa,CAAC,EAAE;QACd,GAAG,EAAE,GAAG,CAAC;KACV,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,QAAQ,IAAI,0BAA0B,CAAC;IAEvC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;KACnD,CAAC,CAAC;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
2
+ import { Condition } from '../shared';
3
+ import { DeleteBuilder } from './types';
4
+ import { DynamoDBLogger } from '../../utils/dynamodb-logger';
5
+ /**
6
+ * Creates a DeleteBuilder for an item key and table.
7
+ */
8
+ export declare function createDeleteBuilder<Model>(tableName: string, key: Partial<Model>, client: DynamoDBClient, prevConditions?: Condition[], returnMode?: 'NONE' | 'ALL_OLD', logger?: DynamoDBLogger): DeleteBuilder<Model>;
9
+ //# sourceMappingURL=create-delete-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-delete-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/delete/create-delete-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgC,SAAS,EAAmB,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EACnB,MAAM,EAAE,cAAc,EACtB,cAAc,GAAE,SAAS,EAAO,EAChC,UAAU,GAAE,MAAM,GAAG,SAAkB,EACvC,MAAM,CAAC,EAAE,cAAc,GACtB,aAAa,CAAC,KAAK,CAAC,CAkFtB"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDeleteBuilder = createDeleteBuilder;
4
+ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
+ const shared_1 = require("../shared");
6
+ /**
7
+ * Creates a DeleteBuilder for an item key and table.
8
+ */
9
+ function createDeleteBuilder(tableName, key, client, prevConditions = [], returnMode = 'NONE', logger) {
10
+ const conditions = [...prevConditions];
11
+ const build = () => ({
12
+ where(fn) {
13
+ const attrs = new Proxy({}, {
14
+ get(_, prop) {
15
+ return { name: prop };
16
+ },
17
+ });
18
+ const opBuilder = (0, shared_1.createOpBuilder)();
19
+ const condition = fn(attrs, opBuilder);
20
+ return createDeleteBuilder(tableName, key, client, [...conditions, condition], returnMode, logger);
21
+ },
22
+ returning(mode) {
23
+ return createDeleteBuilder(tableName, key, client, conditions, mode, logger);
24
+ },
25
+ dbParams() {
26
+ // Build ConditionExpression from condition tree
27
+ let conditionExpression = '';
28
+ let expressionAttributeNames = {};
29
+ let expressionAttributeValues = {};
30
+ if (conditions.length > 0) {
31
+ const combinedCondition = conditions.length === 1 && conditions[0]
32
+ ? conditions[0]
33
+ : {
34
+ expression: '',
35
+ operator: 'AND',
36
+ children: conditions,
37
+ };
38
+ const result = (0, shared_1.buildExpression)(combinedCondition);
39
+ conditionExpression = result.expression;
40
+ expressionAttributeNames = result.names;
41
+ expressionAttributeValues = result.values;
42
+ }
43
+ const extra = returnMode !== 'NONE' ? { ReturnValues: returnMode } : {};
44
+ return {
45
+ TableName: tableName,
46
+ Key: key,
47
+ ...(conditionExpression && {
48
+ ConditionExpression: conditionExpression,
49
+ }),
50
+ ...(Object.keys(expressionAttributeNames).length && {
51
+ ExpressionAttributeNames: expressionAttributeNames,
52
+ }),
53
+ ...(Object.keys(expressionAttributeValues).length && {
54
+ ExpressionAttributeValues: expressionAttributeValues,
55
+ }),
56
+ ...extra,
57
+ };
58
+ },
59
+ async execute() {
60
+ const params = build().dbParams();
61
+ const response = await client.send(new lib_dynamodb_1.DeleteCommand(params));
62
+ logger?.log('DeleteCommand', params, response);
63
+ // Return the deleted item if returnMode is ALL_OLD
64
+ if (returnMode === 'ALL_OLD' && response.Attributes) {
65
+ return response.Attributes;
66
+ }
67
+ // For NONE mode, return the key as a fallback
68
+ return key;
69
+ },
70
+ });
71
+ return build();
72
+ }
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './create-delete-builder';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builders/delete/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./create-delete-builder"), exports);
@@ -0,0 +1,11 @@
1
+ import { OperationBuilder } from '../shared';
2
+ /**
3
+ * Builder interface for DynamoDB DeleteItem operations
4
+ */
5
+ export interface DeleteBuilder<Model> extends OperationBuilder<Model> {
6
+ /**
7
+ * Configures what values should be returned after the delete operation
8
+ */
9
+ returning(mode: 'NONE' | 'ALL_OLD'): DeleteBuilder<Model>;
10
+ }
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/delete/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IACnE;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;CAC3D"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
2
+ import { GetBuilder } from './types';
3
+ import { DynamoDBLogger } from '../../utils/dynamodb-logger';
4
+ /**
5
+ * Creates a GetBuilder to retrieve an item by its key.
6
+ */
7
+ export declare function createGetBuilder<KeyInput, Model>(tableName: string, key: Record<string, any>, client: DynamoDBClient, options?: {
8
+ projection?: (keyof Model)[];
9
+ consistentRead?: boolean;
10
+ returnConsumedCapacity?: 'INDEXES' | 'TOTAL' | 'NONE';
11
+ }, logger?: DynamoDBLogger): GetBuilder<KeyInput, Model>;
12
+ //# sourceMappingURL=create-get-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-get-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/get/create-get-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AA0B7D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAC9C,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;CACvD,EACD,MAAM,CAAC,EAAE,cAAc,GACtB,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAgG7B"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGetBuilder = createGetBuilder;
4
+ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
+ /**
6
+ * Builds a ProjectionExpression with proper ExpressionAttributeNames
7
+ * to handle reserved words and special characters.
8
+ */
9
+ function buildProjectionExpression(attrs) {
10
+ const names = {};
11
+ const projectionParts = [];
12
+ attrs.forEach((attr) => {
13
+ // Use a placeholder for the attribute name to avoid reserved word conflicts
14
+ const placeholder = `#${attr}`;
15
+ names[placeholder] = attr;
16
+ projectionParts.push(placeholder);
17
+ });
18
+ return {
19
+ ProjectionExpression: projectionParts.join(', '),
20
+ ExpressionAttributeNames: names,
21
+ };
22
+ }
23
+ /**
24
+ * Creates a GetBuilder to retrieve an item by its key.
25
+ */
26
+ function createGetBuilder(tableName, key, client, options, logger) {
27
+ const projection = options?.projection ?? [];
28
+ const isConsistent = options?.consistentRead ?? false;
29
+ const consumedCapacity = options?.returnConsumedCapacity;
30
+ return {
31
+ /**
32
+ * Select only specific attributes to retrieve.
33
+ */
34
+ select(attrs) {
35
+ return createGetBuilder(tableName, key, client, {
36
+ projection: attrs,
37
+ consistentRead: isConsistent,
38
+ returnConsumedCapacity: consumedCapacity,
39
+ }, logger);
40
+ },
41
+ /**
42
+ * Enable strongly consistent read.
43
+ */
44
+ consistentRead() {
45
+ return createGetBuilder(tableName, key, client, {
46
+ projection,
47
+ consistentRead: true,
48
+ returnConsumedCapacity: consumedCapacity,
49
+ }, logger);
50
+ },
51
+ /**
52
+ * Configure ReturnConsumedCapacity parameter.
53
+ */
54
+ returnConsumedCapacity(mode) {
55
+ return createGetBuilder(tableName, key, client, {
56
+ projection,
57
+ consistentRead: isConsistent,
58
+ returnConsumedCapacity: mode,
59
+ }, logger);
60
+ },
61
+ /**
62
+ * Build the underlying DynamoDB input parameters.
63
+ */
64
+ dbParams() {
65
+ const params = {
66
+ TableName: tableName,
67
+ Key: key,
68
+ };
69
+ // Add projection with proper ExpressionAttributeNames
70
+ if (projection.length > 0) {
71
+ const projectionExpr = buildProjectionExpression(projection);
72
+ params.ProjectionExpression = projectionExpr.ProjectionExpression;
73
+ params.ExpressionAttributeNames = projectionExpr.ExpressionAttributeNames;
74
+ }
75
+ // Add consistent read if enabled
76
+ if (isConsistent) {
77
+ params.ConsistentRead = true;
78
+ }
79
+ // Add ReturnConsumedCapacity if specified
80
+ if (consumedCapacity) {
81
+ params.ReturnConsumedCapacity = consumedCapacity;
82
+ }
83
+ return params;
84
+ },
85
+ /**
86
+ * Execute the GetItem command and return the item if found.
87
+ */
88
+ async execute() {
89
+ const params = this.dbParams();
90
+ const result = await client.send(new lib_dynamodb_1.GetCommand(params));
91
+ logger?.log('GetCommand', params, result);
92
+ return result.Item;
93
+ },
94
+ };
95
+ }
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './create-get-builder';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builders/get/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./create-get-builder"), exports);