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 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
- const dataToSave = {};
171
- for (const key in item) {
172
- if (Object.prototype.hasOwnProperty.call(item, key) &&
173
- !["_indices", "_partition", "_skValue"].includes(key) &&
174
- typeof item[key] !== "function") {
175
- dataToSave[key] = item[key];
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);
@@ -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 sk The sort key value
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 sk The sort key value
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dynoquery",
3
- "version": "0.1.19",
3
+ "version": "0.1.20",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/devspikejs/dynoquery.git"