dynamoose
Version:
Dynamoose is a modeling tool for Amazon's DynamoDB (inspired by Mongoose)
220 lines (219 loc) • 10.6 kB
TypeScript
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 {};