qstd 0.3.79 → 0.3.80

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.
@@ -95,6 +95,49 @@ export declare const save: <T extends object>(ddb: Client, props: {
95
95
  tableName?: string;
96
96
  item: T;
97
97
  }) => Promise<import("@aws-sdk/lib-dynamodb").PutCommandOutput>;
98
+ /**
99
+ * Update a single item with type-safe operations
100
+ *
101
+ * Supports all DynamoDB update operations with a clean, type-safe API.
102
+ * Use this for single-item updates; use `transact` for atomic multi-item updates.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * // All operations with DynamoDB expression comments
107
+ * await update<User>(ddb, {
108
+ * key: { pk: 'user#123', sk: 'profile' },
109
+ *
110
+ * // Value operations
111
+ * set: { name: 'Alice', status: 'active' }, // SET #name = :name, #status = :status
112
+ * incr: { loginCount: 1, failedAttempts: -1 }, // SET #x = #x + :val (negative to decrement)
113
+ * remove: ['tempToken', 'oldField'], // REMOVE #tempToken, #oldField
114
+ *
115
+ * // List operations
116
+ * append: { tags: ['new-tag'] }, // SET #tags = list_append(#tags, :tags)
117
+ * prepend: { notifications: [latest] }, // SET #notif = list_append(:notif, #notif)
118
+ *
119
+ * // Conditional & atomic operations
120
+ * ifNotExists: { createdAt: Date.now() }, // SET #createdAt = if_not_exists(#createdAt, :val)
121
+ * add: { viewCount: 1 }, // ADD #viewCount :val (atomic, creates if missing)
122
+ *
123
+ * // Advanced operations
124
+ * setPath: { 'address.city': 'NYC' }, // SET #address.#city = :val (nested updates)
125
+ * compute: { total: ['subtotal', '+', 'tax'] }, // SET #total = #subtotal + #tax (cross-attribute)
126
+ *
127
+ * // Conditional execution (ConditionExpression)
128
+ * conditions: [{ key: 'version', op: '=', value: 1 }],
129
+ * });
130
+ *
131
+ * // Get updated item back
132
+ * const result = await update<User>(ddb, {
133
+ * key: { pk: 'user#123', sk: 'profile' },
134
+ * incr: { views: 1 },
135
+ * returnValues: 'allNew',
136
+ * });
137
+ * console.log(result.Attributes); // Updated item
138
+ * ```
139
+ */
140
+ export declare function update<T extends object = Record<string, unknown>>(ddb: Client, props: _t.UpdateProps<T>): Promise<import("@aws-sdk/lib-dynamodb").UpdateCommandOutput>;
98
141
  /**
99
142
  * Batch get multiple items from DynamoDB
100
143
  *
@@ -273,52 +316,107 @@ export declare const tableExists: (ddb: Client, props: {
273
316
  * - Cannot have multiple operations on the same item
274
317
  *
275
318
  * @example
276
- * // Type-safe conditions (recommended) - like filters in find()
319
+ * ```ts
320
+ *
321
+ * // OPTIMISTIC LOCKING - Type-safe conditions (recommended)
322
+ *
277
323
  * await transact<User>(ddb, {
278
324
  * items: [
279
325
  * {
280
326
  * put: {
281
- * item: { pk: 'user#1', sk: 'profile', version: 2, name: 'Updated' },
282
- * conditions: [{ key: 'version', op: '=', value: 1 }]
327
+ * item: { ...user, version: user.version + 1 },
328
+ * conditions: [{ key: 'version', op: '=', value: user.version }]
283
329
  * }
284
- * },
330
+ * }
331
+ * ]
332
+ * });
333
+ *
334
+ *
335
+ * // PREVENT OVERWRITES - Only create if doesn't exist
336
+ *
337
+ * await transact<User>(ddb, {
338
+ * items: [
285
339
  * {
286
- * delete: {
287
- * key: { pk: 'user#2', sk: 'profile' },
288
- * conditions: [{ key: 'status', op: '=', value: 'inactive' }]
340
+ * put: {
341
+ * item: newUser,
342
+ * conditions: [{ key: 'pk', op: 'attribute_not_exists' }]
289
343
  * }
290
- * },
344
+ * }
345
+ * ]
346
+ * });
347
+ *
348
+ *
349
+ * // CONDITIONAL DELETE - Only delete if status matches
350
+ *
351
+ * await transact<User>(ddb, {
352
+ * items: [
291
353
  * {
292
- * conditionCheck: {
293
- * key: { pk: 'org#1', sk: 'org#1' },
294
- * conditions: [{ key: 'pk', op: 'attribute_exists' }]
354
+ * delete: {
355
+ * key: { pk: 'user#123', sk: 'profile' },
356
+ * conditions: [{ key: 'status', op: '=', value: 'inactive' }]
295
357
  * }
296
358
  * }
297
359
  * ]
298
360
  * });
299
361
  *
300
- * @example
301
- * // Delete a media item and update its group atomically
362
+ *
363
+ * // ATOMIC MULTI-ITEM - Delete media and update group together
364
+ *
302
365
  * await transact(ddb, {
303
366
  * items: [
304
367
  * { delete: { key: { pk: 'media#123', sk: 'media#123' } } },
305
- * { put: { item: { ...group, memberMediaIds: filtered, updatedAt: Date.now() } } },
368
+ * { put: { item: { ...group, mediaIds: updatedIds, updatedAt: Date.now() } } },
306
369
  * ]
307
370
  * });
308
371
  *
309
- * @example
310
- * // Raw expressions (for advanced use cases)
311
- * await transact(ddb, {
372
+ *
373
+ * // CONDITION CHECK - Verify related item exists before writing
374
+ *
375
+ * await transact<User>(ddb, {
312
376
  * items: [
313
377
  * {
314
- * put: {
315
- * item: { pk: 'user#1', sk: 'profile', version: 2, name: 'Updated' },
316
- * cond: 'version = :v',
317
- * exprValues: { ':v': 1 }
378
+ * conditionCheck: {
379
+ * key: { pk: 'org#456', sk: 'org#456' },
380
+ * conditions: [{ key: 'pk', op: 'attribute_exists' }]
381
+ * }
382
+ * },
383
+ * { put: { item: { ...user, orgId: 'org#456' } } }
384
+ * ]
385
+ * });
386
+ *
387
+ *
388
+ * // TYPE-SAFE UPDATE - All operations with DynamoDB expression comments
389
+ *
390
+ * await transact<Order>(ddb, {
391
+ * items: [
392
+ * {
393
+ * update: {
394
+ * key: { pk: 'order#123', sk: 'order#123' },
395
+ *
396
+ * // Value operations
397
+ * set: { status: 'shipped', updatedAt: Date.now() }, // SET #status = :status
398
+ * incr: { version: 1, shipmentCount: 1 }, // SET #version = #version + :val
399
+ * remove: ['pendingReason'], // REMOVE #pendingReason
400
+ *
401
+ * // List operations
402
+ * append: { history: ['shipped'] }, // SET #history = list_append(#history, :val)
403
+ * prepend: { alerts: ['urgent'] }, // SET #alerts = list_append(:val, #alerts)
404
+ *
405
+ * // Conditional & atomic operations
406
+ * ifNotExists: { firstShippedAt: Date.now() }, // SET #x = if_not_exists(#x, :val)
407
+ * add: { totalOrders: 1 }, // ADD #totalOrders :val
408
+ *
409
+ * // Advanced operations
410
+ * setPath: { 'shipping.carrier': 'FedEx' }, // SET #shipping.#carrier = :val
411
+ * compute: { total: ['subtotal', '+', 'tax'] }, // SET #total = #subtotal + #tax
412
+ *
413
+ * // Conditional execution
414
+ * conditions: [{ key: 'status', op: '=', value: 'pending' }]
318
415
  * }
319
416
  * }
320
417
  * ]
321
418
  * });
419
+ * ```
322
420
  */
323
421
  export declare function transact<T extends object = Record<string, unknown>>(ddb: Client, props: {
324
422
  tableName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../../src/server/aws/ddb/domain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../../src/server/aws/ddb/domain.ts"],"names":[],"mappings":"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"}
@@ -27,4 +27,8 @@ export declare const backoffDelay: (attempt: number) => number;
27
27
  * Chunk an array into smaller arrays of specified size
28
28
  */
29
29
  export declare const chunk: <T>(arr: T[], size: number) => T[][];
30
+ /**
31
+ * Build UpdateExpression and expression attributes from type-safe update operations
32
+ */
33
+ export declare const buildUpdateExpression: <T extends object>(ops: _t.UpdateOperations<T>, names: Record<string, string>, values: Record<string, NativeAttributeValue>) => string | undefined;
30
34
  //# sourceMappingURL=fns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fns.d.ts","sourceRoot":"","sources":["../../../../src/server/aws/ddb/fns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,GAAG,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,KACpC,MAOF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1E,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3D,WAAW,MAAM,SAmClB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,IAAI;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACnC,IAAI,EAAE,CAAC,MAAM,GAAG,SAAS,EACzB,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,QAAQ,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,WAoD7C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,MAAM,EACpD,SAAS,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC1C,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,QAAQ,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,uBAoE7C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,CAAC,EACzC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EACvB,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAQ9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,qBACmB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAE9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,MAAM,KAAG,CAAC,EAAE,EAIpD,CAAC"}
1
+ {"version":3,"file":"fns.d.ts","sourceRoot":"","sources":["../../../../src/server/aws/ddb/fns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,GAAG,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,KACpC,MAOF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1E,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3D,WAAW,MAAM,SAmClB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,IAAI;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACnC,IAAI,EAAE,CAAC,MAAM,GAAG,SAAS,EACzB,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,QAAQ,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,WAoD7C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,MAAM,EACpD,SAAS,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC1C,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,QAAQ,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,uBAoE7C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,CAAC,EACzC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EACvB,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAQ9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,qBACmB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAE9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,MAAM,KAAG,CAAC,EAAE,EAIpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,MAAM,EACpD,KAAK,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAC3B,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,QAAQ,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,uBA6I7C,CAAC"}
@@ -216,21 +216,37 @@ export type BatchDeleteResult = {
216
216
  export type ExprValues = Record<string, unknown>;
217
217
  /** Expression attribute names for reserved word escaping */
218
218
  export type ExprNames = Record<string, string>;
219
- /** Put operation in a transaction */
219
+ /**
220
+ * Put operation in a transaction
221
+ * @example
222
+ * // Type-safe conditions (recommended)
223
+ * { put: { item: user, conditions: [{ key: 'version', op: '=', value: 1 }] } }
224
+ *
225
+ * // Raw expression (advanced)
226
+ * { put: { item: user, cond: 'attribute_not_exists(pk)' } }
227
+ */
220
228
  export type TransactPut<T extends object = Record<string, unknown>> = {
221
229
  put: {
222
230
  item: T;
223
231
  /** Type-safe conditions (like filters). Auto-generates expression attributes. */
224
232
  conditions?: ReadonlyArray<FilterClause<T>>;
225
- /** Raw condition expression (e.g., 'attribute_not_exists(pk)'). Use conditions for type-safety. */
233
+ /** Raw condition expression. Use conditions for type-safety. */
226
234
  cond?: string;
227
- /** Expression attribute values for raw cond (e.g., { ':v': 1 }) */
235
+ /** Expression attribute values for raw cond */
228
236
  exprValues?: ExprValues;
229
237
  /** Expression attribute names for raw cond */
230
238
  exprNames?: ExprNames;
231
239
  };
232
240
  };
233
- /** Delete operation in a transaction */
241
+ /**
242
+ * Delete operation in a transaction
243
+ * @example
244
+ * // Type-safe conditions (recommended)
245
+ * { delete: { key: { pk, sk }, conditions: [{ key: 'status', op: '=', value: 'inactive' }] } }
246
+ *
247
+ * // Simple delete (no conditions)
248
+ * { delete: { key: { pk, sk } } }
249
+ */
234
250
  export type TransactDelete<T extends object = Record<string, unknown>> = {
235
251
  delete: {
236
252
  key: Key;
@@ -244,25 +260,136 @@ export type TransactDelete<T extends object = Record<string, unknown>> = {
244
260
  exprNames?: ExprNames;
245
261
  };
246
262
  };
247
- /** Update operation in a transaction */
263
+ /**
264
+ * Type-safe update operations - shared between transact and update functions
265
+ * @example
266
+ * ```ts
267
+ * // Value operations
268
+ * set: { name: 'Alice', status: 'active' } // SET #name = :name, #status = :status
269
+ * incr: { count: 1, views: -5 } // SET #count = #count + :incr (use negative to decrement)
270
+ * remove: ['oldField', 'tempData'] // REMOVE #oldField, #tempData
271
+ *
272
+ * // List operations
273
+ * append: { items: ['new1', 'new2'] } // SET #items = list_append(#items, :items)
274
+ * prepend: { items: ['first'] } // SET #items = list_append(:items, #items)
275
+ *
276
+ * // Conditional & set operations
277
+ * ifNotExists: { field: 'default' } // SET #field = if_not_exists(#field, :field)
278
+ * add: { counter: 5 } // ADD #counter :counter (atomic, creates if missing)
279
+ *
280
+ * // Advanced
281
+ * setPath: { 'address.city': 'NYC' } // SET #address.#city = :val (nested updates)
282
+ * compute: { total: ['price', '+', 'tax'] } // SET #total = #price + #tax (cross-attribute math)
283
+ * ```
284
+ */
285
+ export type UpdateOperations<T extends object = Record<string, unknown>> = {
286
+ /** SET: assign values to attributes */
287
+ set?: Partial<T>;
288
+ /** INCREMENT: add to numeric attributes (use negative to decrement) */
289
+ incr?: Partial<Record<keyof T, number>>;
290
+ /** REMOVE: list of attribute names to remove */
291
+ remove?: (keyof T)[];
292
+ /** LIST APPEND: append values to list attributes */
293
+ append?: Partial<Record<keyof T, unknown[]>>;
294
+ /** LIST PREPEND: prepend values to list attributes */
295
+ prepend?: Partial<Record<keyof T, unknown[]>>;
296
+ /** IF NOT EXISTS: set value only if attribute doesn't exist */
297
+ ifNotExists?: Partial<T>;
298
+ /** ADD: atomic add to numeric attributes (creates attribute if missing) */
299
+ add?: Partial<Record<keyof T, number>>;
300
+ /** SET PATH: update nested attributes using dot notation */
301
+ setPath?: Record<string, unknown>;
302
+ /** COMPUTE: cross-attribute math operations */
303
+ compute?: Partial<Record<keyof T, [keyof T, "+" | "-", keyof T]>>;
304
+ };
305
+ /**
306
+ * Update operation in a transaction
307
+ * @example
308
+ * ```ts
309
+ * // All operations can be combined in a single update
310
+ * {
311
+ * update: {
312
+ * key: { pk: 'user#123', sk: 'profile' },
313
+ *
314
+ * // Value operations
315
+ * set: { name: 'Alice', status: 'active' }, // SET #name = :name, #status = :status
316
+ * incr: { loginCount: 1, failedAttempts: -1 }, // SET #x = #x + :val (negative to decrement)
317
+ * remove: ['tempToken', 'oldField'], // REMOVE #tempToken, #oldField
318
+ *
319
+ * // List operations
320
+ * append: { tags: ['new-tag'] }, // SET #tags = list_append(#tags, :tags)
321
+ * prepend: { notifications: [latest] }, // SET #notif = list_append(:notif, #notif)
322
+ *
323
+ * // Conditional & set operations
324
+ * ifNotExists: { createdAt: Date.now() }, // SET #createdAt = if_not_exists(#createdAt, :val)
325
+ * add: { viewCount: 1 }, // ADD #viewCount :val (atomic, creates if missing)
326
+ *
327
+ * // Advanced operations
328
+ * setPath: { 'address.city': 'NYC' }, // SET #address.#city = :val (nested)
329
+ * compute: { total: ['subtotal', '+', 'tax'] }, // SET #total = #subtotal + #tax
330
+ *
331
+ * // Conditional execution
332
+ * conditions: [{ key: 'version', op: '=', value: 1 }]
333
+ * }
334
+ * }
335
+ * ```
336
+ */
248
337
  export type TransactUpdate<T extends object = Record<string, unknown>> = {
249
- update: {
338
+ update: UpdateOperations<T> & {
250
339
  key: Key;
251
- /** Update expression (e.g., 'SET #count = #count + :inc') */
252
- expr: string;
253
340
  /** Type-safe conditions (like filters). Auto-generates expression attributes. */
254
341
  conditions?: ReadonlyArray<FilterClause<T>>;
255
342
  /** Raw condition expression. Use conditions for type-safety. */
256
343
  cond?: string;
257
- /** Expression attribute values (for expr and/or cond) */
258
- exprValues?: ExprValues;
259
- /** Expression attribute names (for expr and/or cond) */
260
- exprNames?: ExprNames;
261
344
  };
262
345
  };
263
- /** ConditionCheck operation - validates a condition without modifying the item */
346
+ /** Return values options for update operations */
347
+ export type UpdateReturnValues = "none" | "allOld" | "updatedOld" | "allNew" | "updatedNew";
348
+ /**
349
+ * Props for standalone update function
350
+ */
351
+ export type UpdateProps<T extends object = Record<string, unknown>> = {
352
+ /** Table name (optional if set on client) */
353
+ tableName?: string;
354
+ /** Primary key of item to update */
355
+ key: Key;
356
+ /** Type-safe conditions (like filters) */
357
+ conditions?: ReadonlyArray<FilterClause<T>>;
358
+ /** Raw condition expression */
359
+ cond?: string;
360
+ /** What values to return after update */
361
+ returnValues?: UpdateReturnValues;
362
+ /** SET: assign values to attributes */
363
+ set?: Partial<T>;
364
+ /** INCREMENT: add to numeric attributes (use negative to decrement) */
365
+ incr?: Partial<Record<keyof T, number>>;
366
+ /** REMOVE: list of attribute names to remove */
367
+ remove?: (keyof T)[];
368
+ /** LIST APPEND: append values to list attributes */
369
+ append?: Partial<Record<keyof T, unknown[]>>;
370
+ /** LIST PREPEND: prepend values to list attributes */
371
+ prepend?: Partial<Record<keyof T, unknown[]>>;
372
+ /** IF NOT EXISTS: set value only if attribute doesn't exist */
373
+ ifNotExists?: Partial<T>;
374
+ /** ADD: atomic add to numeric attributes (creates attribute if missing) */
375
+ add?: Partial<Record<keyof T, number>>;
376
+ /** SET PATH: update nested attributes using dot notation */
377
+ setPath?: Record<string, unknown>;
378
+ /** COMPUTE: cross-attribute math operations */
379
+ compute?: Partial<Record<keyof T, [keyof T, "+" | "-", keyof T]>>;
380
+ };
381
+ /**
382
+ * ConditionCheck operation - validates a condition without modifying the item
383
+ * @example
384
+ * // Type-safe conditions (recommended)
385
+ * { conditionCheck: { key: { pk, sk }, conditions: [{ key: 'pk', op: 'attribute_exists' }] } }
386
+ *
387
+ * // Raw expression
388
+ * { conditionCheck: { key: { pk, sk }, cond: 'attribute_exists(pk)' } }
389
+ */
264
390
  export type TransactConditionCheck<T extends object = Record<string, unknown>> = {
265
391
  conditionCheck: {
392
+ key: Key;
266
393
  /** Type-safe conditions (like filters). Auto-generates expression attributes. */
267
394
  conditions?: ReadonlyArray<FilterClause<T>>;
268
395
  /** Raw condition expression. Use conditions for type-safety. */
@@ -271,7 +398,6 @@ export type TransactConditionCheck<T extends object = Record<string, unknown>> =
271
398
  exprValues?: ExprValues;
272
399
  /** Expression attribute names for raw cond */
273
400
  exprNames?: ExprNames;
274
- key: Key;
275
401
  };
276
402
  };
277
403
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/server/aws/ddb/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/server/aws/ddb/types.ts"],"names":[],"mappings":"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"}
@@ -1231,7 +1231,8 @@ __export(ddb_exports, {
1231
1231
  remove: () => remove2,
1232
1232
  save: () => save,
1233
1233
  tableExists: () => tableExists,
1234
- transact: () => transact
1234
+ transact: () => transact,
1235
+ update: () => update
1235
1236
  });
1236
1237
 
1237
1238
  // src/server/aws/ddb/fns.ts
@@ -1383,6 +1384,124 @@ var chunk2 = (arr, size) => {
1383
1384
  (_, i) => arr.slice(i * size, i * size + size)
1384
1385
  );
1385
1386
  };
1387
+ var buildUpdateExpression = (ops, names, values) => {
1388
+ const setParts = [];
1389
+ const removeParts = [];
1390
+ const addParts = [];
1391
+ let nameIdx = 0;
1392
+ const getName = (key) => {
1393
+ const token = `#u${nameIdx++}`;
1394
+ names[token] = key;
1395
+ return token;
1396
+ };
1397
+ let valIdx = 0;
1398
+ const getValue = (val) => {
1399
+ const token = `:u${valIdx++}`;
1400
+ values[token] = val;
1401
+ return token;
1402
+ };
1403
+ if (ops.set) {
1404
+ for (const [key, val] of Object.entries(
1405
+ ops.set
1406
+ )) {
1407
+ if (val !== void 0) {
1408
+ setParts.push(`${getName(key)} = ${getValue(val)}`);
1409
+ }
1410
+ }
1411
+ }
1412
+ if (ops.incr) {
1413
+ for (const [key, val] of Object.entries(
1414
+ ops.incr
1415
+ )) {
1416
+ if (val !== void 0) {
1417
+ const nameToken = getName(key);
1418
+ setParts.push(`${nameToken} = ${nameToken} + ${getValue(val)}`);
1419
+ }
1420
+ }
1421
+ }
1422
+ if (ops.remove) {
1423
+ for (const key of ops.remove) {
1424
+ removeParts.push(getName(key));
1425
+ }
1426
+ }
1427
+ if (ops.append) {
1428
+ for (const [key, val] of Object.entries(
1429
+ ops.append
1430
+ )) {
1431
+ if (val !== void 0) {
1432
+ const nameToken = getName(key);
1433
+ setParts.push(
1434
+ `${nameToken} = list_append(${nameToken}, ${getValue(val)})`
1435
+ );
1436
+ }
1437
+ }
1438
+ }
1439
+ if (ops.prepend) {
1440
+ for (const [key, val] of Object.entries(
1441
+ ops.prepend
1442
+ )) {
1443
+ if (val !== void 0) {
1444
+ const nameToken = getName(key);
1445
+ setParts.push(
1446
+ `${nameToken} = list_append(${getValue(val)}, ${nameToken})`
1447
+ );
1448
+ }
1449
+ }
1450
+ }
1451
+ if (ops.ifNotExists) {
1452
+ for (const [key, val] of Object.entries(
1453
+ ops.ifNotExists
1454
+ )) {
1455
+ if (val !== void 0) {
1456
+ const nameToken = getName(key);
1457
+ setParts.push(
1458
+ `${nameToken} = if_not_exists(${nameToken}, ${getValue(val)})`
1459
+ );
1460
+ }
1461
+ }
1462
+ }
1463
+ if (ops.add) {
1464
+ for (const [key, val] of Object.entries(
1465
+ ops.add
1466
+ )) {
1467
+ if (val !== void 0) {
1468
+ addParts.push(`${getName(key)} ${getValue(val)}`);
1469
+ }
1470
+ }
1471
+ }
1472
+ if (ops.setPath) {
1473
+ for (const [path, val] of Object.entries(ops.setPath)) {
1474
+ if (val !== void 0) {
1475
+ const pathParts = path.split(".");
1476
+ const pathTokens = pathParts.map((p) => getName(p));
1477
+ setParts.push(`${pathTokens.join(".")} = ${getValue(val)}`);
1478
+ }
1479
+ }
1480
+ }
1481
+ if (ops.compute) {
1482
+ for (const [key, val] of Object.entries(
1483
+ ops.compute
1484
+ )) {
1485
+ if (val && Array.isArray(val) && val.length === 3) {
1486
+ const [left, op, right] = val;
1487
+ setParts.push(
1488
+ `${getName(key)} = ${getName(left)} ${op} ${getName(right)}`
1489
+ );
1490
+ }
1491
+ }
1492
+ }
1493
+ const exprParts = [];
1494
+ if (setParts.length > 0) {
1495
+ exprParts.push(`SET ${setParts.join(", ")}`);
1496
+ }
1497
+ if (removeParts.length > 0) {
1498
+ exprParts.push(`REMOVE ${removeParts.join(", ")}`);
1499
+ }
1500
+ if (addParts.length > 0) {
1501
+ exprParts.push(`ADD ${addParts.join(", ")}`);
1502
+ }
1503
+ return exprParts.join(" ") || void 0;
1504
+ };
1386
1505
 
1387
1506
  // src/server/aws/ddb/domain.ts
1388
1507
  var create2 = (props) => {
@@ -1531,6 +1650,66 @@ var save = async (ddb, props) => {
1531
1650
  });
1532
1651
  return ddb.client.send(command);
1533
1652
  };
1653
+ var RETURN_VALUES_MAP = {
1654
+ updatedNew: clientDynamodb.ReturnValue.UPDATED_NEW,
1655
+ updatedOld: clientDynamodb.ReturnValue.UPDATED_OLD,
1656
+ allOld: clientDynamodb.ReturnValue.ALL_OLD,
1657
+ allNew: clientDynamodb.ReturnValue.ALL_NEW,
1658
+ none: clientDynamodb.ReturnValue.NONE
1659
+ };
1660
+ async function update(ddb, props) {
1661
+ const TableName = getTableNameOrThrow(
1662
+ props.tableName,
1663
+ ddb.tableName
1664
+ );
1665
+ const names = {};
1666
+ const values = {};
1667
+ const UpdateExpression = buildUpdateExpression(
1668
+ props,
1669
+ names,
1670
+ values
1671
+ );
1672
+ if (!UpdateExpression) {
1673
+ throw new Error(
1674
+ `[ddb] [update] requires at least one operation (set, incr, remove, append, etc.)`
1675
+ );
1676
+ }
1677
+ let ConditionExpression;
1678
+ if (props.conditions || props.cond) {
1679
+ const condNames = {};
1680
+ const condValues = {};
1681
+ if (props.conditions) {
1682
+ ConditionExpression = buildFilterExpression(
1683
+ props.conditions,
1684
+ condNames,
1685
+ condValues
1686
+ );
1687
+ }
1688
+ if (props.cond) {
1689
+ ConditionExpression = ConditionExpression ? `(${ConditionExpression}) AND (${props.cond})` : props.cond;
1690
+ }
1691
+ Object.assign(names, condNames);
1692
+ Object.assign(values, condValues);
1693
+ }
1694
+ const input = {
1695
+ TableName,
1696
+ Key: props.key,
1697
+ UpdateExpression
1698
+ };
1699
+ if (ConditionExpression) {
1700
+ input.ConditionExpression = ConditionExpression;
1701
+ }
1702
+ if (Object.keys(names).length > 0) {
1703
+ input.ExpressionAttributeNames = names;
1704
+ }
1705
+ if (Object.keys(values).length > 0) {
1706
+ input.ExpressionAttributeValues = values;
1707
+ }
1708
+ if (props.returnValues) {
1709
+ input.ReturnValues = RETURN_VALUES_MAP[props.returnValues];
1710
+ }
1711
+ return ddb.client.send(new libDynamodb.UpdateCommand(input));
1712
+ }
1534
1713
  async function batchGet(ddb, props) {
1535
1714
  const { keys, maxRetries = 3, strong = false } = props;
1536
1715
  const TableName = getTableNameOrThrow(props.tableName, ddb.tableName);
@@ -1879,24 +2058,44 @@ async function transact(ddb, props) {
1879
2058
  };
1880
2059
  }
1881
2060
  if ("update" in item2) {
1882
- const {
1883
- ConditionExpression,
1884
- ExpressionAttributeNames,
1885
- ExpressionAttributeValues
1886
- } = buildCondition(
2061
+ const names = {};
2062
+ const values = {};
2063
+ const UpdateExpression = buildUpdateExpression(
2064
+ item2.update,
2065
+ names,
2066
+ values
2067
+ );
2068
+ if (!UpdateExpression) {
2069
+ throw new Error(
2070
+ `[ddb] [transact] update requires at least one operation (set, incr, remove, append, etc.)`
2071
+ );
2072
+ }
2073
+ const condResult = buildCondition(
1887
2074
  item2.update.conditions,
1888
2075
  item2.update.cond,
1889
- item2.update.exprNames,
1890
- item2.update.exprValues
2076
+ void 0,
2077
+ void 0
1891
2078
  );
2079
+ if (condResult.ExpressionAttributeNames) {
2080
+ Object.assign(names, condResult.ExpressionAttributeNames);
2081
+ }
2082
+ if (condResult.ExpressionAttributeValues) {
2083
+ Object.assign(values, condResult.ExpressionAttributeValues);
2084
+ }
1892
2085
  return {
1893
2086
  Update: {
1894
2087
  TableName,
1895
2088
  Key: item2.update.key,
1896
- UpdateExpression: item2.update.expr,
1897
- ...ConditionExpression && { ConditionExpression },
1898
- ...ExpressionAttributeValues && { ExpressionAttributeValues },
1899
- ...ExpressionAttributeNames && { ExpressionAttributeNames }
2089
+ UpdateExpression,
2090
+ ...condResult.ConditionExpression && {
2091
+ ConditionExpression: condResult.ConditionExpression
2092
+ },
2093
+ ...Object.keys(values).length > 0 && {
2094
+ ExpressionAttributeValues: values
2095
+ },
2096
+ ...Object.keys(names).length > 0 && {
2097
+ ExpressionAttributeNames: names
2098
+ }
1900
2099
  }
1901
2100
  };
1902
2101
  }
@@ -2,8 +2,8 @@ import { format, formatISO, formatDistanceToNow, isSameYear, isSameMonth, isSame
2
2
  import awaitSpawn from 'await-spawn';
3
3
  import { promises } from 'fs';
4
4
  import { ArkErrors } from 'arktype';
5
- import { DynamoDBDocumentClient, ScanCommand, QueryCommand, DeleteCommand, PutCommand, BatchGetCommand, TransactWriteCommand, BatchWriteCommand } from '@aws-sdk/lib-dynamodb';
6
- import { DynamoDBClient, DeleteTableCommand, DescribeTableCommand, DynamoDBServiceException, CreateTableCommand, DescribeContinuousBackupsCommand, UpdateContinuousBackupsCommand, waitUntilTableExists } from '@aws-sdk/client-dynamodb';
5
+ import { DynamoDBDocumentClient, ScanCommand, QueryCommand, DeleteCommand, PutCommand, UpdateCommand, BatchGetCommand, TransactWriteCommand, BatchWriteCommand } from '@aws-sdk/lib-dynamodb';
6
+ import { ReturnValue, DynamoDBClient, DeleteTableCommand, DescribeTableCommand, DynamoDBServiceException, CreateTableCommand, DescribeContinuousBackupsCommand, UpdateContinuousBackupsCommand, waitUntilTableExists } from '@aws-sdk/client-dynamodb';
7
7
  import signale from 'signale';
8
8
  import { SNSClient, PublishCommand } from '@aws-sdk/client-sns';
9
9
  import { SQSClient, SendMessageCommand } from '@aws-sdk/client-sqs';
@@ -1223,7 +1223,8 @@ __export(ddb_exports, {
1223
1223
  remove: () => remove2,
1224
1224
  save: () => save,
1225
1225
  tableExists: () => tableExists,
1226
- transact: () => transact
1226
+ transact: () => transact,
1227
+ update: () => update
1227
1228
  });
1228
1229
 
1229
1230
  // src/server/aws/ddb/fns.ts
@@ -1375,6 +1376,124 @@ var chunk2 = (arr, size) => {
1375
1376
  (_, i) => arr.slice(i * size, i * size + size)
1376
1377
  );
1377
1378
  };
1379
+ var buildUpdateExpression = (ops, names, values) => {
1380
+ const setParts = [];
1381
+ const removeParts = [];
1382
+ const addParts = [];
1383
+ let nameIdx = 0;
1384
+ const getName = (key) => {
1385
+ const token = `#u${nameIdx++}`;
1386
+ names[token] = key;
1387
+ return token;
1388
+ };
1389
+ let valIdx = 0;
1390
+ const getValue = (val) => {
1391
+ const token = `:u${valIdx++}`;
1392
+ values[token] = val;
1393
+ return token;
1394
+ };
1395
+ if (ops.set) {
1396
+ for (const [key, val] of Object.entries(
1397
+ ops.set
1398
+ )) {
1399
+ if (val !== void 0) {
1400
+ setParts.push(`${getName(key)} = ${getValue(val)}`);
1401
+ }
1402
+ }
1403
+ }
1404
+ if (ops.incr) {
1405
+ for (const [key, val] of Object.entries(
1406
+ ops.incr
1407
+ )) {
1408
+ if (val !== void 0) {
1409
+ const nameToken = getName(key);
1410
+ setParts.push(`${nameToken} = ${nameToken} + ${getValue(val)}`);
1411
+ }
1412
+ }
1413
+ }
1414
+ if (ops.remove) {
1415
+ for (const key of ops.remove) {
1416
+ removeParts.push(getName(key));
1417
+ }
1418
+ }
1419
+ if (ops.append) {
1420
+ for (const [key, val] of Object.entries(
1421
+ ops.append
1422
+ )) {
1423
+ if (val !== void 0) {
1424
+ const nameToken = getName(key);
1425
+ setParts.push(
1426
+ `${nameToken} = list_append(${nameToken}, ${getValue(val)})`
1427
+ );
1428
+ }
1429
+ }
1430
+ }
1431
+ if (ops.prepend) {
1432
+ for (const [key, val] of Object.entries(
1433
+ ops.prepend
1434
+ )) {
1435
+ if (val !== void 0) {
1436
+ const nameToken = getName(key);
1437
+ setParts.push(
1438
+ `${nameToken} = list_append(${getValue(val)}, ${nameToken})`
1439
+ );
1440
+ }
1441
+ }
1442
+ }
1443
+ if (ops.ifNotExists) {
1444
+ for (const [key, val] of Object.entries(
1445
+ ops.ifNotExists
1446
+ )) {
1447
+ if (val !== void 0) {
1448
+ const nameToken = getName(key);
1449
+ setParts.push(
1450
+ `${nameToken} = if_not_exists(${nameToken}, ${getValue(val)})`
1451
+ );
1452
+ }
1453
+ }
1454
+ }
1455
+ if (ops.add) {
1456
+ for (const [key, val] of Object.entries(
1457
+ ops.add
1458
+ )) {
1459
+ if (val !== void 0) {
1460
+ addParts.push(`${getName(key)} ${getValue(val)}`);
1461
+ }
1462
+ }
1463
+ }
1464
+ if (ops.setPath) {
1465
+ for (const [path, val] of Object.entries(ops.setPath)) {
1466
+ if (val !== void 0) {
1467
+ const pathParts = path.split(".");
1468
+ const pathTokens = pathParts.map((p) => getName(p));
1469
+ setParts.push(`${pathTokens.join(".")} = ${getValue(val)}`);
1470
+ }
1471
+ }
1472
+ }
1473
+ if (ops.compute) {
1474
+ for (const [key, val] of Object.entries(
1475
+ ops.compute
1476
+ )) {
1477
+ if (val && Array.isArray(val) && val.length === 3) {
1478
+ const [left, op, right] = val;
1479
+ setParts.push(
1480
+ `${getName(key)} = ${getName(left)} ${op} ${getName(right)}`
1481
+ );
1482
+ }
1483
+ }
1484
+ }
1485
+ const exprParts = [];
1486
+ if (setParts.length > 0) {
1487
+ exprParts.push(`SET ${setParts.join(", ")}`);
1488
+ }
1489
+ if (removeParts.length > 0) {
1490
+ exprParts.push(`REMOVE ${removeParts.join(", ")}`);
1491
+ }
1492
+ if (addParts.length > 0) {
1493
+ exprParts.push(`ADD ${addParts.join(", ")}`);
1494
+ }
1495
+ return exprParts.join(" ") || void 0;
1496
+ };
1378
1497
 
1379
1498
  // src/server/aws/ddb/domain.ts
1380
1499
  var create2 = (props) => {
@@ -1523,6 +1642,66 @@ var save = async (ddb, props) => {
1523
1642
  });
1524
1643
  return ddb.client.send(command);
1525
1644
  };
1645
+ var RETURN_VALUES_MAP = {
1646
+ updatedNew: ReturnValue.UPDATED_NEW,
1647
+ updatedOld: ReturnValue.UPDATED_OLD,
1648
+ allOld: ReturnValue.ALL_OLD,
1649
+ allNew: ReturnValue.ALL_NEW,
1650
+ none: ReturnValue.NONE
1651
+ };
1652
+ async function update(ddb, props) {
1653
+ const TableName = getTableNameOrThrow(
1654
+ props.tableName,
1655
+ ddb.tableName
1656
+ );
1657
+ const names = {};
1658
+ const values = {};
1659
+ const UpdateExpression = buildUpdateExpression(
1660
+ props,
1661
+ names,
1662
+ values
1663
+ );
1664
+ if (!UpdateExpression) {
1665
+ throw new Error(
1666
+ `[ddb] [update] requires at least one operation (set, incr, remove, append, etc.)`
1667
+ );
1668
+ }
1669
+ let ConditionExpression;
1670
+ if (props.conditions || props.cond) {
1671
+ const condNames = {};
1672
+ const condValues = {};
1673
+ if (props.conditions) {
1674
+ ConditionExpression = buildFilterExpression(
1675
+ props.conditions,
1676
+ condNames,
1677
+ condValues
1678
+ );
1679
+ }
1680
+ if (props.cond) {
1681
+ ConditionExpression = ConditionExpression ? `(${ConditionExpression}) AND (${props.cond})` : props.cond;
1682
+ }
1683
+ Object.assign(names, condNames);
1684
+ Object.assign(values, condValues);
1685
+ }
1686
+ const input = {
1687
+ TableName,
1688
+ Key: props.key,
1689
+ UpdateExpression
1690
+ };
1691
+ if (ConditionExpression) {
1692
+ input.ConditionExpression = ConditionExpression;
1693
+ }
1694
+ if (Object.keys(names).length > 0) {
1695
+ input.ExpressionAttributeNames = names;
1696
+ }
1697
+ if (Object.keys(values).length > 0) {
1698
+ input.ExpressionAttributeValues = values;
1699
+ }
1700
+ if (props.returnValues) {
1701
+ input.ReturnValues = RETURN_VALUES_MAP[props.returnValues];
1702
+ }
1703
+ return ddb.client.send(new UpdateCommand(input));
1704
+ }
1526
1705
  async function batchGet(ddb, props) {
1527
1706
  const { keys, maxRetries = 3, strong = false } = props;
1528
1707
  const TableName = getTableNameOrThrow(props.tableName, ddb.tableName);
@@ -1871,24 +2050,44 @@ async function transact(ddb, props) {
1871
2050
  };
1872
2051
  }
1873
2052
  if ("update" in item2) {
1874
- const {
1875
- ConditionExpression,
1876
- ExpressionAttributeNames,
1877
- ExpressionAttributeValues
1878
- } = buildCondition(
2053
+ const names = {};
2054
+ const values = {};
2055
+ const UpdateExpression = buildUpdateExpression(
2056
+ item2.update,
2057
+ names,
2058
+ values
2059
+ );
2060
+ if (!UpdateExpression) {
2061
+ throw new Error(
2062
+ `[ddb] [transact] update requires at least one operation (set, incr, remove, append, etc.)`
2063
+ );
2064
+ }
2065
+ const condResult = buildCondition(
1879
2066
  item2.update.conditions,
1880
2067
  item2.update.cond,
1881
- item2.update.exprNames,
1882
- item2.update.exprValues
2068
+ void 0,
2069
+ void 0
1883
2070
  );
2071
+ if (condResult.ExpressionAttributeNames) {
2072
+ Object.assign(names, condResult.ExpressionAttributeNames);
2073
+ }
2074
+ if (condResult.ExpressionAttributeValues) {
2075
+ Object.assign(values, condResult.ExpressionAttributeValues);
2076
+ }
1884
2077
  return {
1885
2078
  Update: {
1886
2079
  TableName,
1887
2080
  Key: item2.update.key,
1888
- UpdateExpression: item2.update.expr,
1889
- ...ConditionExpression && { ConditionExpression },
1890
- ...ExpressionAttributeValues && { ExpressionAttributeValues },
1891
- ...ExpressionAttributeNames && { ExpressionAttributeNames }
2081
+ UpdateExpression,
2082
+ ...condResult.ConditionExpression && {
2083
+ ConditionExpression: condResult.ConditionExpression
2084
+ },
2085
+ ...Object.keys(values).length > 0 && {
2086
+ ExpressionAttributeValues: values
2087
+ },
2088
+ ...Object.keys(names).length > 0 && {
2089
+ ExpressionAttributeNames: names
2090
+ }
1892
2091
  }
1893
2092
  };
1894
2093
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qstd",
3
- "version": "0.3.79",
3
+ "version": "0.3.80",
4
4
  "description": "Standard Block component and utilities library with Panda CSS",
5
5
  "author": "malin1",
6
6
  "license": "MIT",