import { PreparedBatchWrite, BaseConfig, TableCommand } from './index.js'; import { DynamoTable } from '../core/table.js'; import { ObjectLikeZodType, EntitySchema } from '../core/index.js'; import { ReturnItemCollectionMetrics, ConsumedCapacity, ItemCollectionMetrics } from '@aws-sdk/client-dynamodb'; import { ResponseMetadata } from '@aws-sdk/types'; /** * Extracts the entity schema type from a PreparedBatchWrite. */ type ExtractSchema = T extends PreparedBatchWrite ? EntitySchema : never; /** * Maps an array of PreparedBatchWrites to a tuple of their unprocessed put arrays. */ type TableBatchWriteUnprocessedPuts[]> = { [K in keyof Writes]: Array> | undefined; }; /** * Maps an array of PreparedBatchWrites to a tuple of their unprocessed delete arrays. */ type TableBatchWriteUnprocessedDeletes[]> = { [K in keyof Writes]: Array>> | undefined; }; /** * Configuration for the TableBatchWrite command. * * @template Writes - Tuple of PreparedBatchWrite types, one per entity group. */ type TableBatchWriteConfig[]> = BaseConfig & { writes: [...Writes]; returnItemCollectionMetrics?: ReturnItemCollectionMetrics; }; /** * Result of the TableBatchWrite command. * * @template Writes - Tuple of PreparedBatchWrite types, one per entity group. */ type TableBatchWriteResult[]> = { responseMetadata?: ResponseMetadata; consumedCapacity?: ConsumedCapacity | undefined; itemCollectionMetrics?: ItemCollectionMetrics; unprocessedPuts: TableBatchWriteUnprocessedPuts; unprocessedDeletes: TableBatchWriteUnprocessedDeletes; }; /** * Table-level command to perform a batch write across multiple entity types. * * Unlike `BatchWrite` which operates on a single entity type, this command accepts * write operations from multiple entities via `entity.prepare(new BatchWrite({ ... }))` * and executes them in a single DynamoDB BatchWrite request. * * Unprocessed puts and deletes are returned per entity in a tuple matching the input order. * * @example * ```typescript * const { unprocessedPuts, unprocessedDeletes } = await table.send(new TableBatchWrite({ * writes: [ * userEntity.prepare(new BatchWrite({ * items: [{ userId: 'u1', name: 'Alice' }], * deletes: [{ userId: 'u2', name: 'Bob' }], * })), * orderEntity.prepare(new BatchWrite({ * items: [{ orderId: 'o1', status: 'pending', total: 99 }], * })), * ], * })) * * const [userUnprocessedPuts, orderUnprocessedPuts] = unprocessedPuts * const [userUnprocessedDeletes, orderUnprocessedDeletes] = unprocessedDeletes * ``` */ declare class TableBatchWrite[]> implements TableCommand> { #private; constructor(config: TableBatchWriteConfig); execute(table: DynamoTable): Promise>; } export { TableBatchWrite }; export type { TableBatchWriteConfig, TableBatchWriteResult };