UNPKG

dynamoose

Version:

Dynamoose is a modeling tool for Amazon's DynamoDB (inspired by Mongoose)

220 lines (219 loc) 10.6 kB
import { Schema, SchemaDefinition, IndexItem } from "../Schema"; import { Document as DocumentCarrier, DocumentSaveSettings } from "../Document"; import { Serializer, SerializerOptions } from "../Serializer"; import { Condition, ConditionInitalizer } from "../Condition"; import { Scan, Query } from "../DocumentRetriever"; import { CallbackType, ObjectType, FunctionType, DocumentArray, ModelType } from "../General"; import { DynamoDB, AWSError } from "aws-sdk"; interface ModelWaitForActiveSettings { enabled: boolean; check: { timeout: number; frequency: number; }; } 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: ModelWaitForActiveSettings; update: boolean | ModelUpdateOptions[]; populate: string | string[] | boolean; expires?: number | ModelExpiresSettings; } export declare type ModelOptionsOptional = Partial<ModelOptions>; declare type KeyObject = { [attribute: string]: string; }; declare type InputKey = string | KeyObject; interface ModelGetSettings { return: "document" | "request"; attributes?: string[]; } interface ModelDeleteSettings { return: null | "request"; } interface ModelBatchPutSettings { return: "response" | "request"; } interface ModelUpdateSettings { return: "document" | "request"; condition?: Condition; } interface ModelBatchGetDocumentsResponse<T> extends DocumentArray<T> { unprocessedKeys: ObjectType[]; } interface ModelBatchGetSettings { return: "documents" | "request"; } interface ModelBatchDeleteSettings { return: "response" | "request"; } export declare class Model<T extends DocumentCarrier> { constructor(name: string, schema: Schema | SchemaDefinition | (Schema | SchemaDefinition)[], options: ModelOptionsOptional); name: string; options: ModelOptions; schemas: Schema[]; serializer: Serializer; private ready; alreadyCreated: boolean; private pendingTasks; latestTableDetails: DynamoDB.DescribeTableOutput; pendingTaskPromise: () => Promise<void>; static defaults: ModelOptions; Document: typeof DocumentCarrier; scan: (this: Model<DocumentCarrier>, object?: ConditionInitalizer) => Scan; query: (this: Model<DocumentCarrier>, 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; }; schemaForObject(object: ObjectType): Promise<Schema>; getIndexes(): Promise<{ GlobalSecondaryIndexes?: IndexItem[]; LocalSecondaryIndexes?: IndexItem[]; }>; getCreateTableAttributeParams(): Promise<Pick<DynamoDB.CreateTableInput, "AttributeDefinitions" | "KeySchema" | "GlobalSecondaryIndexes" | "LocalSecondaryIndexes">>; getHashKey(): string; getRangeKey(): string | void; batchGet(this: Model<DocumentCarrier>, keys: InputKey[]): Promise<ModelBatchGetDocumentsResponse<DocumentCarrier>>; batchGet(this: Model<DocumentCarrier>, keys: InputKey[], callback: CallbackType<ModelBatchGetDocumentsResponse<DocumentCarrier>, AWSError>): void; batchGet(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchGetSettings & { "return": "documents"; }): Promise<ModelBatchGetDocumentsResponse<DocumentCarrier>>; batchGet(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchGetSettings & { "return": "documents"; }, callback: CallbackType<ModelBatchGetDocumentsResponse<DocumentCarrier>, AWSError>): void; batchGet(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchGetSettings & { "return": "request"; }): DynamoDB.BatchGetItemInput; batchGet(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchGetSettings & { "return": "request"; }, callback: CallbackType<DynamoDB.BatchGetItemInput, AWSError>): void; batchPut(this: Model<DocumentCarrier>, documents: ObjectType[]): Promise<{ "unprocessedItems": ObjectType[]; }>; batchPut(this: Model<DocumentCarrier>, documents: ObjectType[], callback: CallbackType<{ "unprocessedItems": ObjectType[]; }, AWSError>): void; batchPut(this: Model<DocumentCarrier>, documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "request"; }): Promise<DynamoDB.BatchWriteItemInput>; batchPut(this: Model<DocumentCarrier>, documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "request"; }, callback: CallbackType<DynamoDB.BatchWriteItemInput, AWSError>): void; batchPut(this: Model<DocumentCarrier>, documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "response"; }): Promise<{ "unprocessedItems": ObjectType[]; }>; batchPut(this: Model<DocumentCarrier>, documents: ObjectType[], settings: ModelBatchPutSettings & { "return": "response"; }, callback: CallbackType<{ "unprocessedItems": ObjectType[]; }, AWSError>): void; batchDelete(this: Model<DocumentCarrier>, keys: InputKey[]): Promise<{ unprocessedItems: ObjectType[]; }>; batchDelete(this: Model<DocumentCarrier>, keys: InputKey[], callback: CallbackType<{ unprocessedItems: ObjectType[]; }, AWSError>): void; batchDelete(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "response"; }): Promise<{ unprocessedItems: ObjectType[]; }>; batchDelete(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "response"; }, callback: CallbackType<{ unprocessedItems: ObjectType[]; }, AWSError>): Promise<{ unprocessedItems: ObjectType[]; }>; batchDelete(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "request"; }): DynamoDB.BatchWriteItemInput; batchDelete(this: Model<DocumentCarrier>, keys: InputKey[], settings: ModelBatchDeleteSettings & { "return": "request"; }, callback: CallbackType<DynamoDB.BatchWriteItemInput, AWSError>): void; update(this: Model<DocumentCarrier>, obj: ObjectType): Promise<DocumentCarrier>; update(this: Model<DocumentCarrier>, obj: ObjectType, callback: CallbackType<DocumentCarrier, AWSError>): void; update(this: Model<DocumentCarrier>, keyObj: ObjectType, updateObj: ObjectType): Promise<DocumentCarrier>; update(this: Model<DocumentCarrier>, keyObj: ObjectType, updateObj: ObjectType, callback: CallbackType<DocumentCarrier, AWSError>): void; update(this: Model<DocumentCarrier>, keyObj: ObjectType, updateObj: ObjectType, settings: ModelUpdateSettings & { "return": "document"; }): Promise<DocumentCarrier>; update(this: Model<DocumentCarrier>, keyObj: ObjectType, updateObj: ObjectType, settings: ModelUpdateSettings & { "return": "document"; }, callback: CallbackType<DocumentCarrier, AWSError>): void; update(this: Model<DocumentCarrier>, keyObj: ObjectType, updateObj: ObjectType, settings: ModelUpdateSettings & { "return": "request"; }): Promise<DynamoDB.UpdateItemInput>; update(this: Model<DocumentCarrier>, keyObj: ObjectType, updateObj: ObjectType, settings: ModelUpdateSettings & { "return": "request"; }, callback: CallbackType<DynamoDB.UpdateItemInput, AWSError>): void; create(this: Model<DocumentCarrier>, document: ObjectType): Promise<DocumentCarrier>; create(this: Model<DocumentCarrier>, document: ObjectType, callback: CallbackType<DocumentCarrier, AWSError>): void; create(this: Model<DocumentCarrier>, document: ObjectType, settings: DocumentSaveSettings & { return: "request"; }): Promise<DynamoDB.PutItemInput>; create(this: Model<DocumentCarrier>, document: ObjectType, settings: DocumentSaveSettings & { return: "request"; }, callback: CallbackType<DynamoDB.PutItemInput, AWSError>): void; create(this: Model<DocumentCarrier>, document: ObjectType, settings: DocumentSaveSettings & { return: "document"; }): Promise<DocumentCarrier>; create(this: Model<DocumentCarrier>, document: ObjectType, settings: DocumentSaveSettings & { return: "document"; }, callback: CallbackType<DocumentCarrier, AWSError>): void; delete(this: Model<DocumentCarrier>, key: InputKey): Promise<void>; delete(this: Model<DocumentCarrier>, key: InputKey, callback: CallbackType<void, AWSError>): void; delete(this: Model<DocumentCarrier>, key: InputKey, settings: ModelDeleteSettings & { return: "request"; }): DynamoDB.DeleteItemInput; delete(this: Model<DocumentCarrier>, key: InputKey, settings: ModelDeleteSettings & { return: "request"; }, callback: CallbackType<DynamoDB.DeleteItemInput, AWSError>): void; delete(this: Model<DocumentCarrier>, key: InputKey, settings: ModelDeleteSettings & { return: null; }): Promise<void>; delete(this: Model<DocumentCarrier>, key: InputKey, settings: ModelDeleteSettings & { return: null; }, callback: CallbackType<void, AWSError>): void; get(this: Model<DocumentCarrier>, key: InputKey): Promise<DocumentCarrier>; get(this: Model<DocumentCarrier>, key: InputKey, callback: CallbackType<DocumentCarrier, AWSError>): void; get(this: Model<DocumentCarrier>, key: InputKey, settings: ModelGetSettings & { return: "document"; }): Promise<DocumentCarrier>; get(this: Model<DocumentCarrier>, key: InputKey, settings: ModelGetSettings & { return: "document"; }, callback: CallbackType<DocumentCarrier, AWSError>): void; get(this: Model<DocumentCarrier>, key: InputKey, settings: ModelGetSettings & { return: "request"; }): DynamoDB.GetItemInput; get(this: Model<DocumentCarrier>, key: InputKey, settings: ModelGetSettings & { return: "request"; }, callback: CallbackType<DynamoDB.GetItemInput, AWSError>): void; serializeMany(documentsArray: ModelType<DocumentCarrier>[], nameOrOptions: SerializerOptions | string): any; } export {};