import * as DynamoDB from '@aws-sdk/client-dynamodb'; import { Condition, ConditionFunction, ConditionInitializer } from 'dynamoose/dist/Condition'; import { SortOrder } from 'dynamoose/dist/General'; import { PopulateSettings } from 'dynamoose/dist/Populate'; type OptionalOmit = Pick> & Partial>>; export declare type ObjectType = { [key: string]: any; }; export declare type CallbackType = (error?: E | null, response?: R) => void; export interface ItemArray extends Array { populate(): Promise>; toJSON(): ObjectType; } export interface ItemRetrieverResponse extends Array { lastKey?: ObjectType; count: number; } export interface ScanResponse extends ItemRetrieverResponse { scannedCount: number; timesScanned: number; } export interface QueryResponse extends ItemRetrieverResponse { queriedCount: number; timesQueried: number; } export interface UnprocessedItems { unprocessedItems: T[]; } export interface ModelGetSettings { return?: 'item' | 'request'; attributes?: string[]; consistent?: boolean; } export interface ModelDeleteSettings { return?: null | 'request'; condition?: Condition; } export interface ModelBatchPutSettings { return?: 'response' | 'request'; } export interface ModelUpdateSettings { return?: 'item' | 'request'; condition?: Condition; returnValues?: DynamoDB.ReturnValue; } export interface ModelBatchGetItemsResponse extends ItemArray { unprocessedKeys: ObjectType[]; } export interface ModelBatchGetSettings { return?: 'items' | 'request'; attributes?: string[]; consistent?: boolean; } export interface ModelBatchDeleteSettings { return?: 'response' | 'request'; } export interface ItemSaveSettings { overwrite?: boolean; return?: 'request' | 'item'; } export type UpdatePartial = Partial | { $SET: Partial; } | { $ADD: Partial; } | { $REMOVE: Partial; } | { $DELETE: Partial; }; export interface SerializerOptions { include?: string[]; exclude?: string[]; modify?: (serialized: ObjectType, original: ObjectType) => ObjectType; } export type Item = { populate(): Promise>; populate(callback: CallbackType, any>): void; populate(settings: PopulateSettings): Promise>; populate(settings: PopulateSettings, callback: CallbackType, any>): void; serialize(nameOrOptions: SerializerOptions | string): ObjectType; toJSON(): ObjectType; original(): ObjectType; } & T; export interface Model { query(condition?: ConditionInitializer): Query, Key>; scan(condition?: ConditionInitializer): Scan, Key>; batchGet(keys: Key[]): Promise>>; batchGet(keys: Key[], callback: CallbackType>, any>): void; batchGet(keys: Key[], settings: ModelBatchGetSettings & { return: 'items'; }): Promise>>; batchGet(keys: Key[], settings: ModelBatchGetSettings & { return: 'items'; }, callback: CallbackType>, any>): void; batchGet(keys: Key[], settings: ModelBatchGetSettings & { return: 'request'; }): DynamoDB.BatchGetItemInput; batchGet(keys: Key[], settings: ModelBatchGetSettings & { return: 'request'; }, callback: CallbackType): void; batchPut(items: OptionalOmit[]): Promise>>; batchPut(items: OptionalOmit[], callback: CallbackType>, any>): void; batchPut(items: OptionalOmit[], settings: ModelBatchPutSettings & { return: 'request'; }): Promise; batchPut(items: OptionalOmit[], settings: ModelBatchPutSettings & { return: 'request'; }, callback: CallbackType): void; batchPut(items: OptionalOmit[], settings: ModelBatchPutSettings & { return: 'response'; }): Promise>>; batchPut(items: OptionalOmit[], settings: ModelBatchPutSettings & { return: 'response'; }, callback: CallbackType>, any>): void; batchDelete(keys: Key[]): Promise>; batchDelete(keys: Key[], callback: CallbackType, any>): void; batchDelete(keys: Key[], settings: ModelBatchDeleteSettings & { return: 'response'; }): Promise>; batchDelete(keys: Key[], settings: ModelBatchDeleteSettings & { return: 'response'; }, callback: CallbackType, any>): Promise>; batchDelete(keys: Key[], settings: ModelBatchDeleteSettings & { return: 'request'; }): DynamoDB.BatchWriteItemInput; batchDelete(keys: Key[], settings: ModelBatchDeleteSettings & { return: 'request'; }, callback: CallbackType): void; update(obj: Data): Promise>; update(obj: Data, callback: CallbackType, any>): void; update(keyObj: Key, updateObj: UpdatePartial): Promise>; update(keyObj: Key, updateObj: UpdatePartial, callback: CallbackType, any>): void; update(keyObj: Key, updateObj: UpdatePartial, settings: ModelUpdateSettings & { return: 'item'; }): Promise>; update(keyObj: Key, updateObj: UpdatePartial, settings: ModelUpdateSettings & { return: 'item'; }, callback: CallbackType, any>): void; update(keyObj: Key, updateObj: UpdatePartial, settings: ModelUpdateSettings & { return: 'request'; }): Promise; update(keyObj: Key, updateObj: UpdatePartial, settings: ModelUpdateSettings & { return: 'request'; }, callback: CallbackType): void; create(item: OptionalOmit): Promise>; create(item: OptionalOmit, callback: CallbackType, any>): void; create(item: OptionalOmit, settings: ItemSaveSettings & { return: 'request'; }): Promise; create(item: OptionalOmit, settings: ItemSaveSettings & { return: 'request'; }, callback: CallbackType): void; create(item: OptionalOmit, settings: ItemSaveSettings & { return: 'item'; }): Promise>; create(item: OptionalOmit, settings: ItemSaveSettings & { return: 'item'; }, callback: CallbackType, any>): void; delete(key: Key): Promise; delete(key: Key, callback: CallbackType): void; delete(key: Key, settings: ModelDeleteSettings & { return: 'request'; }): DynamoDB.DeleteItemInput; delete(key: Key, settings: ModelDeleteSettings & { return: 'request'; }, callback: CallbackType): void; delete(key: Key, settings: ModelDeleteSettings & { return: null; }): Promise; delete(key: Key, settings: ModelDeleteSettings & { return: null; }, callback: CallbackType): void; get(key: Key): Promise>; get(key: Key, callback: CallbackType, any>): void; get(key: Key, settings: ModelGetSettings & { return: 'item'; }): Promise>; get(key: Key, settings: ModelGetSettings & { return: 'item'; }, callback: CallbackType, any>): void; get(key: Key, settings: ModelGetSettings & { return: 'request'; }): DynamoDB.GetItemInput; get(key: Key, settings: ModelGetSettings & { return: 'request'; }, callback: CallbackType): void; transaction: TransactionType; serializeMany(itemsArray: Data[], nameOrOptions: SerializerOptions | string): ObjectType[]; } export interface BasicOperators { getRequest(): Promise; all(delay?: number, max?: number): T; limit(value: number): T; startAt(value: ObjectType): T; attributes(value: string[]): T; count(): T; consistent(): T; using(value: string): T; and(): T; or(): T; not(): T; parenthesis(value: Condition | ConditionFunction): T; group(value: Condition | ConditionFunction): T; where(key: string): T; filter(key: string): T; attribute(key: string): T; eq(value: any): T; lt(value: any): T; le(value: any): T; gt(value: any): T; ge(value: any): T; beginsWith(value: any): T; contains(value: any): T; exists(): T; in(value: any): T; between(...values: any[]): T; } export interface Query extends BasicOperators> { exec(): Promise>; exec(callback: CallbackType, any>): void; sort(order: SortOrder): Query; } export interface Scan extends BasicOperators> { exec(): Promise>; exec(callback: CallbackType, any>): void; parallel(value: number): Scan; } export type GetTransactionInput = { Get: DynamoDB.GetItemInput; }; export type CreateTransactionInput = { Put: DynamoDB.PutItemInput; }; export type DeleteTransactionInput = { Delete: DynamoDB.DeleteItemInput; }; export type UpdateTransactionInput = { Update: DynamoDB.UpdateItemInput; }; export type ConditionTransactionInput = { ConditionCheck: DynamoDB.ConditionCheck; }; export type GetTransactionResult = Promise; export type CreateTransactionResult = Promise; export type DeleteTransactionResult = Promise; export type UpdateTransactionResult = Promise; export type ConditionTransactionResult = Promise; export interface GetTransaction { (key: Key): GetTransactionResult; (key: Key, settings?: ModelGetSettings): GetTransactionResult; (key: Key, settings: ModelGetSettings & { return: 'item'; }): GetTransactionResult; (key: Key, settings: ModelGetSettings & { return: 'request'; }): GetTransactionResult; } export interface CreateTransaction { (item: Partial): CreateTransactionResult; (item: Partial, settings: ItemSaveSettings & { return: 'request'; }): CreateTransactionResult; (item: Partial, settings: ItemSaveSettings & { return: 'item'; }): CreateTransactionResult; (item: Partial, settings?: ItemSaveSettings): CreateTransactionResult; } export interface DeleteTransaction { (key: Key): DeleteTransactionResult; (key: Key, settings: ModelDeleteSettings & { return: 'request'; }): DeleteTransactionResult; (key: Key, settings: ModelDeleteSettings & { return: null; }): DeleteTransactionResult; (key: Key, settings?: ModelDeleteSettings): DeleteTransactionResult; } export interface UpdateTransaction { (obj: Data): UpdateTransactionResult; (keyObj: Key, updateObj: UpdatePartial): UpdateTransactionResult; (keyObj: Key, updateObj: UpdatePartial, settings: ModelUpdateSettings & { return: 'item'; }): UpdateTransactionResult; (keyObj: Key, updateObj: UpdatePartial, settings: ModelUpdateSettings & { return: 'request'; }): UpdateTransactionResult; (keyObj: Key, updateObj?: UpdatePartial, settings?: ModelUpdateSettings): UpdateTransactionResult; } export interface ConditionTransaction { (key: Key, condition: Condition): ConditionTransactionResult; } type TransactionType = { get: GetTransaction; create: CreateTransaction; delete: DeleteTransaction; update: UpdateTransaction; condition: ConditionTransaction; }; export {};