dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
23 lines (22 loc) • 2.13 kB
TypeScript
import type { BatchWriteCommandInput } from '@aws-sdk/lib-dynamodb';
import type { BatchDeleteRequest } from '../../../entity/actions/batchDelete/index.js';
import type { BatchPutRequest } from '../../../entity/actions/batchPut/index.js';
import type { Entity } from '../../../entity/index.js';
import { TableAction } from '../../../table/index.js';
import type { Table } from '../../../table/index.js';
import type { ListOf } from '../../../types/listOf.js';
import { $options, $requests } from './constants.js';
export type IBatchWriteRequest = Pick<BatchPutRequest | BatchDeleteRequest, 'entity' | 'params'>;
export interface BatchWriteCommandOptions {
tableName?: string;
}
export type RequestEntities<REQUESTS extends IBatchWriteRequest[], RESULTS extends Entity[] = []> = number extends REQUESTS['length'] ? ListOf<REQUESTS[number]> extends IBatchWriteRequest[] ? RequestEntities<ListOf<REQUESTS[number]>> : never : REQUESTS extends [infer REQUESTS_HEAD, ...infer REQUESTS_TAIL] ? REQUESTS_HEAD extends IBatchWriteRequest ? REQUESTS_TAIL extends IBatchWriteRequest[] ? REQUESTS_HEAD['entity']['entityName'] extends RESULTS[number]['entityName'] ? RequestEntities<REQUESTS_TAIL, RESULTS> : RequestEntities<REQUESTS_TAIL, [...RESULTS, REQUESTS_HEAD['entity']]> : never : never : RESULTS;
export declare class BatchWriteCommand<TABLE extends Table = Table, ENTITIES extends Entity[] = Entity[], REQUESTS extends IBatchWriteRequest[] = IBatchWriteRequest[]> extends TableAction<TABLE, ENTITIES> {
static actionName: "batchWrite";
[$requests]?: REQUESTS;
[$options]: BatchWriteCommandOptions;
constructor(table: TABLE, entities?: ENTITIES, requests?: REQUESTS, options?: BatchWriteCommandOptions);
requests<NEXT_REQUESTS extends IBatchWriteRequest[]>(...requests: NEXT_REQUESTS): BatchWriteCommand<TABLE, RequestEntities<NEXT_REQUESTS>, NEXT_REQUESTS>;
options(nextOptions: BatchWriteCommandOptions | ((prevOptions: BatchWriteCommandOptions) => BatchWriteCommandOptions)): BatchWriteCommand<TABLE, ENTITIES, REQUESTS>;
params(): NonNullable<NonNullable<BatchWriteCommandInput>['RequestItems']>;
}