UNPKG

dynamodb-toolbox

Version:

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

23 lines (22 loc) 2.13 kB
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']>; }