betterddb 0.8.0 → 0.8.2

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 (82) hide show
  1. package/dist/src/betterddb.d.ts +137 -0
  2. package/dist/src/betterddb.d.ts.map +1 -0
  3. package/dist/src/betterddb.js +165 -0
  4. package/dist/src/betterddb.js.map +1 -0
  5. package/dist/src/builders/batch-get-builder.d.ts +16 -0
  6. package/dist/src/builders/batch-get-builder.d.ts.map +1 -0
  7. package/dist/src/builders/batch-get-builder.js +54 -0
  8. package/dist/src/builders/batch-get-builder.js.map +1 -0
  9. package/dist/src/builders/create-builder.d.ts +12 -0
  10. package/dist/src/builders/create-builder.d.ts.map +1 -0
  11. package/dist/src/builders/create-builder.js +84 -0
  12. package/dist/src/builders/create-builder.js.map +1 -0
  13. package/dist/src/builders/delete-builder.d.ts +18 -0
  14. package/dist/src/builders/delete-builder.d.ts.map +1 -0
  15. package/dist/src/builders/delete-builder.js +75 -0
  16. package/dist/src/builders/delete-builder.js.map +1 -0
  17. package/dist/src/builders/get-builder.d.ts +18 -0
  18. package/dist/src/builders/get-builder.d.ts.map +1 -0
  19. package/dist/src/builders/get-builder.js +76 -0
  20. package/dist/src/builders/get-builder.js.map +1 -0
  21. package/dist/src/builders/index.d.ts +8 -0
  22. package/dist/src/builders/index.d.ts.map +1 -0
  23. package/{src/builders/index.ts → dist/src/builders/index.js} +1 -0
  24. package/dist/src/builders/index.js.map +1 -0
  25. package/dist/src/builders/query-builder.d.ts +29 -0
  26. package/dist/src/builders/query-builder.d.ts.map +1 -0
  27. package/dist/src/builders/query-builder.js +171 -0
  28. package/dist/src/builders/query-builder.js.map +1 -0
  29. package/dist/src/builders/scan-builder.d.ts +21 -0
  30. package/dist/src/builders/scan-builder.d.ts.map +1 -0
  31. package/dist/src/builders/scan-builder.js +76 -0
  32. package/dist/src/builders/scan-builder.js.map +1 -0
  33. package/dist/src/builders/update-builder.d.ts +37 -0
  34. package/dist/src/builders/update-builder.d.ts.map +1 -0
  35. package/dist/src/builders/update-builder.js +301 -0
  36. package/dist/src/builders/update-builder.js.map +1 -0
  37. package/dist/src/index.d.ts +5 -0
  38. package/dist/src/index.d.ts.map +1 -0
  39. package/{src/index.ts → dist/src/index.js} +1 -0
  40. package/dist/src/index.js.map +1 -0
  41. package/dist/src/operator.d.ts +3 -0
  42. package/dist/src/operator.d.ts.map +1 -0
  43. package/dist/src/operator.js +28 -0
  44. package/dist/src/operator.js.map +1 -0
  45. package/dist/src/types/index.d.ts +2 -0
  46. package/dist/src/types/index.d.ts.map +1 -0
  47. package/{src/types/index.ts → dist/src/types/index.js} +1 -0
  48. package/dist/src/types/index.js.map +1 -0
  49. package/dist/src/types/paginated-result.d.ts +6 -0
  50. package/dist/src/types/paginated-result.d.ts.map +1 -0
  51. package/dist/src/types/paginated-result.js +2 -0
  52. package/dist/src/types/paginated-result.js.map +1 -0
  53. package/dist/tsconfig.tsbuildinfo +1 -0
  54. package/package.json +9 -8
  55. package/.github/workflows/npm-publish.yml +0 -33
  56. package/.github/workflows/test.yml +0 -42
  57. package/CONTRIBUTING.md +0 -225
  58. package/LICENCSE +0 -21
  59. package/babel.config.cjs +0 -6
  60. package/docker-compose.yml +0 -16
  61. package/eslint.config.mjs +0 -29
  62. package/jest.config.cjs +0 -17
  63. package/prettier.config.js +0 -6
  64. package/src/betterddb.ts +0 -267
  65. package/src/builders/batch-get-builder.ts +0 -56
  66. package/src/builders/create-builder.ts +0 -97
  67. package/src/builders/delete-builder.ts +0 -87
  68. package/src/builders/get-builder.ts +0 -78
  69. package/src/builders/query-builder.ts +0 -242
  70. package/src/builders/scan-builder.ts +0 -98
  71. package/src/builders/update-builder.ts +0 -363
  72. package/src/operator.ts +0 -43
  73. package/src/types/paginated-result.ts +0 -6
  74. package/test/batch-get.test.ts +0 -122
  75. package/test/create.test.ts +0 -121
  76. package/test/delete.test.ts +0 -93
  77. package/test/get.test.ts +0 -98
  78. package/test/query.test.ts +0 -206
  79. package/test/scan.test.ts +0 -130
  80. package/test/update.test.ts +0 -355
  81. package/test/utils/table-setup.ts +0 -62
  82. package/tsconfig.json +0 -23
@@ -0,0 +1,137 @@
1
+ import { type z } from "zod";
2
+ import { QueryBuilder } from "./builders/query-builder.js";
3
+ import { ScanBuilder } from "./builders/scan-builder.js";
4
+ import { UpdateBuilder } from "./builders/update-builder.js";
5
+ import { CreateBuilder } from "./builders/create-builder.js";
6
+ import { GetBuilder } from "./builders/get-builder.js";
7
+ import { DeleteBuilder } from "./builders/delete-builder.js";
8
+ import { type NativeAttributeValue, type DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
9
+ import { BatchGetBuilder } from "./builders/batch-get-builder.js";
10
+ export type PrimaryKeyValue = string | number;
11
+ /**
12
+ * A key definition can be either a simple key (a property name)
13
+ * or an object containing a build function that computes the value.
14
+ * (In this design, the attribute name is provided separately.)
15
+ */
16
+ export type KeyDefinition<T> = keyof T | {
17
+ build: (rawKey: Partial<T>) => string;
18
+ };
19
+ /**
20
+ * Configuration for a primary (partition) key.
21
+ */
22
+ export interface PrimaryKeyConfig<T> {
23
+ /** The attribute name for the primary key in DynamoDB */
24
+ name: string;
25
+ /** How to compute the key value; if a keyof T, then the raw value is used;
26
+ * if an object, the build function is used.
27
+ */
28
+ definition: KeyDefinition<T>;
29
+ }
30
+ /**
31
+ * Configuration for a sort key.
32
+ */
33
+ export interface SortKeyConfig<T> {
34
+ /** The attribute name for the sort key in DynamoDB */
35
+ name: string;
36
+ /** How to compute the sort key value */
37
+ definition: KeyDefinition<T>;
38
+ }
39
+ /**
40
+ * Configuration for a Global Secondary Index (GSI).
41
+ */
42
+ export interface GSIConfig<T> {
43
+ /** The name of the GSI in DynamoDB */
44
+ name: string;
45
+ /** The primary key configuration for the GSI */
46
+ primary: PrimaryKeyConfig<T>;
47
+ /** The sort key configuration for the GSI, if any */
48
+ sort?: SortKeyConfig<T>;
49
+ }
50
+ /**
51
+ * Keys configuration for the table.
52
+ */
53
+ export interface KeysConfig<T> {
54
+ primary: PrimaryKeyConfig<T>;
55
+ sort?: SortKeyConfig<T>;
56
+ gsis?: Record<string, GSIConfig<T>>;
57
+ }
58
+ /**
59
+ * Options for initializing BetterDDB.
60
+ */
61
+ export interface BetterDDBOptions<T> {
62
+ schema: z.AnyZodObject;
63
+ tableName: string;
64
+ entityType?: string;
65
+ keys: KeysConfig<T>;
66
+ client: DynamoDBDocumentClient;
67
+ counter?: boolean;
68
+ /**
69
+ * If true, automatically inject timestamp fields:
70
+ * - On create, sets both `createdAt` and `updatedAt`
71
+ * - On update, sets `updatedAt`
72
+ *
73
+ * (T should include these fields if enabled.)
74
+ */
75
+ timestamps?: boolean;
76
+ }
77
+ /**
78
+ * BetterDDB is a definition-based DynamoDB wrapper library.
79
+ */
80
+ export declare class BetterDDB<T> {
81
+ protected schema: z.AnyZodObject;
82
+ protected tableName: string;
83
+ protected entityType?: string;
84
+ protected client: DynamoDBDocumentClient;
85
+ protected keys: KeysConfig<T>;
86
+ protected timestamps: boolean;
87
+ protected counter: boolean;
88
+ constructor(options: BetterDDBOptions<T>);
89
+ getCounter(): boolean;
90
+ getKeys(): KeysConfig<T>;
91
+ getTableName(): string;
92
+ getClient(): DynamoDBDocumentClient;
93
+ getSchema(): z.AnyZodObject;
94
+ getTimestamps(): boolean;
95
+ getEntityType(): string | undefined;
96
+ protected getKeyValue(def: KeyDefinition<T>, rawKey: Partial<T>): string;
97
+ /**
98
+ * Build the primary key from a raw key object.
99
+ */
100
+ buildKey(rawKey: Partial<T>): Record<string, NativeAttributeValue>;
101
+ /**
102
+ * Build index attributes for each defined GSI.
103
+ */
104
+ buildIndexes(rawItem: Partial<T>): Record<string, NativeAttributeValue>;
105
+ /**
106
+ * Create an item:
107
+ * - Computes primary key and index attributes,
108
+ * - Optionally injects timestamps,
109
+ * - Validates the item and writes it to DynamoDB.
110
+ */
111
+ create(item: T): CreateBuilder<T>;
112
+ /**
113
+ * Get an item by its primary key.
114
+ */
115
+ get(rawKey: Partial<T>): GetBuilder<T>;
116
+ /**
117
+ * Get multiple items by their primary keys.
118
+ */
119
+ batchGet(rawKeys: Partial<T>[]): BatchGetBuilder<T>;
120
+ /**
121
+ * Update an item.
122
+ */
123
+ update(key: Partial<T>): UpdateBuilder<T>;
124
+ /**
125
+ * Delete an item.
126
+ */
127
+ delete(rawKey: Partial<T>): DeleteBuilder<T>;
128
+ /**
129
+ * Query items.
130
+ */
131
+ query(key: Partial<T>): QueryBuilder<T>;
132
+ /**
133
+ * Scan for items.
134
+ */
135
+ scan(): ScanBuilder<T>;
136
+ }
137
+ //# sourceMappingURL=betterddb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"betterddb.d.ts","sourceRoot":"","sources":["../../src/betterddb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import {} from "zod";
2
+ import { QueryBuilder } from "./builders/query-builder.js";
3
+ import { ScanBuilder } from "./builders/scan-builder.js";
4
+ import { UpdateBuilder } from "./builders/update-builder.js";
5
+ import { CreateBuilder } from "./builders/create-builder.js";
6
+ import { GetBuilder } from "./builders/get-builder.js";
7
+ import { DeleteBuilder } from "./builders/delete-builder.js";
8
+ import {} from "@aws-sdk/lib-dynamodb";
9
+ import { BatchGetBuilder } from "./builders/batch-get-builder.js";
10
+ /**
11
+ * BetterDDB is a definition-based DynamoDB wrapper library.
12
+ */
13
+ export class BetterDDB {
14
+ schema;
15
+ tableName;
16
+ entityType;
17
+ client;
18
+ keys;
19
+ timestamps;
20
+ counter;
21
+ constructor(options) {
22
+ this.schema = options.schema;
23
+ this.tableName = options.tableName;
24
+ this.entityType = options.entityType?.toUpperCase();
25
+ this.keys = options.keys;
26
+ this.client = options.client;
27
+ this.timestamps = options.timestamps ?? false;
28
+ this.counter = options.counter ?? false;
29
+ }
30
+ getCounter() {
31
+ return this.counter;
32
+ }
33
+ getKeys() {
34
+ return this.keys;
35
+ }
36
+ getTableName() {
37
+ return this.tableName;
38
+ }
39
+ getClient() {
40
+ return this.client;
41
+ }
42
+ getSchema() {
43
+ return this.schema;
44
+ }
45
+ getTimestamps() {
46
+ return this.timestamps;
47
+ }
48
+ getEntityType() {
49
+ return this.entityType;
50
+ }
51
+ // Helper: Retrieve the key value from a KeyDefinition.
52
+ getKeyValue(def, rawKey) {
53
+ if (typeof def === "string" ||
54
+ typeof def === "number" ||
55
+ typeof def === "symbol") {
56
+ return String(rawKey[def]);
57
+ }
58
+ else {
59
+ return def.build(rawKey);
60
+ }
61
+ }
62
+ /**
63
+ * Build the primary key from a raw key object.
64
+ */
65
+ buildKey(rawKey) {
66
+ const keyObj = {};
67
+ // For primary (partition) key:
68
+ const pkConfig = this.keys.primary;
69
+ keyObj[pkConfig.name] =
70
+ typeof pkConfig.definition === "string" ||
71
+ typeof pkConfig.definition === "number" ||
72
+ typeof pkConfig.definition === "symbol"
73
+ ? String(rawKey[pkConfig.definition])
74
+ : pkConfig.definition.build(rawKey);
75
+ // For sort key, if defined:
76
+ if (this.keys.sort) {
77
+ const skConfig = this.keys.sort;
78
+ keyObj[skConfig.name] =
79
+ typeof skConfig.definition === "string" ||
80
+ typeof skConfig.definition === "number" ||
81
+ typeof skConfig.definition === "symbol"
82
+ ? String(rawKey[skConfig.definition])
83
+ : skConfig.definition.build(rawKey);
84
+ }
85
+ return keyObj;
86
+ }
87
+ /**
88
+ * Build index attributes for each defined GSI.
89
+ */
90
+ buildIndexes(rawItem) {
91
+ const indexAttributes = {};
92
+ if (this.keys.gsis) {
93
+ for (const gsiName in this.keys.gsis) {
94
+ const gsiConfig = this.keys.gsis[gsiName];
95
+ if (!gsiConfig)
96
+ continue;
97
+ // Compute primary index attribute.
98
+ const primaryConfig = gsiConfig.primary;
99
+ indexAttributes[primaryConfig.name] =
100
+ typeof primaryConfig.definition === "string" ||
101
+ typeof primaryConfig.definition === "number" ||
102
+ typeof primaryConfig.definition === "symbol"
103
+ ? String(rawItem[primaryConfig.definition])
104
+ : primaryConfig.definition.build(rawItem);
105
+ // Compute sort index attribute if provided.
106
+ if (gsiConfig?.sort) {
107
+ const sortConfig = gsiConfig.sort;
108
+ indexAttributes[sortConfig.name] =
109
+ typeof sortConfig.definition === "string" ||
110
+ typeof sortConfig.definition === "number" ||
111
+ typeof sortConfig.definition === "symbol"
112
+ ? String(rawItem[sortConfig.definition])
113
+ : sortConfig.definition.build(rawItem);
114
+ }
115
+ }
116
+ }
117
+ return indexAttributes;
118
+ }
119
+ /**
120
+ * Create an item:
121
+ * - Computes primary key and index attributes,
122
+ * - Optionally injects timestamps,
123
+ * - Validates the item and writes it to DynamoDB.
124
+ */
125
+ create(item) {
126
+ return new CreateBuilder(this, item);
127
+ }
128
+ /**
129
+ * Get an item by its primary key.
130
+ */
131
+ get(rawKey) {
132
+ return new GetBuilder(this, rawKey);
133
+ }
134
+ /**
135
+ * Get multiple items by their primary keys.
136
+ */
137
+ batchGet(rawKeys) {
138
+ return new BatchGetBuilder(this, rawKeys);
139
+ }
140
+ /**
141
+ * Update an item.
142
+ */
143
+ update(key) {
144
+ return new UpdateBuilder(this, key);
145
+ }
146
+ /**
147
+ * Delete an item.
148
+ */
149
+ delete(rawKey) {
150
+ return new DeleteBuilder(this, rawKey);
151
+ }
152
+ /**
153
+ * Query items.
154
+ */
155
+ query(key) {
156
+ return new QueryBuilder(this, key);
157
+ }
158
+ /**
159
+ * Scan for items.
160
+ */
161
+ scan() {
162
+ return new ScanBuilder(this);
163
+ }
164
+ }
165
+ //# sourceMappingURL=betterddb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"betterddb.js","sourceRoot":"","sources":["../../src/betterddb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type BetterDDB } from "../betterddb.js";
2
+ export declare class BatchGetBuilder<T> {
3
+ private parent;
4
+ private keys;
5
+ /**
6
+ * @param parent - The BetterDDB instance for the table.
7
+ * @param keys - An array of partial keys for the items you wish to retrieve.
8
+ */
9
+ constructor(parent: BetterDDB<T>, keys: Partial<T>[]);
10
+ /**
11
+ * Executes the batch get operation.
12
+ * Returns an array of parsed items of type T.
13
+ */
14
+ execute(): Promise<T[]>;
15
+ }
16
+ //# sourceMappingURL=batch-get-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-get-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,qBAAa,eAAe,CAAC,CAAC;IAM1B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI;IANd;;;OAGG;gBAEO,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE;IAG5B;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;CAqCrC"}
@@ -0,0 +1,54 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import {} from "../betterddb.js";
3
+ import { BatchGetCommand } from "@aws-sdk/lib-dynamodb";
4
+ import {} from "@aws-sdk/client-dynamodb";
5
+ export class BatchGetBuilder {
6
+ parent;
7
+ keys;
8
+ /**
9
+ * @param parent - The BetterDDB instance for the table.
10
+ * @param keys - An array of partial keys for the items you wish to retrieve.
11
+ */
12
+ constructor(parent, keys) {
13
+ this.parent = parent;
14
+ this.keys = keys;
15
+ }
16
+ /**
17
+ * Executes the batch get operation.
18
+ * Returns an array of parsed items of type T.
19
+ */
20
+ async execute() {
21
+ if (this.keys.length === 0) {
22
+ return [];
23
+ }
24
+ const seen = new Set();
25
+ const deduplicatedKeys = this.keys.filter((key) => {
26
+ const keyString = JSON.stringify(key);
27
+ if (seen.has(keyString)) {
28
+ return false;
29
+ }
30
+ seen.add(keyString);
31
+ return true;
32
+ });
33
+ const tableName = this.parent.getTableName();
34
+ // Build an array of keys using the parent's key builder.
35
+ const keysArray = deduplicatedKeys.map((key) => this.parent.buildKey(key));
36
+ // Construct the BatchGet parameters.
37
+ const params = {
38
+ RequestItems: {
39
+ [tableName]: {
40
+ Keys: keysArray,
41
+ },
42
+ },
43
+ };
44
+ const result = await this.parent
45
+ .getClient()
46
+ .send(new BatchGetCommand(params));
47
+ const responses = result.Responses ? result.Responses[tableName] : [];
48
+ if (!responses) {
49
+ return [];
50
+ }
51
+ return this.parent.getSchema().array().parse(responses);
52
+ }
53
+ }
54
+ //# sourceMappingURL=batch-get-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-get-builder.js","sourceRoot":"","sources":["../../../src/builders/batch-get-builder.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAkB,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAA0B,MAAM,0BAA0B,CAAC;AAElE,MAAM,OAAO,eAAe;IAMhB;IACA;IANV;;;OAGG;IACH,YACU,MAAoB,EACpB,IAAkB;QADlB,WAAM,GAAN,MAAM,CAAc;QACpB,SAAI,GAAJ,IAAI,CAAc;IACzB,CAAC;IAEJ;;;OAGG;IACI,KAAK,CAAC,OAAO;QAClB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC7C,yDAAyD;QACzD,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3E,qCAAqC;QACrC,MAAM,MAAM,GAAsB;YAChC,YAAY,EAAE;gBACZ,CAAC,SAAS,CAAC,EAAE;oBACX,IAAI,EAAE,SAAS;iBAChB;aACF;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM;aAC7B,SAAS,EAAE;aACX,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,SAAS,CAAQ,CAAC;IACjE,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import { type TransactWriteItem } from "@aws-sdk/client-dynamodb";
2
+ import { type BetterDDB } from "../betterddb.js";
3
+ export declare class CreateBuilder<T> {
4
+ private parent;
5
+ private item;
6
+ private extraTransactItems;
7
+ constructor(parent: BetterDDB<T>, item: T);
8
+ execute(): Promise<T>;
9
+ transactWrite(ops: TransactWriteItem[] | TransactWriteItem): this;
10
+ toTransactPut(): TransactWriteItem;
11
+ }
12
+ //# sourceMappingURL=create-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/create-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,qBAAa,aAAa,CAAC,CAAC;IAIxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,kBAAkB,CAA2B;gBAG3C,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,CAAC;IAGJ,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;IA+C3B,aAAa,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,GAAG,IAAI;IASjE,aAAa,IAAI,iBAAiB;CAwB1C"}
@@ -0,0 +1,84 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import {} from "@aws-sdk/client-dynamodb";
3
+ import {} from "../betterddb.js";
4
+ import { PutCommand, TransactWriteCommand } from "@aws-sdk/lib-dynamodb";
5
+ export class CreateBuilder {
6
+ parent;
7
+ item;
8
+ extraTransactItems = [];
9
+ constructor(parent, item) {
10
+ this.parent = parent;
11
+ this.item = item;
12
+ }
13
+ async execute() {
14
+ const validated = this.parent.getSchema().parse(this.item);
15
+ if (this.extraTransactItems.length > 0) {
16
+ // Build our update transaction item.
17
+ const myTransactItem = this.toTransactPut();
18
+ // Combine with extra transaction items.
19
+ const allItems = [...this.extraTransactItems, myTransactItem];
20
+ await this.parent.getClient().send(new TransactWriteCommand({
21
+ TransactItems: allItems,
22
+ }));
23
+ // After transaction, retrieve the updated item.
24
+ const result = await this.parent.get(this.item).execute();
25
+ if (result === null) {
26
+ throw new Error("Item not found after transaction create");
27
+ }
28
+ return result;
29
+ }
30
+ else {
31
+ let finalItem = {
32
+ ...this.item,
33
+ entityType: this.parent.getEntityType(),
34
+ };
35
+ if (this.parent.getTimestamps()) {
36
+ const now = new Date().toISOString();
37
+ finalItem = { ...finalItem, createdAt: now, updatedAt: now };
38
+ }
39
+ // Compute and merge primary key.
40
+ const computedKeys = this.parent.buildKey(validated);
41
+ finalItem = { ...finalItem, ...computedKeys };
42
+ // Compute and merge index attributes.
43
+ const indexAttributes = this.parent.buildIndexes(validated);
44
+ finalItem = { ...finalItem, ...indexAttributes };
45
+ await this.parent.getClient().send(new PutCommand({
46
+ TableName: this.parent.getTableName(),
47
+ Item: finalItem,
48
+ }));
49
+ return validated;
50
+ }
51
+ }
52
+ transactWrite(ops) {
53
+ if (Array.isArray(ops)) {
54
+ this.extraTransactItems.push(...ops);
55
+ }
56
+ else {
57
+ this.extraTransactItems.push(ops);
58
+ }
59
+ return this;
60
+ }
61
+ toTransactPut() {
62
+ const validated = this.parent.getSchema().parse(this.item);
63
+ let finalItem = {
64
+ ...this.item,
65
+ entityType: this.parent.getEntityType(),
66
+ };
67
+ if (this.parent.getTimestamps()) {
68
+ const now = new Date().toISOString();
69
+ finalItem = { ...finalItem, createdAt: now, updatedAt: now };
70
+ }
71
+ // Compute and merge primary key.
72
+ const computedKeys = this.parent.buildKey(validated);
73
+ finalItem = { ...finalItem, ...computedKeys };
74
+ // Compute and merge index attributes.
75
+ const indexAttributes = this.parent.buildIndexes(validated);
76
+ finalItem = { ...finalItem, ...indexAttributes };
77
+ const putItem = {
78
+ TableName: this.parent.getTableName(),
79
+ Item: finalItem,
80
+ };
81
+ return { Put: putItem };
82
+ }
83
+ }
84
+ //# sourceMappingURL=create-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-builder.js","sourceRoot":"","sources":["../../../src/builders/create-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type BetterDDB } from "../betterddb.js";
2
+ import { type TransactWriteItem } from "@aws-sdk/client-dynamodb";
3
+ import { type NativeAttributeValue } from "@aws-sdk/lib-dynamodb";
4
+ export declare class DeleteBuilder<T> {
5
+ private parent;
6
+ private key;
7
+ private condition?;
8
+ private extraTransactItems;
9
+ constructor(parent: BetterDDB<T>, key: Partial<T>);
10
+ /**
11
+ * Specify a condition expression for the delete operation.
12
+ */
13
+ withCondition(expression: string, attributeValues: Record<string, NativeAttributeValue>): this;
14
+ execute(): Promise<void>;
15
+ transactWrite(ops: TransactWriteItem[] | TransactWriteItem): this;
16
+ toTransactDelete(): TransactWriteItem;
17
+ }
18
+ //# sourceMappingURL=delete-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/delete-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,uBAAuB,CAAC;AAC/B,qBAAa,aAAa,CAAC,CAAC;IAOxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IAPb,OAAO,CAAC,SAAS,CAAC,CAGhB;IACF,OAAO,CAAC,kBAAkB,CAA2B;gBAE3C,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAGzB;;OAEG;IACI,aAAa,CAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GACpD,IAAI;IAUM,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B9B,aAAa,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,GAAG,IAAI;IASjE,gBAAgB,IAAI,iBAAiB;CAW7C"}
@@ -0,0 +1,75 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import {} from "../betterddb.js";
3
+ import {} from "@aws-sdk/client-dynamodb";
4
+ import { TransactWriteCommand, DeleteCommand, } from "@aws-sdk/lib-dynamodb";
5
+ export class DeleteBuilder {
6
+ parent;
7
+ key;
8
+ condition;
9
+ extraTransactItems = [];
10
+ constructor(parent, key) {
11
+ this.parent = parent;
12
+ this.key = key;
13
+ }
14
+ /**
15
+ * Specify a condition expression for the delete operation.
16
+ */
17
+ withCondition(expression, attributeValues) {
18
+ if (this.condition) {
19
+ this.condition.expression += ` AND ${expression}`;
20
+ Object.assign(this.condition.attributeValues, attributeValues);
21
+ }
22
+ else {
23
+ this.condition = { expression, attributeValues };
24
+ }
25
+ return this;
26
+ }
27
+ async execute() {
28
+ if (this.extraTransactItems.length > 0) {
29
+ // Build our update transaction item.
30
+ const myTransactItem = this.toTransactDelete();
31
+ // Combine with extra transaction items.
32
+ const allItems = [...this.extraTransactItems, myTransactItem];
33
+ await this.parent.getClient().send(new TransactWriteCommand({
34
+ TransactItems: allItems,
35
+ }));
36
+ // After transaction, retrieve the updated item.
37
+ const result = await this.parent.get(this.key).execute();
38
+ if (result === null) {
39
+ throw new Error("Item not found after transaction delete");
40
+ }
41
+ }
42
+ else {
43
+ const params = {
44
+ TableName: this.parent.getTableName(),
45
+ Key: this.parent.buildKey(this.key),
46
+ };
47
+ if (this.condition) {
48
+ params.ConditionExpression = this.condition.expression;
49
+ params.ExpressionAttributeValues = this.condition.attributeValues;
50
+ }
51
+ await this.parent.getClient().send(new DeleteCommand(params));
52
+ }
53
+ }
54
+ transactWrite(ops) {
55
+ if (Array.isArray(ops)) {
56
+ this.extraTransactItems.push(...ops);
57
+ }
58
+ else {
59
+ this.extraTransactItems.push(ops);
60
+ }
61
+ return this;
62
+ }
63
+ toTransactDelete() {
64
+ const deleteItem = {
65
+ TableName: this.parent.getTableName(),
66
+ Key: this.parent.buildKey(this.key),
67
+ };
68
+ if (this.condition) {
69
+ deleteItem.ConditionExpression = this.condition.expression;
70
+ deleteItem.ExpressionAttributeValues = this.condition.attributeValues;
71
+ }
72
+ return { Delete: deleteItem };
73
+ }
74
+ }
75
+ //# sourceMappingURL=delete-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-builder.js","sourceRoot":"","sources":["../../../src/builders/delete-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type BetterDDB } from "../betterddb.js";
2
+ import { type TransactGetItem } from "@aws-sdk/client-dynamodb";
3
+ export declare class GetBuilder<T> {
4
+ private parent;
5
+ private key;
6
+ private projectionExpression?;
7
+ private expressionAttributeNames;
8
+ private extraTransactItems;
9
+ constructor(parent: BetterDDB<T>, key: Partial<T>);
10
+ /**
11
+ * Specify a projection by providing an array of attribute names.
12
+ */
13
+ withProjection(attributes: (keyof T)[]): this;
14
+ execute(): Promise<T | null>;
15
+ transactGet(ops: TransactGetItem[] | TransactGetItem): this;
16
+ toTransactGet(): TransactGetItem;
17
+ }
18
+ //# sourceMappingURL=get-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/get-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,qBAAa,UAAU,CAAC,CAAC;IAKrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IALb,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,wBAAwB,CAA8B;IAC9D,OAAO,CAAC,kBAAkB,CAAyB;gBAEzC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAGzB;;OAEG;IACI,cAAc,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI;IAUvC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA6BlC,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,IAAI;IAS3D,aAAa,IAAI,eAAe;CAWxC"}