// Type definitions for Mongoose 3.8.5
// Project: http://mongoosejs.com/
// Definitions by: horiuchi
// Definitions: https://github.com/borisyankov/DefinitelyTyped
///
declare module "mongoose" {
function connect(uri: string, options?: ConnectionOptions , callback?: (err: any) => void): Mongoose;
function createConnection(): Connection;
function createConnection(uri: string, options?: ConnectionOptions): Connection;
function createConnection(host: string, database_name: string, port?: number, options?: ConnectionOptions): Connection;
function disconnect(callback?: (err?: any) => void): Mongoose;
function model(name: string, schema?: Schema, collection?: string, skipInit?: boolean): Model;
function modelNames(): string[];
function plugin(plugin: (schema: Schema, options?: Object) => void, options?: Object): Mongoose;
function get(key: string): any;
function set(key: string, value: any): void;
var mongo: any;
var mquery: any;
var version: string;
var connection: Connection;
export class Mongoose {
connect(uri: string, options?: ConnectOpenOptionsBase, callback?: (err: any) => void): Mongoose;
createConnection(): Connection;
createConnection(uri: string, options?: Object): Connection;
createConnection(host: string, database_name: string, port?: number, options?: ConnectOpenOptionsBase): Connection;
disconnect(callback?: (err?: any) => void): Mongoose;
get(key: string): any;
model(name: string, schema?: Schema, collection?: string, skipInit?: boolean): Model;
modelNames(): string[];
plugin(plugin: (schema: Schema, options?: Object) => void, options?: Object): Mongoose;
set(key: string, value: any): void;
mongo: any;
mquery: any;
version: string;
connection: Connection;
}
export interface Connection extends NodeJS.EventEmitter {
constructor(base: Mongoose): Connection;
close(callback?: (err: any) => void): Connection;
collection(name: string, options?: Object): Collection;
model(name: string, schema?: Schema, collection?: string): Model;
modelNames(): string[];
open(host: string, database?: string, port?: number, options?: OpenSetConnectionOptions, callback?: (err: any) => void): Connection;
openSet(uris: string, database?: string, options?: OpenSetConnectionOptions, callback?: (err: any) => void): Connection;
db: any;
collections: {[index: string]: Collection};
readyState: number;
}
export interface ConnectOpenOptionsBase {
db?: any;
server?: any;
replset?: any;
/** Username for authentication if not supplied in the URI. */
user?: string;
/** Password for authentication if not supplied in the URI. */
pass?: string;
/** Options for authentication */
auth?: any;
}
export interface ConnectionOptions extends ConnectOpenOptionsBase {
/** Passed to the underlying driver's Mongos instance. */
mongos?: MongosOptions;
}
interface OpenSetConnectionOptions extends ConnectOpenOptionsBase {
/** If true, enables High Availability support for mongos */
mongos?: boolean;
}
interface MongosOptions {
/** Turn on high availability monitoring. (default: true) */
ha?: boolean;
/** Time between each replicaset status check. (default: 5000) */
haInterval?: number;
/**
* Number of connections in the connection pool for each
* server instance. (default: 5 (for legacy reasons)) */
poolSize?: number;
/**
* Use ssl connection (needs to have a mongod server with
* ssl support). (default: false).
*/
ssl?: boolean;
/**
* Validate mongod server certificate against ca
* (needs to have a mongod server with ssl support, 2.4 or higher)
* (default: true)
*/
sslValidate?: boolean;
/** Turn on high availability monitoring. */
sslCA?: (Buffer|string)[];
sslKey?: Buffer|string;
sslPass?: Buffer|string;
socketOptions?: {
noDelay?: boolean;
keepAlive?: number;
connectionTimeoutMS?: number;
socketTimeoutMS?: number;
};
}
export interface Collection {
}
export class SchemaType { }
export class VirtualType {
get(fn: Function): VirtualType;
set(fn: Function): VirtualType;
}
export module Types {
export class ObjectId {
constructor(id?: string|number);
toHexString(): string;
equals(other: ObjectId): boolean;
getTimestamp(): Date;
isValid(): boolean;
static createFromTime(time: number): ObjectId;
static createFromHexString(hexString: string): ObjectId;
}
}
export class Schema {
static Types: {
String: String;
ObjectId: Types.ObjectId;
OId: Types.ObjectId;
Mixed: any;
};
constructor(schema?: Object, options?: Object);
add(obj: Object, prefix?: string): void;
eachPath(fn: (path: string, type: any) => void): Schema;
get(key: string): any;
index(fields: Object, options?: Object): Schema;
indexes(): void;
method(name: string, fn: Function): Schema;
method(method: Object): Schema;
path(path: string): any;
path(path: string, constructor: any): Schema;
pathType(path: string): string;
plugin(plugin: (schema: Schema, options?: Object) => void, options?: Object): Schema;
post(method: string, fn: Function): Schema;
pre(method: string, callback: Function): Schema;
requiredPaths(): string[];
set(key: string, value: any): void;
static(name: string, fn: Function): Schema;
virtual(name: string, options?: Object): VirtualType;
virtualpath(name: string): VirtualType;
}
export interface SchemaOption {
autoIndex?: boolean;
bufferCommands?: boolean;
capped?: boolean;
collection?: string;
id?: boolean;
_id?: boolean;
minimize?: boolean;
read?: string;
safe?: boolean;
shardKey?: boolean;
strict?: boolean;
toJSON?: Object;
toObject?: Object;
versionKey?: boolean;
}
export interface Model extends NodeJS.EventEmitter {
new(doc?: Object): T;
aggregate(...aggregations: Object[]): Aggregate;
aggregate(aggregation: Object, callback: (err: any, res: T[]) => void): Promise;
aggregate(aggregation1: Object, aggregation2: Object, callback: (err: any, res: T[]) => void): Promise;
aggregate(aggregation1: Object, aggregation2: Object, aggregation3: Object, callback: (err: any, res: T[]) => void): Promise;
count(conditions: Object, callback?: (err: any, count: number) => void): Query;
create(doc: Object, fn?: (err: any, res: T) => void): Promise;
create(doc1: Object, doc2: Object, fn?: (err: any, res1: T, res2: T) => void): Promise;
create(doc1: Object, doc2: Object, doc3: Object, fn?: (err: any, res1: T, res2: T, res3: T) => void): Promise;
discriminator(name: string, schema: Schema): Model;
distinct(field: string, callback?: (err: any, res: T[]) => void): Query;
distinct(field: string, conditions: Object, callback?: (err: any, res: T[]) => void): Query;
ensureIndexes(callback: (err: any) => void): Promise;
find(cond: Object, callback?: (err: any, res: T[]) => void): Query;
find(cond: Object, fields: Object, callback?: (err: any, res: T[]) => void): Query;
find(cond: Object, fields: Object, options: Object, callback?: (err: any, res: T[]) => void): Query;
findById(id: string, callback?: (err: any, res: T) => void): Query;
findById(id: string, fields: Object, callback?: (err: any, res: T) => void): Query;
findById(id: string, fields: Object, options: Object, callback?: (err: any, res: T) => void): Query;
findByIdAndRemove(id: string, callback?: (err: any, res: T) => void): Query;
findByIdAndRemove(id: string, options: Object, callback?: (err: any, res: T) => void): Query;
findByIdAndUpdate(id: string, update: Object, callback?: (err: any, res: T) => void): Query;
findByIdAndUpdate(id: string, update: Object, options: FindAndUpdateOption, callback?: (err: any, res: T) => void): Query;
findOne(cond?: Object, callback?: (err: any, res: T) => void): Query;
findOne(cond: Object, fields: Object, callback?: (err: any, res: T) => void): Query;
findOne(cond: Object, fields: Object, options: Object, callback?: (err: any, res: T) => void): Query;
findOneAndRemove(cond: Object, callback?: (err: any, res: T) => void): Query;
findOneAndRemove(cond: Object, options: Object, callback?: (err: any, res: T) => void): Query;
findOneAndUpdate(cond: Object, update: Object, callback?: (err: any, res: T) => void): Query;
findOneAndUpdate(cond: Object, update: Object, options: FindAndUpdateOption, callback?: (err: any, res: T) => void): Query;
geoNear(point: { type: string; coordinates: number[] }, options: Object, callback?: (err: any, res: T[], stats: any) => void): Query;
geoNear(point: number[], options: Object, callback?: (err: any, res: T[], stats: any) => void): Query;
geoSearch(cond: Object, options: GeoSearchOption, callback?: (err: any, res: T[]) => void): Query;
increment(): T;
mapReduce(options: MapReduceOption, callback?: (err: any, res: MapReduceResult[]) => void): Promise[]>;
mapReduce(options: MapReduceOption2, callback?: (err: any, res: MapReduceResult[]) => void): Promise[]>;
model(name: string): Model;
populate(doc: U, options: Object, callback?: (err: any, res: U) => void): Promise;
populate(doc: U[], options: Object, callback?: (err: any, res: U[]) => void): Promise;
update(cond: Object, update: Object, callback?: (err: any, affectedRows: number, raw: any) => void): Query;
update(cond: Object, update: Object, options: Object, callback?: (err: any, affectedRows: number, raw: any) => void): Query;
remove(cond: Object, callback?: (err: any) => void): Query<{}>;
save(callback?: (err: any, result: T, numberAffected: number) => void): Query;
where(path: string, val?: Object): Query;
$where(argument: string): Query;
$where(argument: Function): Query;
base: Mongoose;
collection: Collection;
db: any;
discriminators: any;
modelName: string;
schema: Schema;
}
export interface FindAndUpdateOption {
new?: boolean;
upsert?: boolean;
sort?: Object;
select?: Object;
}
export interface GeoSearchOption {
near: number[];
maxDistance: number;
limit?: number;
lean?: boolean;
}
export interface MapReduceOption {
map: () => void;
reduce: (key: Key, vals: T[]) => Val;
query?: Object;
limit?: number;
keeptemp?: boolean;
finalize?: (key: Key, val: Val) => Val;
scope?: Object;
jsMode?: boolean;
verbose?: boolean;
out?: {
inline?: number;
replace?: string;
reduce?: string;
merge?: string;
};
}
export interface MapReduceOption2 {
map: string;
reduce: (key: Key, vals: T[]) => Val;
query?: Object;
limit?: number;
keeptemp?: boolean;
finalize?: (key: Key, val: Val) => Val;
scope?: Object;
jsMode?: boolean;
verbose?: boolean;
out?: {
inline?: number;
replace?: string;
reduce?: string;
merge?: string;
};
}
export interface MapReduceResult {
_id: Key;
value: Val;
}
export class Query {
exec(callback?: (err: any, res: T) => void): Promise;
exec(operation: string, callback?: (err: any, res: T) => void): Promise;
exec(operation: Function, callback?: (err: any, res: T) => void): Promise;
all(val: number): Query;
all(path: string, val: number): Query;
and(array: Object[]): Query;
box(val: Object): Query;
box(a: number[], b: number[]): Query;
batchSize(val: number): Query;
cast(model: Model, obj: Object): U;
//center(): Query;
//centerSphere(path: string, val: Object): Query;
circle(area: Object): Query;
circle(path: string, area: Object): Query;
comment(val: any): Query;
count(callback?: (err: any, count: number) => void): Query;
count(criteria: Object, callback?: (err: any, count: number) => void): Query;
distinct(callback?: (err: any, res: T) => void): Query;
distinct(field: string, callback?: (err: any, res: T) => void): Query;
distinct(criteria: Object, field: string, callback?: (err: any, res: T) => void): Query;
distinct(criteria: Query, field: string, callback?: (err: any, res: T) => void): Query;
elemMatch(criteria: Object): Query;
elemMatch(criteria: (elem: Query) => void): Query;
elemMatch(path: string, criteria: Object): Query;
elemMatch(path: string, criteria: (elem: Query) => void): Query;
equals(val: Object): Query;
exists(val?: boolean): Query;
exists(path: string, val?: boolean): Query;
find(callback?: (err: any, res: T) => void): Query;
find(criteria: Object, callback?: (err: any, res: T) => void): Query;
findOne(callback?: (err: any, res: T) => void): Query;
findOne(criteria: Object, callback?: (err: any, res: T) => void): Query;
findOneAndRemove(callback?: (err: any, res: T) => void): Query;
findOneAndRemove(cond: Object, callback?: (err: any, res: T) => void): Query;
findOneAndRemove(cond: Object, options: Object, callback?: (err: any, res: T) => void): Query;
findOneAndUpdate(callback?: (err: any, res: T) => void): Query;
findOneAndUpdate(update: Object, callback?: (err: any, res: T) => void): Query;
findOneAndUpdate(cond: Object, update: Object, callback?: (err: any, res: T) => void): Query;
findOneAndUpdate(cond: Object, update: Object, options: FindAndUpdateOption, callback?: (err: any, res: T) => void): Query;
geometry(object: Object): Query;
gt(val: number): Query;
gt(path: string, val: number): Query;
gte(val: number): Query;
gte(path: string, val: number): Query;
hint(val: Object): Query;
in(val: any[]): Query;
in(path: string, val: any[]): Query;
intersects(arg?: Object): Query;
lean(bool?: boolean): Query;
limit(val: number): Query;
lt(val: number): Query;
lt(path: string, val: number): Query;
lte(val: number): Query;
lte(path: string, val: number): Query;
maxDistance(val: number): Query;
maxDistance(path: string, val: number): Query;
maxScan(val: number): Query;
merge(source: Query): Query;
merge(source: Object): Query;
mod(val: number[]): Query;
mod(path: string, val: number[]): Query;
ne(val: any): Query;
ne(path: string, val: any): Query;
near(val: Object): Query;
near(path: string, val: Object): Query;
nearSphere(val: Object): Query;
nearSphere(path: string, val: Object): Query;
nin(val: any[]): Query;
nin(path: string, val: any[]): Query;
nor(array: Object[]): Query;
or(array: Object[]): Query;
polygon(...coordinatePairs: number[][]): Query;
polygon(path: string, ...coordinatePairs: number[][]): Query;
populate(path: string, select?: string, match?: Object, options?: Object): Query;
populate(path: string, select: string, model: string, match?: Object, options?: Object): Query;
populate(opt: PopulateOption): Query;
read(pref: string, tags?: Object[]): Query;
regex(val: RegExp): Query;
regex(path: string, val: RegExp): Query;
remove(callback?: (err: any, res: T) => void): Query;
remove(criteria: Object, callback?: (err: any, res: T) => void): Query;
select(arg: string): Query;
select(arg: Object): Query;
setOptions(options: Object): Query;
size(val: number): Query;
size(path: string, val: number): Query;
skip(val: number): Query;
slaveOk(v?: boolean): Query;
slice(val: number): Query;
slice(val: number[]): Query;
slice(path: string, val: number): Query;
slice(path: string, val: number[]): Query;
snapshot(v?: boolean): Query;
sort(arg: Object): Query;
sort(arg: string): Query;
stream(options?: { transform?: Function; }): QueryStream;
tailable(v?: boolean): Query;
toConstructor(): Query;
update(callback?: (err: any, affectedRows: number, doc: T) => void): Query;
update(doc: Object, callback?: (err: any, affectedRows: number, doc: T) => void): Query;
update(criteria: Object, doc: Object, callback?: (err: any, affectedRows: number, doc: T) => void): Query;
update(criteria: Object, doc: Object, options: Object, callback?: (err: any, affectedRows: number, doc: T) => void): Query;
where(path?: string, val?: any): Query;
where(path?: Object, val?: any): Query;
within(val?: Object): Query;
within(coordinate: number[], ...coordinatePairs: number[][]): Query;
$where(argument: string): Query;
$where(argument: Function): Query;
static use$geoWithin: boolean;
}
export interface PopulateOption {
path: string;
select?: string;
model?: string;
match?: Object;
options?: Object;
}
export interface QueryStream extends NodeJS.EventEmitter {
destory(err?: any): void;
pause(): void;
resume(): void;
pipe(destination: T, options?: { end?: boolean; }): T;
paused: number;
readable: boolean;
}
export interface Document {
id?: string;
_id: any;
equals(doc: Document): boolean;
get(path: string, type?: new(...args: any[]) => any): any;
inspect(options?: Object): string;
invalidate(path: string, errorMsg: string, value: any): void;
invalidate(path: string, error: Error, value: any): void;
isDirectModified(path: string): boolean;
isInit(path: string): boolean;
isModified(path?: string): boolean;
isSelected(path: string): boolean;
markModified(path: string): void;
modifiedPaths(): string[];
populate(callback?: (err: any, res: T) => void): Document;
populate(path?: string, callback?: (err: any, res: T) => void): Document;
populate(opt: PopulateOption, callback?: (err: any, res: T) => void): Document;
populated(path: string): any;
remove(callback?: (err: any) => void): Query;
save(callback?: (err: any, res: T) => void): void;
set(path: string, val: any, type?: new(...args: any[]) => any, options?: Object): void;
set(path: string, val: any, options?: Object): void;
set(value: Object): void;
toJSON(options?: Object): Object;
toObject(options?: Object): Object;
toString(): string;
update(doc: Object, options: Object, callback: (err: any, affectedRows: number, raw: any) => void): Query;
validate(cb: (err: any) => void): void;
isNew: boolean;
errors: Object;
schema: Object;
}
export class Aggregate {
constructor(...options: Object[]);
append(...options: Object[]): Aggregate;
group(arg: Object): Aggregate;
limit(num: number): Aggregate;
match(arg: Object): Aggregate;
near(parameters: Object): Aggregate;
project(arg: string): Aggregate;
project(arg: Object): Aggregate;
select(filter: string): Aggregate;
skip(num: number): Aggregate;
sort(arg: string): Aggregate;
sort(arg: Object): Aggregate;
unwind(fiels: string, ...rest: string[]): Aggregate;
exec(callback?: (err: any, result: T) => void): Promise;
read(pref: string, ...tags: Object[]): Aggregate;
}
export class Promise {
constructor(fn?: (err: any, result: T) => void);
then(onFulFill: (result: T) => void, onReject?: (err: any) => void): Promise;
end(): void;
fulfill(result: T): Promise;
reject(err: any): Promise;
resolve(err: any, result: T): Promise;
onFulfill(listener: (result: T) => void): Promise;
onReject(listener: (err: any) => void): Promise;
onResolve(listener: (err: any, result: T) => void): Promise;
on(event: string, listener: Function): Promise;
// Deprecated methods.
addBack(listener: (err: any, result: T) => void): Promise;
addCallback(listener: (result: T) => void): Promise;
addErrback(listener: (err: any) => void): Promise;
complete(result: T): Promise;
error(err: any): Promise;
}
}