dynoquery 0.1.19 → 0.1.20
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.
- package/README.md +8 -3
- package/dist/index.js +26 -14
- package/dist/partition.d.ts +7 -1
- package/dist/partition.js +13 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -188,16 +188,16 @@ DynoQuery provides `batchWrite` and `batchRead` for processing multiple items ac
|
|
|
188
188
|
|
|
189
189
|
```typescript
|
|
190
190
|
// 1. Batch Write (Create/Replace multiple items)
|
|
191
|
-
const user1 = db.User('john', 'METADATA');
|
|
191
|
+
const user1 = db.User('john@example.com', 'METADATA');
|
|
192
192
|
user1.name = 'John Doe';
|
|
193
193
|
|
|
194
|
-
const user2 = db.User('jane', 'METADATA');
|
|
194
|
+
const user2 = db.User('jane@example.com', 'METADATA');
|
|
195
195
|
user2.name = 'Jane Doe';
|
|
196
196
|
|
|
197
197
|
await db.batchWrite([user1, user2]);
|
|
198
198
|
|
|
199
199
|
// 2. Batch Read (Fetch multiple items or index queries)
|
|
200
|
-
const userDraft = db.User('john', 'METADATA');
|
|
200
|
+
const userDraft = db.User('john@example.com', 'METADATA');
|
|
201
201
|
const categoryQuery = db.findByCategory('ELECTRONICS', 'p123');
|
|
202
202
|
|
|
203
203
|
const results = await db.batchRead([userDraft, categoryQuery]);
|
|
@@ -209,6 +209,10 @@ results.forEach(item => {
|
|
|
209
209
|
item.save(); // Second-level methods are available
|
|
210
210
|
}
|
|
211
211
|
});
|
|
212
|
+
|
|
213
|
+
// 3. Batch Delete
|
|
214
|
+
const userToDelete = db.User('john@example.com').draftDelete('METADATA');
|
|
215
|
+
await db.batchWrite([userToDelete]);
|
|
212
216
|
```
|
|
213
217
|
|
|
214
218
|
## Optional Configuration Parameters
|
|
@@ -276,6 +280,7 @@ if (token) {
|
|
|
276
280
|
- `update(skValue, data)`: Partial update of an item.
|
|
277
281
|
- `delete(skValue)`: Deletes an item.
|
|
278
282
|
- `draft(skValue, data?)`: Returns an `Item` object initialized with `data` (optional).
|
|
283
|
+
- `draftDelete(skValue)`: Returns an `Item` object marked for deletion (for use with `batchWrite`).
|
|
279
284
|
- `deleteAll()`: Deletes all items in the partition.
|
|
280
285
|
- `getLastEvaluatedKey()`: Returns the pagination token from the last `getAll()`.
|
|
281
286
|
|
package/dist/index.js
CHANGED
|
@@ -167,22 +167,34 @@ class DynoQuery {
|
|
|
167
167
|
if (!tableGroups[tableName]) {
|
|
168
168
|
tableGroups[tableName] = [];
|
|
169
169
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
170
|
+
if (item.toBeDeleted()) {
|
|
171
|
+
tableGroups[tableName].push({
|
|
172
|
+
DeleteRequest: {
|
|
173
|
+
Key: {
|
|
174
|
+
[this.pkName]: partition.getPkValue(),
|
|
175
|
+
[this.skName]: skValue,
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
const dataToSave = {};
|
|
182
|
+
for (const key in item) {
|
|
183
|
+
if (Object.prototype.hasOwnProperty.call(item, key) &&
|
|
184
|
+
!["_indices", "_partition", "_skValue", "_toBeDeleted"].includes(key) &&
|
|
185
|
+
typeof item[key] !== "function") {
|
|
186
|
+
dataToSave[key] = item[key];
|
|
187
|
+
}
|
|
176
188
|
}
|
|
189
|
+
// Ensure PK and SK are in the data
|
|
190
|
+
dataToSave[this.pkName] = partition.getPkValue();
|
|
191
|
+
dataToSave[this.skName] = skValue;
|
|
192
|
+
tableGroups[tableName].push({
|
|
193
|
+
PutRequest: {
|
|
194
|
+
Item: dataToSave,
|
|
195
|
+
},
|
|
196
|
+
});
|
|
177
197
|
}
|
|
178
|
-
// Ensure PK and SK are in the data
|
|
179
|
-
dataToSave[this.pkName] = partition.getPkValue();
|
|
180
|
-
dataToSave[this.skName] = skValue;
|
|
181
|
-
tableGroups[tableName].push({
|
|
182
|
-
PutRequest: {
|
|
183
|
-
Item: dataToSave,
|
|
184
|
-
},
|
|
185
|
-
});
|
|
186
198
|
});
|
|
187
199
|
const results = [];
|
|
188
200
|
const tableNames = Object.keys(tableGroups);
|
package/dist/partition.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare class Item {
|
|
|
10
10
|
private _indices;
|
|
11
11
|
private _partition;
|
|
12
12
|
private _skValue;
|
|
13
|
+
private _toBeDeleted;
|
|
13
14
|
constructor(partition: Partition, skValue: string, data: any);
|
|
14
15
|
}
|
|
15
16
|
export declare class Partition {
|
|
@@ -55,10 +56,15 @@ export declare class Partition {
|
|
|
55
56
|
get<T = any>(skValue: string): Promise<T | null>;
|
|
56
57
|
/**
|
|
57
58
|
* Pre-draft an item for creation. Returns an Item object.
|
|
58
|
-
* @param
|
|
59
|
+
* @param skValue The sort key value
|
|
59
60
|
* @param data Initial data for the row
|
|
60
61
|
*/
|
|
61
62
|
draft<T = any>(skValue: string, data?: any): T;
|
|
63
|
+
/**
|
|
64
|
+
* Pre-draft an item for deletion. Returns an Item object marked for deletion.
|
|
65
|
+
* @param skValue The sort key value
|
|
66
|
+
*/
|
|
67
|
+
draftDelete<T = any>(skValue: string): T;
|
|
62
68
|
getTableName(): string;
|
|
63
69
|
getPkValue(): string;
|
|
64
70
|
getLastEvaluatedKey(): any;
|
package/dist/partition.js
CHANGED
|
@@ -15,6 +15,7 @@ class Item {
|
|
|
15
15
|
this._indices = [];
|
|
16
16
|
this._partition = partition;
|
|
17
17
|
this._skValue = skValue;
|
|
18
|
+
this._toBeDeleted = !!(data === null || data === void 0 ? void 0 : data._toBeDeleted);
|
|
18
19
|
Object.assign(this, data);
|
|
19
20
|
const self = this;
|
|
20
21
|
return new Proxy(this, {
|
|
@@ -24,7 +25,7 @@ class Item {
|
|
|
24
25
|
const dataToSave = {};
|
|
25
26
|
for (const key in target) {
|
|
26
27
|
if (Object.prototype.hasOwnProperty.call(target, key) &&
|
|
27
|
-
!["_indices", "_partition", "_skValue"].includes(key) &&
|
|
28
|
+
!["_indices", "_partition", "_skValue", "_toBeDeleted"].includes(key) &&
|
|
28
29
|
typeof target[key] !== "function") {
|
|
29
30
|
dataToSave[key] = target[key];
|
|
30
31
|
}
|
|
@@ -61,6 +62,9 @@ class Item {
|
|
|
61
62
|
if (prop === "getSkValue") {
|
|
62
63
|
return () => skValue;
|
|
63
64
|
}
|
|
65
|
+
if (prop === "toBeDeleted") {
|
|
66
|
+
return () => self._toBeDeleted;
|
|
67
|
+
}
|
|
64
68
|
return Reflect.get(target, prop, receiver);
|
|
65
69
|
},
|
|
66
70
|
});
|
|
@@ -219,12 +223,19 @@ class Partition {
|
|
|
219
223
|
}
|
|
220
224
|
/**
|
|
221
225
|
* Pre-draft an item for creation. Returns an Item object.
|
|
222
|
-
* @param
|
|
226
|
+
* @param skValue The sort key value
|
|
223
227
|
* @param data Initial data for the row
|
|
224
228
|
*/
|
|
225
229
|
draft(skValue, data = {}) {
|
|
226
230
|
return new Item(this, skValue, data);
|
|
227
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Pre-draft an item for deletion. Returns an Item object marked for deletion.
|
|
234
|
+
* @param skValue The sort key value
|
|
235
|
+
*/
|
|
236
|
+
draftDelete(skValue) {
|
|
237
|
+
return new Item(this, skValue, { _toBeDeleted: true });
|
|
238
|
+
}
|
|
228
239
|
getTableName() {
|
|
229
240
|
return this.tableName || "";
|
|
230
241
|
}
|