UNPKG

declarations

Version:

[![npm version](https://badge.fury.io/js/declarations.svg)](https://www.npmjs.com/package/declarations)

1,355 lines (1,190 loc) 93.2 kB
// Type definitions for Mongoose 4.5.9 // Project: http://mongoosejs.com/ // Definitions by: simonxca <https://github.com/simonxca/>, horiuchi <https://github.com/horiuchi/> // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped ///<reference path="../mongodb/mongodb.d.ts" /> ///<reference path="../node/node.d.ts" /> /* * Guidelines for maintaining these definitions: * - If you spot an error here or there, please submit a PR. * Give some examples/links to documentation if you can. * * For patches and minor releases: * - Browse the changelog at https://github.com/Automattic/mongoose/blob/master/History.md * and make necessary changes. Afterwards, update the version number at the top so we know * which version we are on. * * For major releases: * - Refer to the updated docs at http://mongoosejs.com/docs/api.html * - On the left-hand side of the docs is a list of .js files. Reset and update the TODO list below * then go through one-by-one, making any updates to params list, return type, etc. For documentation * changes just copy/paste them into here. * - Check the files off as you go. Some files below might not have anything in them. That's ok, this * is just a simple heuristic to keep track of our progress. * * TODO for version 4.x [updated][tested]: * [x][x] index.js * [x][x] querystream.js * [x][x] connection.js * [x][x] utils.js * [x][x] browser.js * [x][x] drivers/node-mongodb-native/collection.js * [x][x] drivers/node-mongodb-native/connection.js * [x][x] error/messages.js * [x][x] error/validation.js * [x][x] error.js * [x][x] querycursor.js * [x][x] virtualtype.js * [x][x] schema.js * [x][x] document.js * [x][x] types/subdocument.js * [x][x] types/array.js * [x][x] types/documentarray.js * [x][x] types/buffer.js * [x][x] types/objectid.js * [x][x] types/embedded.js * [x][x] query.js * [x][x] schema/array.js * [x][x] schema/string.js * [x][x] schema/documentarray.js * [x][x] schema/number.js * [x][x] schema/date.js * [x][x] schema/buffer.js * [x][x] schema/boolean.js * [x][x] schema/objectid.js * [x][x] schema/mixed.js * [x][x] schema/embedded.js * [x][x] aggregate.js * [x][x] schematype.js * [x][x] promise.js * [x][x] ES6Promise.js * [x][x] model.js * [x][x] collection.js */ /* For easier searching, add a header to each section like so: To find a section, CTRL+F and type "section ___.js" /* * section filename.js * http://mongoosejs.com/docs/api.html#filename-js */ declare module "mongoose" { import events = require('events'); import mongodb = require('mongodb'); import stream = require('stream'); import mongoose = require('mongoose'); /* * Some mongoose classes have the same name as the native JS classes * Keep references to native classes using a "Native" prefix */ class NativeBuffer extends global.Buffer {} class NativeDate extends global.Date {} class NativeError extends global.Error {} /* * section index.js * http://mongoosejs.com/docs/api.html#index-js */ export var DocumentProvider: any; // recursive constructor export var Mongoose: new(...args: any[]) => typeof mongoose; type Mongoose = typeof mongoose; export var SchemaTypes: typeof Schema.Types; /** Expose connection states for user-land */ export var STATES: Object /** The default connection of the mongoose module. */ export var connection: Connection; /** The node-mongodb-native driver Mongoose uses. */ export var mongo: typeof mongodb; /** The Mongoose version */ export var version: string; /** * Opens the default mongoose connection. * Options passed take precedence over options included in connection strings. * @returns pseudo-promise wrapper around this */ export function connect(uris: string, options?: ConnectionOptions, callback?: (err: mongodb.MongoError) => void): MongooseThenable; export function connect(uris: string, callback?: (err: mongodb.MongoError) => void): MongooseThenable; /** * Creates a Connection instance. * Each connection instance maps to a single database. This method is helpful * when mangaging multiple db connections. * @param uri a mongodb:// URI * @param options options to pass to the driver * @returns the created Connection object */ export function createConnection(): Connection; export function createConnection(uri: string, options?: ConnectionOptions ): Connection; export function createConnection(host: string, database_name: string, port?: number, options?: ConnectionOptions ): Connection; /** * Disconnects all connections. * @param fn called after all connection close. * @returns pseudo-promise wrapper around this */ export function disconnect(fn?: (error: any) => void): MongooseThenable; /** Gets mongoose options */ export function get(key: string): any; /** * Defines a model or retrieves it. * Models defined on the mongoose instance are available to all connection * created by the same mongoose instance. * @param name model name * @param collection (optional, induced from model name) * @param skipInit whether to skip initialization (defaults to false) */ export function model<T extends Document>(name: string, schema?: Schema, collection?: string, skipInit?: boolean): Model<T>; export function model<T extends Document, U extends Model<T>>( name: string, schema?: Schema, collection?: string, skipInit?: boolean ): U; /** * Returns an array of model names created on this instance of Mongoose. * Does not include names of models created using connection.model(). */ export function modelNames(): string[]; /** * Declares a global plugin executed on all Schemas. * Equivalent to calling .plugin(fn) on each Schema you create. * @param fn plugin callback * @param opts optional options */ export function plugin(fn: Function, opts?: Object): typeof mongoose; /** Sets mongoose options */ export function set(key: string, value: any): void; type MongooseThenable = typeof mongoose & { /** * Ability to use mongoose object as a pseudo-promise so .connect().then() * and .disconnect().then() are viable. */ then<TRes>(onFulfill?: () => void | TRes | PromiseLike<TRes>, onRejected?: (err: mongodb.MongoError) => void | TRes | PromiseLike<TRes>): Promise<TRes>; /** * Ability to use mongoose object as a pseudo-promise so .connect().then() * and .disconnect().then() are viable. */ catch<TRes>(onRejected?: (err: mongodb.MongoError) => void | TRes | PromiseLike<TRes>): Promise<TRes>; } class CastError extends Error { /** * The Mongoose CastError constructor * @param type The name of the type * @param value The value that failed to cast * @param path The path a.b.c in the doc where this cast error occurred * @param reason The original error that was thrown */ constructor(type: string, value: any, path: string, reason?: NativeError); } /* * section querystream.js * http://mongoosejs.com/docs/api.html#querystream-js * * QueryStream can only be accessed using query#stream(), we only * expose its interface here. */ interface QueryStream extends stream.Stream { /** * Provides a Node.js 0.8 style ReadStream interface for Queries. * @event data emits a single Mongoose document * @event error emits when an error occurs during streaming. This will emit before the close event. * @event close emits when the stream reaches the end of the cursor or an error occurs, or the stream * is manually destroyed. After this event, no more events are emitted. */ constructor(query: Query<any>, options?: { /** * optional function which accepts a mongoose document. The return value * of the function will be emitted on data. */ transform?: Function; [other: string]: any; }): QueryStream; /** * Destroys the stream, closing the underlying cursor, which emits the close event. * No more events will be emitted after the close event. */ destroy(err?: NativeError): void; /** Pauses this stream. */ pause(): void; /** Pipes this query stream into another stream. This method is inherited from NodeJS Streams. */ pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T; /** Resumes this stream. */ resume(): void; /** Flag stating whether or not this stream is paused. */ paused: boolean; /** Flag stating whether or not this stream is readable. */ readable: boolean; } /* * section connection.js * http://mongoosejs.com/docs/api.html#connection-js * * The Connection class exposed by require('mongoose') * is actually the driver's NativeConnection class. * connection.js defines a base class that the native * versions extend. See: * http://mongoosejs.com/docs/api.html#drivers-node-mongodb-native-connection-js */ abstract class ConnectionBase extends events.EventEmitter { /** * For practical reasons, a Connection equals a Db. * @param base a mongoose instance * @event connecting Emitted when connection.{open,openSet}() is executed on this connection. * @event connected Emitted when this connection successfully connects to the db. May be emitted multiple times in reconnected scenarios. * @event open Emitted after we connected and onOpen is executed on all of this connections models. * @event disconnecting Emitted when connection.close() was executed. * @event disconnected Emitted after getting disconnected from the db. * @event close Emitted after we disconnected and onClose executed on all of this connections models. * @event reconnected Emitted after we connected and subsequently disconnected, followed by successfully another successfull connection. * @event error Emitted when an error occurs on this connection. * @event fullsetup Emitted in a replica-set scenario, when primary and at least one seconaries specified in the connection string are connected. * @event all Emitted in a replica-set scenario, when all nodes specified in the connection string are connected. */ constructor(base: typeof mongoose); /** * Opens the connection to MongoDB. * @param mongodb://uri or the host to which you are connecting * @param database database name * @param port database port * @param options Mongoose forces the db option forceServerObjectId false and cannot be overridden. * Mongoose defaults the server auto_reconnect options to true which can be overridden. * See the node-mongodb-native driver instance for options that it understands. * Options passed take precedence over options included in connection strings. */ open(connection_string: string, database?: string, port?: number, options?: ConnectionOpenOptions, callback?: (err: any) => void): any; /** * Opens the connection to a replica set. * @param uris comma-separated mongodb:// URIs * @param database database name if not included in uris * @param options passed to the internal driver */ openSet(uris: string, database?: string, options?: ConnectionOpenSetOptions, callback?: (err: any) => void): any; /** Closes the connection */ close(callback?: (err: any) => void): Promise<void>; /** * Retrieves a collection, creating it if not cached. * Not typically needed by applications. Just talk to your collection through your model. * @param name name of the collection * @param options optional collection options */ collection(name: string, options?: Object): Collection; /** * Defines or retrieves a model. * When no collection argument is passed, Mongoose produces a collection name by passing * the model name to the utils.toCollectionName method. This method pluralizes the name. * If you don't like this behavior, either pass a collection name or set your schemas * collection name option. * @param name the model name * @param schema a schema. necessary when defining a model * @param collection name of mongodb collection (optional) if not given it will be induced from model name * @returns The compiled model */ model<T extends Document>(name: string, schema?: Schema, collection?: string): Model<T>; model<T extends Document, U extends Model<T>>( name: string, schema?: Schema, collection?: string ): U; /** Returns an array of model names created on this connection. */ modelNames(): string[]; /** A hash of the global options that are associated with this connection */ config: Object; /** The mongodb.Db instance, set when the connection is opened */ db: mongodb.Db; /** A hash of the collections associated with this connection */ collections: { [index: string]: Collection }; /** * Connection ready state * 0 = disconnected * 1 = connected * 2 = connecting * 3 = disconnecting * Each state change emits its associated event name. */ readyState: number; } interface ConnectionOptionsBase { /** passed to the connection db instance */ db?: any; /** passed to the connection server instance(s) */ server?: any; /** passed to the connection ReplSet instance */ replset?: any; /** username for authentication */ user?: string; /** password for authentication */ pass?: string; /** options for authentication (see http://mongodb.github.com/node-mongodb-native/api-generated/db.html#authenticate) */ auth?: any; } /** See the node-mongodb-native driver instance for options that it understands. */ interface ConnectionOpenOptions extends ConnectionOptionsBase { /** mongoose-specific options */ config?: { /** * set to false to disable automatic index creation for all * models associated with this connection. */ autoIndex?: boolean; }; } /** See the node-mongodb-native driver instance for options that it understands. */ interface ConnectionOpenSetOptions extends ConnectionOptionsBase { /** * If true, enables High Availability support for mongos * If connecting to multiple mongos servers, set the mongos option to true. */ mongos?: boolean; } interface ConnectionOptions extends ConnectionOpenOptions, ConnectionOpenSetOptions {} /* * section drivers/node-mongodb-native/collection.js * http://mongoosejs.com/docs/api.html#drivers-node-mongodb-native-collection-js */ var Collection: Collection; interface Collection extends CollectionBase { /** * Collection constructor * @param name name of the collection * @param conn A MongooseConnection instance * @param opts optional collection options */ new(name: string, conn: Connection, opts?: Object): Collection; /** Formatter for debug print args */ $format(arg: any): string; /** Debug print helper */ $print(name: any, i: any, args: any[]): void; /** Retreives information about this collections indexes. */ getIndexes(): any; } /* * section drivers/node-mongodb-native/connection.js * http://mongoosejs.com/docs/api.html#drivers-node-mongodb-native-connection-js */ class Connection extends ConnectionBase { /** * Switches to a different database using the same connection pool. * @param name The database name * @returns New Connection Object */ useDb(name: string): Connection; /** Expose the possible connection states. */ static STATES: Object; } /* * section error/validation.js * http://mongoosejs.com/docs/api.html#error-validation-js */ class ValidationError extends Error { /** Console.log helper */ toString(): string; } /* * section error.js * http://mongoosejs.com/docs/api.html#error-js */ class Error extends global.Error { /** * MongooseError constructor * @param msg Error message */ constructor(msg: string); /** * The default built-in validator error messages. These may be customized. * As you might have noticed, error messages support basic templating * {PATH} is replaced with the invalid document path * {VALUE} is replaced with the invalid value * {TYPE} is replaced with the validator type such as "regexp", "min", or "user defined" * {MIN} is replaced with the declared min value for the Number.min validator * {MAX} is replaced with the declared max value for the Number.max validator */ static messages: Object; /** For backwards compatibility. Same as mongoose.Error.messages */ static Messages: Object; } /* * section querycursor.js * http://mongoosejs.com/docs/api.html#querycursor-js * * Callback signatures are from: http://mongodb.github.io/node-mongodb-native/2.1/api/Cursor.html#close * QueryCursor can only be accessed by query#cursor(), we only * expose its interface to enable type-checking. */ interface QueryCursor<T extends Document> extends stream.Readable { /** * A QueryCursor is a concurrency primitive for processing query results * one document at a time. A QueryCursor fulfills the Node.js streams3 API, * in addition to several other mechanisms for loading documents from MongoDB * one at a time. * Unless you're an advanced user, do not instantiate this class directly. * Use Query#cursor() instead. * @param options query options passed to .find() * @event cursor Emitted when the cursor is created * @event error Emitted when an error occurred * @event data Emitted when the stream is flowing and the next doc is ready * @event end Emitted when the stream is exhausted */ constructor(query: Query<T>, options: Object): QueryCursor<T>; /** Marks this cursor as closed. Will stop streaming and subsequent calls to next() will error. */ close(callback?: (error: any, result: any) => void): Promise<any>; /** * Execute fn for every document in the cursor. If fn returns a promise, * will wait for the promise to resolve before iterating on to the next one. * Returns a promise that resolves when done. * @param callback executed when all docs have been processed */ eachAsync(fn: (doc: T) => any, callback?: (err: any) => void): Promise<T>; /** * Get the next document from this cursor. Will return null when there are * no documents left. */ next(callback?: (err: any) => void): Promise<any>; } /* * section virtualtype.js * http://mongoosejs.com/docs/api.html#virtualtype-js */ class VirtualType { /** This is what mongoose uses to define virtual attributes via Schema.prototype.virtual. */ constructor(options: Object, name: string); /** Applies getters to value using optional scope. */ applyGetters(value: Object, scope: Object): any; /** Applies setters to value using optional scope. */ applySetters(value: Object, scope: Object): any; /** Defines a getter. */ get(fn: Function): this; /** Defines a setter. */ set(fn: Function): this; } /* * section schema.js * http://mongoosejs.com/docs/api.html#schema-js */ class Schema extends events.EventEmitter { /** * Schema constructor. * When nesting schemas, (children in the example above), always declare * the child schema first before passing it into its parent. * @event init Emitted after the schema is compiled into a Model. */ constructor(definition?: Object, options?: SchemaOptions); /** Adds key path / schema type pairs to this schema. */ add(obj: Object, prefix?: string): void; /** * Iterates the schemas paths similar to Array.forEach. * @param fn callback function * @returns this */ eachPath(fn: (path: string, type: SchemaType) => void): this; /** * Gets a schema option. * @param key option name */ get(key: string): any; /** * Defines an index (most likely compound) for this schema. * @param options Options to pass to MongoDB driver's createIndex() function * @param options.expires Mongoose-specific syntactic sugar, uses ms to convert * expires option into seconds for the expireAfterSeconds in the above link. */ index(fields: Object, options?: { expires?: string; [other: string]: any; }): this; /** Compiles indexes from fields and schema-level indexes */ indexes(): any[]; /** * Adds an instance method to documents constructed from Models compiled from this schema. * If a hash of name/fn pairs is passed as the only argument, each name/fn pair will be added as methods. */ method(method: string, fn: Function): this; method(methodObj: { [name: string]: Function }): this; /** * Gets/sets schema paths. * Sets a path (if arity 2) * Gets a path (if arity 1) */ path(path: string): SchemaType; path(path: string, constructor: any): this; /** * Returns the pathType of path for this schema. * @returns whether it is a real, virtual, nested, or ad-hoc/undefined path. */ pathType(path: string): string; /** * Registers a plugin for this schema. * @param plugin callback */ plugin(plugin: (schema: Schema, options?: Object) => void, opts?: Object): this; /** * Defines a post hook for the document * Post hooks fire on the event emitted from document instances of Models compiled * from this schema. * @param method name of the method to hook * @param fn callback */ post<T extends Document>(method: string, fn: (doc: T) => void, ...args: any[]): this; post<T extends Document>(method: string, fn: (doc: T, next: (err?: NativeError) => void, ...otherArgs: any[]) => void): this; /** * Defines a pre hook for the document. */ pre(method: string, fn: (next: (err?: NativeError) => void) => void, errorCb?: (err: Error) => void): this; pre(method: string, parallel: boolean, fn: (next: (err?: NativeError) => void, done: () => void) => void, errorCb?: (err: Error) => void): this; /** * Adds a method call to the queue. * @param name name of the document method to call later * @param args arguments to pass to the method */ queue(name: string, args: any[]): this; /** * Removes the given path (or [paths]). */ remove(path: string | string[]): void; /** * @param invalidate refresh the cache * @returns an Array of path strings that are required by this schema. */ requiredPaths(invalidate?: boolean): string[]; /** * Sets/gets a schema option. * @param key option name * @param value if not passed, the current option value is returned */ set(key: string): any; set(key: string, value: any): this; /** * Adds static "class" methods to Models compiled from this schema. */ static(name: string, fn: Function): this; static(nameObj: { [name: string]: Function }): this; /** Creates a virtual type with the given name. */ virtual(name: string, options?: Object): VirtualType; /** Returns the virtual type with the given name. */ virtualpath(name: string): VirtualType; /** The allowed index types */ static indexTypes: string[]; /** * Reserved document keys. * Keys in this object are names that are rejected in schema declarations * b/c they conflict with mongoose functionality. Using these key name * will throw an error. */ static reserved: Object; /** Object of currently defined methods on this schema. */ methods: any; /** Object of currently defined statics on this schema. */ statics: any; } interface SchemaOptions { /** defaults to null (which means use the connection's autoIndex option) */ autoIndex?: boolean; /** defaults to true */ bufferCommands?: boolean; /** defaults to false */ capped?: boolean; /** no default */ collection?: string; /** defaults to false. */ emitIndexErrors?: boolean; /** defaults to true */ id?: boolean; /** defaults to true */ _id?: boolean; /** controls document#toObject behavior when called manually - defaults to true */ minimize?: boolean; read?: string; /** defaults to true. */ safe?: boolean; /** defaults to null */ shardKey?: boolean; /** defaults to true */ strict?: boolean; /** no default */ toJSON?: Object; /** no default */ toObject?: Object; /** defaults to 'type' */ typeKey?: string; /** defaults to false */ useNestedStrict?: boolean; /** defaults to true */ validateBeforeSave?: boolean; /** defaults to "__v" */ versionKey?: boolean; /** * skipVersioning allows excluding paths from * versioning (the internal revision will not be * incremented even if these paths are updated). */ skipVersioning?: Object; /** * If set timestamps, mongoose assigns createdAt * and updatedAt fields to your schema, the type * assigned is Date. */ timestamps?: Object; } /* * section document.js * http://mongoosejs.com/docs/api.html#document-js */ class MongooseDocument { /** Checks if a path is set to its default. */ $isDefault(path?: string): boolean; /** * Takes a populated field and returns it to its unpopulated state. * If the path was not populated, this is a no-op. */ depopulate(path: string): void; /** * Returns true if the Document stores the same data as doc. * Documents are considered equal when they have matching _ids, unless neither document * has an _id, in which case this function falls back to usin deepEqual(). * @param doc a document to compare */ equals(doc: MongooseDocument): boolean; /** * Explicitly executes population and returns a promise. * Useful for ES2015 integration. * @returns promise that resolves to the document when population is done */ execPopulate(): Promise<this>; /** * Returns the value of a path. * @param type optionally specify a type for on-the-fly attributes */ get(path: string, type?: any): any; /** * Initializes the document without setters or marking anything modified. * Called internally after a document is returned from mongodb. * @param doc document returned by mongo * @param fn callback */ init(doc: MongooseDocument, fn?: () => void): this; init(doc: MongooseDocument, opts: Object, fn?: () => void): this; /** Helper for console.log */ inspect(options?: Object): any; /** * Marks a path as invalid, causing validation to fail. * The errorMsg argument will become the message of the ValidationError. * The value argument (if passed) will be available through the ValidationError.value property. * @param path the field to invalidate * @param errorMsg the error which states the reason path was invalid * @param value optional invalid value * @param kind optional kind property for the error * @returns the current ValidationError, with all currently invalidated paths */ invalidate(path: string, errorMsg: string | NativeError, value: any, kind?: string): ValidationError | boolean; /** Returns true if path was directly set and modified, else false. */ isDirectModified(path: string): boolean; /** Checks if path was initialized */ isInit(path: string): boolean; /** * Returns true if this document was modified, else false. * If path is given, checks if a path or any full path containing path as part of its path * chain has been modified. */ isModified(path?: string): boolean; /** Checks if path was selected in the source query which initialized this document. */ isSelected(path: string): boolean; /** * Marks the path as having pending changes to write to the db. * Very helpful when using Mixed types. * @param path the path to mark modified */ markModified(path: string): void; /** Returns the list of paths that have been modified. */ modifiedPaths(): string[]; /** * Populates document references, executing the callback when complete. * If you want to use promises instead, use this function with * execPopulate() * Population does not occur unless a callback is passed or you explicitly * call execPopulate(). Passing the same path a second time will overwrite * the previous path options. See Model.populate() for explaination of options. * @param path The path to populate or an options object * @param callback When passed, population is invoked */ populate(callback: (err: any, res: this) => void): this; populate(path: string, callback?: (err: any, res: this) => void): this; populate(options: ModelPopulateOptions, callback?: (err: any, res: this) => void): this; /** Gets _id(s) used during population of the given path. If the path was not populated, undefined is returned. */ populated(path: string): any; /** * Sets the value of a path, or many paths. * @param path path or object of key/vals to set * @param val the value to set * @param type optionally specify a type for "on-the-fly" attributes * @param options optionally specify options that modify the behavior of the set */ set(path: string, val: any, options?: Object): void; set(path: string, val: any, type: any, options?: Object): void; set(value: Object): void; /** * The return value of this method is used in calls to JSON.stringify(doc). * This method accepts the same options as Document#toObject. To apply the * options to every document of your schema by default, set your schemas * toJSON option to the same argument. */ toJSON(options?: DocumentToObjectOptions): Object; /** * Converts this document into a plain javascript object, ready for storage in MongoDB. * Buffers are converted to instances of mongodb.Binary for proper storage. */ toObject(options?: DocumentToObjectOptions): Object; /** Helper for console.log */ toString(): string; /** * Clears the modified state on the specified path. * @param path the path to unmark modified */ unmarkModified(path: string): void; /** Sends an update command with this document _id as the query selector. */ update(doc: Object, callback?: (err: any, raw: any) => void): Query<any>; update(doc: Object, options: ModelUpdateOptions, callback?: (err: any, raw: any) => void): Query<any>; /** * Executes registered validation rules for this document. * @param optional options internal options * @param callback callback called after validation completes, passing an error if one occurred */ validate(callback?: (err: any) => void): Promise<void>; validate(optional: Object, callback?: (err: any) => void): Promise<void>; /** * Executes registered validation rules (skipping asynchronous validators) for this document. * This method is useful if you need synchronous validation. * @param pathsToValidate only validate the given paths * @returns MongooseError if there are errors during validation, or undefined if there is no error. */ validateSync(pathsToValidate: string | string[]): Error; /** Hash containing current validation errors. */ errors: Object; /** The string version of this documents _id. */ id: string; /** This documents _id. */ _id: any; /** Boolean flag specifying if the document is new. */ isNew: boolean; /** The documents schema. */ schema: Schema; } interface DocumentToObjectOptions { /** apply all getters (path and virtual getters) */ getters?: boolean; /** apply virtual getters (can override getters option) */ virtuals?: boolean; /** remove empty objects (defaults to true) */ minimize?: boolean; /** * A transform function to apply to the resulting document before returning * @param doc The mongoose document which is being converted * @param ret The plain object representation which has been converted * @param options The options in use (either schema options or the options passed inline) */ transform?: (doc: any, ret: Object, options: Object) => any; /** depopulate any populated paths, replacing them with their original refs (defaults to false) */ depopulate?: boolean; /** whether to include the version key (defaults to true) */ versionKey?: boolean; /** * keep the order of object keys. If this is set to true, * Object.keys(new Doc({ a: 1, b: 2}).toObject()) will * always produce ['a', 'b'] (defaults to false) */ retainKeyOrder?: boolean; } namespace Types { /* * section types/subdocument.js * http://mongoosejs.com/docs/api.html#types-subdocument-js */ class Subdocument extends MongooseDocument { /** Returns the top level document of this sub-document. */ ownerDocument(): MongooseDocument; /** * Null-out this subdoc * @param callback optional callback for compatibility with Document.prototype.remove */ remove(callback?: (err: any) => void): void; remove(options: Object, callback?: (err: any) => void): void; } /* * section types/array.js * http://mongoosejs.com/docs/api.html#types-array-js */ class Array<T> extends global.Array { /** * Atomically shifts the array at most one time per document save(). * Calling this mulitple times on an array before saving sends the same command as * calling it once. This update is implemented using the MongoDB $pop method which * enforces this restriction. */ $shift(): T; /** Alias of pull */ remove(...args: any[]): this; /** * Pops the array atomically at most one time per document save(). * Calling this mulitple times on an array before saving sends the same command as * calling it once. This update is implemented using the MongoDB $pop method which * enforces this restriction. */ $pop(): T; /** * Adds values to the array if not already present. * @returns the values that were added */ addToSet(...args: any[]): T[]; /** * Return the index of obj or -1 if not found. * @param obj he item to look for */ indexOf(obj: any): number; /** Helper for console.log */ inspect(): any; /** * Marks the entire array as modified, which if saved, will store it as a $set * operation, potentially overwritting any changes that happen between when you * retrieved the object and when you save it. * @returns new length of the array */ nonAtomicPush(...args: any[]): number; /** * Wraps Array#pop with proper change tracking. * marks the entire array as modified which will pass the entire thing to $set * potentially overwritting any changes that happen between when you retrieved * the object and when you save it. */ pop(): T; /** * Pulls items from the array atomically. Equality is determined by casting * the provided value to an embedded document and comparing using * the Document.equals() function. */ pull(...args: any[]): this; /** * Wraps Array#push with proper change tracking. * @returns new length of the array */ push(...args: any[]): number; /** Sets the casted val at index i and marks the array modified. */ set(i: number, val: any): this; /** * Wraps Array#shift with proper change tracking. * Marks the entire array as modified, which if saved, will store it as a $set operation, * potentially overwritting any changes that happen between when you retrieved the object * and when you save it. */ shift(): T; /** * Wraps Array#sort with proper change tracking. * Marks the entire array as modified, which if saved, will store it as a $set operation, * potentially overwritting any changes that happen between when you retrieved the object * and when you save it. */ // some lib.d.ts have return type "this" and others have return type "T[]" // which causes errors. Let the inherited array provide the sort() method. //sort(compareFn?: (a: T, b: T) => number): T[]; /** * Wraps Array#splice with proper change tracking and casting. * Marks the entire array as modified, which if saved, will store it as a $set operation, * potentially overwritting any changes that happen between when you retrieved the object * and when you save it. */ splice(...args: any[]): T[]; /** Returns a native js Array. */ toObject(options?: Object): T[]; /** * Wraps Array#unshift with proper change tracking. * Marks the entire array as modified, which if saved, will store it as a $set operation, * potentially overwritting any changes that happen between when you retrieved the object * and when you save it. */ unshift(...args: any[]): number; } /* * section types/documentarray.js * http://mongoosejs.com/docs/api.html#types-documentarray-js */ class DocumentArray<T extends MongooseDocument> extends Types.Array<T> { /** * Creates a subdocument casted to this schema. * This is the same subdocument constructor used for casting. * @param obj the value to cast to this arrays SubDocument schema */ create(obj: Object): Subdocument; /** * Searches array items for the first document with a matching _id. * @returns the subdocument or null if not found. */ id(id: ObjectId | string | number | NativeBuffer): Embedded; /** Helper for console.log */ inspect(): T[]; /** * Returns a native js Array of plain js objects * @param options optional options to pass to each documents toObject * method call during conversion */ toObject(options?: Object): T[]; } /* * section types/buffer.js * http://mongoosejs.com/docs/api.html#types-buffer-js */ class Buffer extends global.Buffer { /** * Copies the buffer. * Buffer#copy does not mark target as modified so you must copy * from a MongooseBuffer for it to work as expected. This is a * work around since copy modifies the target, not this. */ copy(target: NativeBuffer, ...nodeBufferArgs: any[]): number; /** Determines if this buffer is equals to other buffer */ equals(other: NativeBuffer): boolean; /** Sets the subtype option and marks the buffer modified. */ subtype(subtype: number): void; /** Converts this buffer to its Binary type representation. */ toObject(subtype?: number): mongodb.Binary; /** Writes the buffer. */ write(string: string, ...nodeBufferArgs: any[]): number; } /* * section types/objectid.js * http://mongoosejs.com/docs/api.html#types-objectid-js */ class ObjectId extends mongodb.ObjectID {} /* * section types/embedded.js * http://mongoosejs.com/docs/api.html#types-embedded-js */ class Embedded extends MongooseDocument { /** Helper for console.log */ inspect(): Object; /** * Marks a path as invalid, causing validation to fail. * @param path the field to invalidate * @param err error which states the reason path was invalid */ invalidate(path: string, err: string | NativeError): boolean; /** Returns the top level document of this sub-document. */ ownerDocument(): MongooseDocument; /** Returns this sub-documents parent document. */ parent(): MongooseDocument; /** Returns this sub-documents parent array. */ parentArray(): DocumentArray<MongooseDocument>; /** Removes the subdocument from its parent array. */ remove(options?: { noop?: boolean; }, fn?: (err: any) => void): this; /** * Marks the embedded doc modified. * @param path the path which changed */ markModified(path: string): void; } } /* * section query.js * http://mongoosejs.com/docs/api.html#query-js * * Query<T> is for backwards compatibility. Example: Query<T>.find() returns Query<T[]>. * If later in the query chain a method returns Query<T>, we will need to know type T. * So we save this type as the second type parameter in DocumentQuery. Since people have * been using Query<T>, we set it as an alias of DocumentQuery. */ class Query<T> extends DocumentQuery<T, any> {} class DocumentQuery<T, DocType extends Document> extends mquery { /** * Specifies a javascript function or expression to pass to MongoDBs query system. * Only use $where when you have a condition that cannot be met using other MongoDB * operators like $lt. Be sure to read about all of its caveats before using. * @param js javascript string or function */ $where(js: string | Function): this; /** * Specifies an $all query condition. * When called with one argument, the most recent path passed to where() is used. */ all(val: number): this; all(path: string, val: number): this; /** * Specifies arguments for a $and condition. * @param array array of conditions */ and(array: Object[]): this; /** Specifies the batchSize option. Cannot be used with distinct() */ batchSize(val: number): this; /** * Specifies a $box condition * @param Upper Right Coords */ box(val: Object): this; box(lower: number[], upper: number[]): this; /** Casts this query to the schema of model, If obj is present, it is cast instead of this query.*/ cast(model: any, obj?: Object): Object; /** * Executes the query returning a Promise which will be * resolved with either the doc(s) or rejected with the error. * Like .then(), but only takes a rejection handler. */ catch<TRes>(reject?: (err: any) => void | TRes | PromiseLike<TRes>): Promise<TRes>; /** * DEPRECATED Alias for circle * Specifies a $center or $centerSphere condition. * @deprecated Use circle instead. */ center(area: Object): this; center(path: string, area: Object): this; /** * DEPRECATED Specifies a $centerSphere condition * @deprecated Use circle instead. */ centerSphere(path: string, val: Object): this; centerSphere(val: Object): this; /** Specifies a $center or $centerSphere condition. */ circle(area: Object): this; circle(path: string, area: Object): this; /** Specifies the comment option. Cannot be used with distinct() */ comment(val: string): this; /** * Specifying this query as a count query. Passing a callback executes the query. * @param criteria mongodb selector */ count(callback?: (err: any, count: number) => void): Query<number>; count(criteria: Object, callback?: (err: any, count: number) => void): Query<number>; /** * Returns a wrapper around a mongodb driver cursor. A Query<T>Cursor exposes a * Streams3-compatible interface, as well as a .next() function. */ cursor(options?: Object): QueryCursor<DocType>; /** Declares or executes a distict() operation. Passing a callback executes the query. */ distinct(callback?: (err: any, res: any[]) => void): Query<any[]>; distinct(field: string, callback?: (err: any, res: any[]) => void): Query<any[]>; distinct(field: string, criteria: Object | Query<any>, callback?: (err: any, res: any[]) => void): Query<any[]>; /** Specifies an $elemMatch condition */ elemMatch(criteria: (elem: Query<any>) => void): this; elemMatch(criteria: Object): this; elemMatch(path: string | Object | Function, criteria: (elem: Query<any>) => void): this; elemMatch(path: string | Object | Function, criteria: Object): this; /** Specifies the complementary comparison value for paths specified with where() */ equals(val: Object): this; /** Executes the query */ exec(callback?: (err: any, res: T) => void): Promise<T>; exec(operation: string | Function, callback?: (err: any, res: T) => void): Promise<T>; /** Specifies an $exists condition */ exists(val?: boolean): this; exists(path: string, val?: boolean): this; /** * Finds documents. When no callback is passed, the query is not executed. When the * query is executed, the result will be an array of documents. * @param criteria mongodb selector */ find(callback?: (err: any, res: DocType[]) => void): DocumentQuery<DocType[], DocType>; find(criteria: Object, callback?: (err: any, res: DocType[]) => void): DocumentQuery<DocType[], DocType>; /** * Declares the query a findOne operation. When executed, the first found document is * passed to the callback. Passing a callback executes the query. The result of the query * is a single document. * @param criteria mongodb selector * @param projection optional fields to return */ findOne(callback?: (err: any, res: DocType) => void): DocumentQuery<DocType, DocType>; findOne(criteria: Object, callback?: (err: any, res: DocType) => void): DocumentQuery<DocType, DocType>; /** * Issues a mongodb findAndModify remove command. * Finds a matching document, removes it, passing the found document (if any) to the * callback. Executes immediately if callback is passed. */ findOneAndRemove(callback?: (error: any, doc: DocType, result: any) => void): DocumentQuery<DocType, DocType>; findOneAndRemove(conditions: Object, callback?: (error: any, doc: DocType, result: any) => void): DocumentQuery<DocType, DocType>; findOneAndRemove(conditions: Object, options: QueryFindOneAndRemoveOptions, callback?: (error: any, doc: DocType, result: any) => void): DocumentQuery<DocType, DocType>; /** * Issues a mongodb findAndModify update command. * Finds a matching document, updates it according to the update arg, passing any options, and returns * the found document (if any) to the callback. The query executes immediately if callback is passed. */ findOneAndUpdate(callback?: (err: any, doc: DocType) => void): DocumentQuery<DocType, DocType>; findOneAndUpdate(update: Object, callback?: (err: any, doc: DocType) => void): DocumentQuery<DocType, DocType>; findOneAndUpdate(query: Object | Query<any>, update: Object, callback?: (err: any, doc: DocType) => void): DocumentQuery<DocType, DocType>; findOneAndUpdate(query: Object | Query<any>, update: Object, options: QueryFindOneAndUpdateOptions, callback?: (err: any, doc: DocType) => void): DocumentQuery<DocType, DocType>; /** * Specifies a $geometry condition. geometry() must come after either intersects() or within(). * @param object Must contain a type property which is a String and a coordinates property which * is an Array. See the examples. */ geometry(object: { type: string, coordinates: any[] }): this; /** * Returns the current query conditions as a JSON object. * @returns current query conditions */ getQuery(): any; /** * Returns the current update operations as a JSON object. * @returns current update operations */ getUpdate(): any; /** * Specifies a $gt query condition. * When called with one argument, the most recent path passed to where() is used. */ gt(val: number): this; gt(path: string, val: number): this; /** * Specifies a $gte query condition. * When called with one argument, the most recent path passed to where() is used. */ gte(val: number): this; gte(path: string, val: number): this; /** * Sets query hints. * @param val a hint object */ hint(val: Object): this; /** * Specifies an $in query condition. * When called with one argument, the most recent path passed to where() is used. */ in(val: any[]): this; in(path: string, val: any[]): this; /** Declares an intersects query for geometry(). MUST be used after where(). */ intersects(arg?: Object): this; /** * Sets the lean option. * Documents returned from queries with the lean option enabled are plain * javascript objects, not MongooseDocuments. They have no save method, * getters/setters or other Mongoose magic applied. * @param bool defaults to true */ lean(bool?: boolean): Query<Object>; /** Specifies the maximum number of documents the query will return. Cannot be used with distinct() */ limit(val: number): this; /** * Specifies a $lt query condition. * When called with one argument, the most recent path passed to where() is used. */ lt(val: number): this; lt(path: string, val: number): this; /** * Specifies a $lte query condition. * When called with one argument, the most recent path pas