UNPKG

dynamodb-toolbox

Version:

Lightweight and type-safe query builder for DynamoDB and TypeScript.

33 lines (32 loc) 2.78 kB
import type { DynamoDBDocumentClient, TransactWriteCommandInput, TransactWriteCommandOutput } from '@aws-sdk/lib-dynamodb'; import type { CapacityOption } from '../../../options/capacity.js'; import type { ClientRequestToken } from '../../../options/clientRequestToken.js'; import type { MetricsOption } from '../../../options/metrics.js'; import type { DocumentClientOptions } from '../../../types/documentClientOptions.js'; import type { WriteTransactionImplementation } from './transaction.js'; export interface ExecuteTransactWriteOptions extends DocumentClientOptions { documentClient?: DynamoDBDocumentClient; capacity?: CapacityOption; metrics?: MetricsOption; clientRequestToken?: ClientRequestToken; } export type ExecuteTransactWriteInput = WriteTransactionImplementation[] | [ExecuteTransactWriteOptions, ...WriteTransactionImplementation[]]; type ExecuteTransactWrite = <TRANSACTIONS extends ExecuteTransactWriteInput>(...transactions: TRANSACTIONS) => Promise<ExecuteTransactWriteResponses<TRANSACTIONS>>; export type ExecuteTransactWriteResponses<TRANSACTIONS extends ExecuteTransactWriteInput> = TRANSACTIONS extends WriteTransactionImplementation[] ? ExecuteTransactWriteResponse<TRANSACTIONS> : TRANSACTIONS extends [ExecuteTransactWriteOptions, ...infer TRANSACTIONS_TAIL] ? TRANSACTIONS_TAIL extends WriteTransactionImplementation[] ? ExecuteTransactWriteResponse<TRANSACTIONS_TAIL> : never : never; type ExecuteTransactWriteResponse<TRANSACTIONS extends WriteTransactionImplementation[]> = TransactWriteCommandOutput & { ToolboxItems: ToolboxItems<TRANSACTIONS>; }; type ToolboxItems<TRANSACTIONS extends WriteTransactionImplementation[], TOOLBOX_ITEMS extends unknown[] = []> = TRANSACTIONS extends [infer TRANSACTIONS_HEAD, ...infer TRANSACTIONS_TAIL] ? TRANSACTIONS_HEAD extends WriteTransactionImplementation ? TRANSACTIONS_TAIL extends WriteTransactionImplementation[] ? ToolboxItems<TRANSACTIONS_TAIL, [...TOOLBOX_ITEMS, ToolboxItem<TRANSACTIONS_HEAD>]> : never : never : number extends TRANSACTIONS['length'] ? [ ...TOOLBOX_ITEMS, ...(TRANSACTIONS[number] extends infer TRANSACTION ? TRANSACTION extends WriteTransactionImplementation ? ToolboxItem<TRANSACTION> : never : never)[] ] : TOOLBOX_ITEMS extends [] ? unknown[] : TOOLBOX_ITEMS; type ToolboxItem<TRANSACTION extends WriteTransactionImplementation, PARAMS = ReturnType<TRANSACTION['params']>> = PARAMS extends { ToolboxItem: unknown; } ? PARAMS['ToolboxItem'] : undefined; export declare const execute: ExecuteTransactWrite; export declare const getCommandInput: (transactions: WriteTransactionImplementation[], options?: ExecuteTransactWriteOptions) => TransactWriteCommandInput & { TransactItems: { ToolboxItem?: unknown; }[]; }; export {};