import { Schema, SchemaDefinition, IndexItem, TableIndex } from "../Schema"; import { Document as DocumentCarrier, DocumentSaveSettings, AnyDocument } from "../Document"; import { Serializer, SerializerOptions } from "../Serializer"; import { Condition, ConditionInitalizer } from "../Condition"; import { Scan, Query } from "../DocumentRetriever"; import { CallbackType, ObjectType, FunctionType, DocumentArray, ModelType, DeepPartial } from "../General"; import { DynamoDB, AWSError } from "aws-sdk"; import { GetTransactionInput, CreateTransactionInput, DeleteTransactionInput, UpdateTransactionInput, ConditionTransactionInput } from "../Transaction"; interface ModelWaitForActiveCheckSettings { timeout: number; frequency: number; } interface ModelWaitForActiveSettings { enabled: boolean; check: ModelWaitForActiveCheckSettings; } export interface ModelExpiresSettings { ttl: number; attribute: string; items?: { returnExpired: boolean; }; } declare enum ModelUpdateOptions { ttl = "ttl", indexes = "indexes", throughput = "throughput" } export interface ModelOptions { create: boolean; throughput: "ON_DEMAND" | number | { read: number; write: number; }; prefix: string; suffix: string; waitForActive: boolean | ModelWaitForActiveSettings; update: boolean | ModelUpdateOptions[]; populate: string | string[] | boolean; expires: number | ModelExpiresSettings; } export declare type ModelOptionsOptional = DeepPartial; declare type KeyObject = { [attribute: string]: string | number; }; declare type InputKey = string | number | KeyObject; declare type GetTransactionResult = Promise; declare type CreateTransactionResult = Promise; declare type DeleteTransactionResult = Promise; declare type UpdateTransactionResult = Promise; declare type ConditionTransactionResult = Promise; export interface GetTransaction { (key: InputKey): GetTransactionResult; (key: InputKey, settings?: ModelGetSettings): GetTransactionResult; (key: InputKey, settings: ModelGetSettings & { return: "document"; }): GetTransactionResult; (key: InputKey, settings: ModelGetSettings & { return: "request"; }): GetTransactionResult; } export interface CreateTransaction { (document: ObjectType): CreateTransactionResult; (document: ObjectType, settings: DocumentSaveSettings & { return: "request"; }): CreateTransactionResult; (document: ObjectType, settings: DocumentSaveSettings & { return: "document"; }): CreateTransactionResult; (document: ObjectType, settings?: DocumentSaveSettings): CreateTransactionResult; } export interface DeleteTransaction { (key: InputKey): DeleteTransactionResult; (key: InputKey, settings: ModelDeleteSettings & { return: "request"; }): DeleteTransactionResult; (key: InputKey, settings: ModelDeleteSettings & { return: null; }): DeleteTransactionResult; (key: InputKey, settings?: ModelDeleteSettings): DeleteTransactionResult; } export interface UpdateTransaction { (obj: ObjectType): CreateTransactionResult; (keyObj: ObjectType, updateObj: ObjectType): UpdateTransactionResult; (keyObj: ObjectType, updateObj: ObjectType, settings: ModelUpdateSettings & { "return": "document"; }): UpdateTransactionResult; (keyObj: ObjectType, updateObj: ObjectType, settings: ModelUpdateSettings & { "return": "request"; }): UpdateTransactionResult; (keyObj: ObjectType, updateObj?: ObjectType, settings?: ModelUpdateSettings): UpdateTransactionResult; } export interface ConditionTransaction { (key: InputKey, condition: Condition): ConditionTransactionResult; } declare type TransactionType = { get: GetTransaction; create: CreateTransaction; delete: DeleteTransaction; update: UpdateTransaction; condition: ConditionTransaction; }; interface ModelGetSettings { return?: "document" | "request"; attributes?: string[]; consistent?: boolean; } interface ModelDeleteSettings { return?: null | "request"; condition?: Condition; } interface ModelBatchPutSettings { return?: "response" | "request"; } interface ModelUpdateSettings { return?: "document" | "request"; condition?: Condition; returnValues?: DynamoDB.ReturnValue; } interface ModelBatchGetDocumentsResponse extends DocumentArray { unprocessedKeys: ObjectType[]; } interface ModelBatchGetSettings { return?: "documents" | "request"; attributes?: string[]; } interface ModelBatchDeleteSettings { return?: "response" | "request"; } export interface ModelIndexes { TableIndex?: TableIndex; GlobalSecondaryIndexes?: IndexItem[]; LocalSecondaryIndexes?: IndexItem[]; } export declare class Model { constructor(name: string, schema: Schema | SchemaDefinition | (Schema | SchemaDefinition)[], options: ModelOptionsOptional); name: string; originalName: string; options: ModelOptions; schemas: Schema[]; serializer: Serializer; private ready; alreadyCreated: boolean; private pendingTasks; latestTableDetails: DynamoDB.DescribeTableOutput; pendingTaskPromise: () => Promise; static defaults: ModelOptions; Document: typeof DocumentCarrier; scan: (object?: ConditionInitalizer) => Scan; query: (object?: ConditionInitalizer) => Query; methods: { document: { set: (name: string, fn: FunctionType) => void; delete: (name: string) => void; }; set: (name: string, fn: FunctionType) => void; delete: (name: string) => void; }; transaction: TransactionType; schemaForObject(object: ObjectType): Promise; getIndexes(): Promise; getCreateTableAttributeParams(): Promise>; getHashKey(): string; getRangeKey(): string | void; convertObjectToKey(key: InputKey): KeyObject; batchGet(keys: InputKey[]): Promise>; batchGet(keys: InputKey[], callback: CallbackType, AWSError>): void; batchGet(keys: InputKey[], settings: ModelBatchGetSettings & { "return": "request"; }): DynamoDB.BatchGetItemInput; batchGet(keys: InputKey[], settings: ModelBatchGetSettings & { "return": "request"; }, callback: CallbackType): void; batchGet(keys: InputKey[], settings: ModelBatchGetSettings): Promise>; batchGet(keys: InputKey[], settings: ModelBatchGetSettings, callback: CallbackType, AWSError>): void; batchGet(keys: InputKey[], settings: ModelBatchGetSettings & { "return": "documents"; }): Promise>; batchGet(keys: InputKey[], settings: ModelBatchGetSettings & { "return": "documents"; }, callback: CallbackType, AWSError>): void; batchPut(documents: ObjectType[]): Promise<{ "unprocessedItems": ObjectType[]; }>; batchPut(documents: ObjectType[], callback: CallbackType<{ "unprocessedItems": ObjectType[]; }, AWSError>): void; batchPut(documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "request"; }): Promise; batchPut(documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "request"; }, callback: CallbackType): void; batchPut(documents: ObjectType[], settings: ModelBatchPutSettings): Promise<{ "unprocessedItems": ObjectType[]; }>; batchPut(documents: ObjectType[], settings: ModelBatchPutSettings, callback: CallbackType<{ "unprocessedItems": ObjectType[]; }, AWSError>): void; batchPut(documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "response"; }): Promise<{ "unprocessedItems": ObjectType[]; }>; batchPut(documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "response"; }, callback: CallbackType<{ "unprocessedItems": ObjectType[]; }, AWSError>): void; batchDelete(keys: InputKey[]): Promise<{ unprocessedItems: ObjectType[]; }>; batchDelete(keys: InputKey[], callback: CallbackType<{ unprocessedItems: ObjectType[]; }, AWSError>): void; batchDelete(keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "request"; }): DynamoDB.BatchWriteItemInput; batchDelete(keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "request"; }, callback: CallbackType): void; batchDelete(keys: InputKey[], settings: ModelBatchDeleteSettings): Promise<{ unprocessedItems: ObjectType[]; }>; batchDelete(keys: InputKey[], settings: ModelBatchDeleteSettings, callback: CallbackType<{ unprocessedItems: ObjectType[]; }, AWSError>): Promise<{ unprocessedItems: ObjectType[]; }>; batchDelete(keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "response"; }): Promise<{ unprocessedItems: ObjectType[]; }>; batchDelete(keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "response"; }, callback: CallbackType<{ unprocessedItems: ObjectType[]; }, AWSError>): Promise<{ unprocessedItems: ObjectType[]; }>; update(obj: Partial): Promise; update(obj: Partial, callback: CallbackType): void; update(keyObj: InputKey, updateObj: Partial): Promise; update(keyObj: InputKey, updateObj: Partial, callback: CallbackType): void; update(keyObj: InputKey, updateObj: Partial, settings: ModelUpdateSettings & { "return": "request"; }): Promise; update(keyObj: InputKey, updateObj: Partial, settings: ModelUpdateSettings & { "return": "request"; }, callback: CallbackType): void; update(keyObj: InputKey, updateObj: Partial, settings: ModelUpdateSettings): Promise; update(keyObj: InputKey, updateObj: Partial, settings: ModelUpdateSettings, callback: CallbackType): void; update(keyObj: InputKey, updateObj: Partial, settings: ModelUpdateSettings & { "return": "document"; }): Promise; update(keyObj: InputKey, updateObj: Partial, settings: ModelUpdateSettings & { "return": "document"; }, callback: CallbackType): void; update(keyObj: ObjectType, updateObj: Partial): Promise; update(keyObj: ObjectType, updateObj: Partial, callback: CallbackType): void; update(keyObj: ObjectType, updateObj: Partial, settings: ModelUpdateSettings & { "return": "request"; }): Promise; update(keyObj: ObjectType, updateObj: Partial, settings: ModelUpdateSettings & { "return": "request"; }, callback: CallbackType): void; update(keyObj: ObjectType, updateObj: Partial, settings: ModelUpdateSettings): Promise; update(keyObj: ObjectType, updateObj: Partial, settings: ModelUpdateSettings, callback: CallbackType): void; update(keyObj: ObjectType, updateObj: Partial, settings: ModelUpdateSettings & { "return": "document"; }): Promise; update(keyObj: ObjectType, updateObj: Partial, settings: ModelUpdateSettings & { "return": "document"; }, callback: CallbackType): void; create(document: Partial): Promise; create(document: Partial, callback: CallbackType): void; create(document: Partial, settings: DocumentSaveSettings & { return: "request"; }): Promise; create(document: Partial, settings: DocumentSaveSettings & { return: "request"; }, callback: CallbackType): void; create(document: Partial, settings: DocumentSaveSettings): Promise; create(document: Partial, settings: DocumentSaveSettings, callback: CallbackType): void; create(document: Partial, settings: DocumentSaveSettings & { return: "document"; }): Promise; create(document: Partial, settings: DocumentSaveSettings & { return: "document"; }, callback: CallbackType): void; delete(key: InputKey): Promise; delete(key: InputKey, callback: CallbackType): void; delete(key: InputKey, settings: ModelDeleteSettings & { return: "request"; }): DynamoDB.DeleteItemInput; delete(key: InputKey, settings: ModelDeleteSettings & { return: "request"; }, callback: CallbackType): void; delete(key: InputKey, settings: ModelDeleteSettings): Promise; delete(key: InputKey, settings: ModelDeleteSettings, callback: CallbackType): void; delete(key: InputKey, settings: ModelDeleteSettings & { return: null; }): Promise; delete(key: InputKey, settings: ModelDeleteSettings & { return: null; }, callback: CallbackType): void; get(key: InputKey): Promise; get(key: InputKey, callback: CallbackType): void; get(key: InputKey, settings: ModelGetSettings & { return: "request"; }): DynamoDB.GetItemInput; get(key: InputKey, settings: ModelGetSettings & { return: "request"; }, callback: CallbackType): void; get(key: InputKey, settings: ModelGetSettings): Promise; get(key: InputKey, settings: ModelGetSettings, callback: CallbackType): void; get(key: InputKey, settings: ModelGetSettings & { return: "document"; }): Promise; get(key: InputKey, settings: ModelGetSettings & { return: "document"; }, callback: CallbackType): void; serializeMany(documentsArray: ModelType[], nameOrOptions: SerializerOptions | string): any; } export {};