forked from public/fvtt-cthulhu-eternal
721 lines
23 KiB
TypeScript
721 lines
23 KiB
TypeScript
|
import { EventEmitter } from 'events';
|
||
|
|
||
|
declare namespace NeDB {
|
||
|
type Query = {
|
||
|
[key: string]: any;
|
||
|
}
|
||
|
|
||
|
type Update = {
|
||
|
[key: string]: any;
|
||
|
}
|
||
|
|
||
|
type Projection<TSchema> = {
|
||
|
[p in keyof TSchema]?: number;
|
||
|
}
|
||
|
|
||
|
interface Persistence {
|
||
|
/**
|
||
|
* Under the hood, NeDB's persistence uses an append-only format, meaning
|
||
|
* that all updates and deletes actually result in lines added at the end
|
||
|
* of the datafile, for performance reasons. The database is automatically
|
||
|
* compacted (i.e. put back in the one-line-per-document format) every
|
||
|
* time you load each database within your application.
|
||
|
*
|
||
|
* You can manually call the compaction function with
|
||
|
* `datastore.persistence.compactDatafile` which takes no argument. It
|
||
|
* queues a compaction of the datafile in the executor, to be executed
|
||
|
* sequentially after all pending operations. The datastore will fire a
|
||
|
* compaction.done event once compaction is finished.
|
||
|
*/
|
||
|
compactDatafile(): void;
|
||
|
|
||
|
/**
|
||
|
* Set automatic compaction at a regular `interval` in milliseconds (a
|
||
|
* minimum of 5s is enforced).
|
||
|
*/
|
||
|
setAutocompactionInterval(interval: number): void;
|
||
|
|
||
|
/**
|
||
|
* Stop automatic compaction with
|
||
|
* `datastore.persistence.stopAutocompaction()`.
|
||
|
*/
|
||
|
stopAutocompaction(): void;
|
||
|
}
|
||
|
|
||
|
interface AbstractCursor<TSchema> {
|
||
|
/**
|
||
|
* Sort the queried documents.
|
||
|
*
|
||
|
* See: https://github.com/louischatriot/nedb#sorting-and-paginating
|
||
|
*/
|
||
|
sort(query: any): this;
|
||
|
|
||
|
/**
|
||
|
* Skip some of the queried documents.
|
||
|
*
|
||
|
* See: https://github.com/louischatriot/nedb#sorting-and-paginating
|
||
|
*/
|
||
|
skip(n: number): this;
|
||
|
|
||
|
/**
|
||
|
* Limit the queried documents.
|
||
|
*
|
||
|
* See: https://github.com/louischatriot/nedb#sorting-and-paginating
|
||
|
*/
|
||
|
limit(n: number): this;
|
||
|
|
||
|
/**
|
||
|
* Set the document projection.
|
||
|
*
|
||
|
* See: https://github.com/louischatriot/nedb#projections
|
||
|
*/
|
||
|
project(projection: Projection<TSchema>): this;
|
||
|
}
|
||
|
|
||
|
interface FindCursor<TSchema> extends AbstractCursor<TSchema>, Promise<TSchema[]> {
|
||
|
/**
|
||
|
* Execute the cursor.
|
||
|
*
|
||
|
* Since the Cursor has a `then` and a `catch` method
|
||
|
* JavaScript identifies it as a thenable object
|
||
|
* thus you can await it in async functions.
|
||
|
*
|
||
|
* @example
|
||
|
* // in an async function
|
||
|
* await datastore.find(...)
|
||
|
* .sort(...)
|
||
|
* .limit(...)
|
||
|
*
|
||
|
* @example
|
||
|
* // the previous is the same as:
|
||
|
* await datastore.find(...)
|
||
|
* .sort(...)
|
||
|
* .limit(...)
|
||
|
* .exec()
|
||
|
*/
|
||
|
exec(): Promise<TSchema[]>;
|
||
|
}
|
||
|
|
||
|
interface FindOneCursor<TSchema> extends AbstractCursor<TSchema>, Promise<TSchema | null> {
|
||
|
/**
|
||
|
* Execute the cursor.
|
||
|
*
|
||
|
* Since the Cursor has a `then` and a `catch` method
|
||
|
* JavaScript identifies it as a thenable object
|
||
|
* thus you can await it in async functions.
|
||
|
*
|
||
|
* @example
|
||
|
* // in an async function
|
||
|
* await datastore.find(...)
|
||
|
* .sort(...)
|
||
|
* .limit(...)
|
||
|
*
|
||
|
* @example
|
||
|
* // the previous is the same as:
|
||
|
* await datastore.find(...)
|
||
|
* .sort(...)
|
||
|
* .limit(...)
|
||
|
* .exec()
|
||
|
*/
|
||
|
exec(): Promise<TSchema | null>;
|
||
|
}
|
||
|
|
||
|
type DatastoreOptions = {
|
||
|
/**
|
||
|
* Path to the file where the data is persisted. If left blank, the
|
||
|
* datastore is automatically considered in-memory only. It cannot end
|
||
|
* with a `~` which is used in the temporary files NeDB uses to perform
|
||
|
* crash-safe writes.
|
||
|
*/
|
||
|
filename?: string;
|
||
|
|
||
|
/**
|
||
|
* As the name implies...
|
||
|
*
|
||
|
* Defaults to `false`.
|
||
|
*/
|
||
|
inMemoryOnly?: boolean;
|
||
|
|
||
|
/**
|
||
|
* Timestamp the insertion and last update of all documents, with the
|
||
|
* fields createdAt and updatedAt. User-specified values override
|
||
|
* automatic generation, usually useful for testing.
|
||
|
*
|
||
|
* Defaults to `false`.
|
||
|
*/
|
||
|
timestampData?: boolean;
|
||
|
|
||
|
/**
|
||
|
* If used, the database will automatically be loaded from the datafile
|
||
|
* upon creation (you don't need to call `load`). Any command issued
|
||
|
* before load is finished is buffered and will be executed when load is
|
||
|
* done.
|
||
|
*
|
||
|
* Defaults to `false`.
|
||
|
*/
|
||
|
autoload?: boolean;
|
||
|
|
||
|
/**
|
||
|
* If you use autoloading, this is the handler called after `load`. It
|
||
|
* takes one error argument. If you use autoloading without specifying
|
||
|
* this handler, and an error happens during load, an error will be
|
||
|
* thrown.
|
||
|
*/
|
||
|
onload?(error: Error): any;
|
||
|
|
||
|
/**
|
||
|
* Hook you can use to transform data after it was serialized and before
|
||
|
* it is written to disk. Can be used for example to encrypt data before
|
||
|
* writing database to disk. This function takes a string as parameter
|
||
|
* (one line of an NeDB data file) and outputs the transformed string,
|
||
|
* which must absolutely not contain a `\n` character (or data will be
|
||
|
* lost).
|
||
|
*/
|
||
|
afterSerialization?(line: string): string;
|
||
|
|
||
|
/**
|
||
|
* Inverse of afterSerialization. Make sure to include both and not just
|
||
|
* one or you risk data loss. For the same reason, make sure both
|
||
|
* functions are inverses of one another.
|
||
|
*
|
||
|
* Some failsafe mechanisms are in place to prevent data loss if you
|
||
|
* misuse the serialization hooks: NeDB checks that never one is declared
|
||
|
* without the other, and checks that they are reverse of one another by
|
||
|
* testing on random strings of various lengths. In addition, if too much
|
||
|
* data is detected as corrupt, NeDB will refuse to start as it could mean
|
||
|
* you're not using the deserialization hook corresponding to the
|
||
|
* serialization hook used before.
|
||
|
*/
|
||
|
beforeDeserialization?(line: string): string;
|
||
|
|
||
|
/**
|
||
|
* Between 0 and 1, defaults to 10%. NeDB will refuse to start if more
|
||
|
* than this percentage of the datafile is corrupt. 0 means you don't
|
||
|
* tolerate any corruption, 1 means you don't care.
|
||
|
*/
|
||
|
corruptAlertThreshold?: number;
|
||
|
|
||
|
/**
|
||
|
* Compares strings `a` and `b` and returns -1, 0 or 1. If specified, it
|
||
|
* overrides default string comparison which is not well adapted to non-US
|
||
|
* characters in particular accented letters. Native `localCompare` will
|
||
|
* most of the time be the right choice.
|
||
|
*/
|
||
|
compareStrings?(a: string, b: string): number;
|
||
|
|
||
|
/**
|
||
|
* If you are using NeDB from whithin a Node Webkit app, specify its name
|
||
|
* (the same one you use in the package.json) in this field and the
|
||
|
* filename will be relative to the directory Node Webkit uses to store
|
||
|
* the rest of the application's data (local storage etc.). It works on
|
||
|
* Linux, OS X and Windows. Now that you can use
|
||
|
* `require('nw.gui').App.dataPath` in Node Webkit to get the path to the
|
||
|
* data directory for your application, you should not use this option
|
||
|
* anymore and it will be removed.
|
||
|
* @deprecated
|
||
|
*/
|
||
|
nodeWebkitAppName?: string;
|
||
|
}
|
||
|
|
||
|
type UpdateOptions = {
|
||
|
/**
|
||
|
* Allows the modification of several documents if set to `true`.
|
||
|
*
|
||
|
* Defaults to `false`.
|
||
|
*/
|
||
|
multi?: boolean;
|
||
|
|
||
|
/**
|
||
|
* If you want to insert a new document corresponding to the `update` rules
|
||
|
* if your `query` doesn't match anything. If your `update` is a simple object
|
||
|
* with no modifiers, it is the inserted document. In the other case, the
|
||
|
* `query` is stripped from all operator recursively, and the `update` is
|
||
|
* applied to it.
|
||
|
*
|
||
|
* Defaults to `false`.
|
||
|
*/
|
||
|
upsert?: boolean;
|
||
|
|
||
|
/**
|
||
|
* (Not MongoDB-compatible) If set to true and update is not an upsert,
|
||
|
* will return the document or the array of documents (when multi is set
|
||
|
* to `true`) matched by the find query and updated. Updated documents
|
||
|
* will be returned even if the update did not actually modify them.
|
||
|
*
|
||
|
* Defaults to `false`.
|
||
|
*/
|
||
|
returnUpdatedDocs?: boolean;
|
||
|
}
|
||
|
|
||
|
type RemoveOptions = {
|
||
|
/**
|
||
|
* Allows the removal of multiple documents if set to true.
|
||
|
*
|
||
|
* Defaults to `false`.
|
||
|
*/
|
||
|
multi?: boolean;
|
||
|
}
|
||
|
|
||
|
type IndexOptions = {
|
||
|
/**
|
||
|
* The name of the field to index. Use the dot notation to index a field
|
||
|
* in a nested document.
|
||
|
*/
|
||
|
fieldName: string;
|
||
|
|
||
|
/**
|
||
|
* Enforce field uniqueness. Note that a unique index will raise an error
|
||
|
* if you try to index two documents for which the field is not defined.
|
||
|
*/
|
||
|
unique?: boolean;
|
||
|
|
||
|
/**
|
||
|
* Don't index documents for which the field is not defined. Use this
|
||
|
* option along with `unique` if you want to accept multiple documents for
|
||
|
* which it is not defined.
|
||
|
*/
|
||
|
sparse?: boolean;
|
||
|
|
||
|
/**
|
||
|
* If set, the created index is a TTL (time to live) index, that will
|
||
|
* automatically remove documents when the system date becomes larger than
|
||
|
* the date on the indexed field plus `expireAfterSeconds`. Documents where
|
||
|
* the indexed field is not specified or not a Date object are ignored.
|
||
|
*/
|
||
|
expireAfterSeconds?: number;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @summary
|
||
|
* As of v2.0.0 the Datastore class extends node's built
|
||
|
* in EventEmitter class and implements each method as an event
|
||
|
* plus additional error events. It also inherits the `compaction.done`
|
||
|
* event from nedb but for consistency, in this library the event
|
||
|
* was renamed to `compactionDone`.
|
||
|
*
|
||
|
* All event callbacks will be passed the same type of values,
|
||
|
* the first being the datastore, then the operation result (if there is any)
|
||
|
* and then the arguments of the called method. (Check out the first example!)
|
||
|
*
|
||
|
* All events have a matching error event that goes by the name of `${method}Error`,
|
||
|
* for example `findError` or `loadError`. The callbacks of these events will receive
|
||
|
* the same parameters as the normal event handlers except that instead of the
|
||
|
* operation result there will be an operation error. (Check out the second example!)
|
||
|
*
|
||
|
* A generic `__error__` event is also available. This event will be emitted at any of
|
||
|
* the above error events. The callbacks of this event will receive the same parameters
|
||
|
* as the specific error event handlers except that there will be one more parameter
|
||
|
* passed between the datastore and the error object, that being the name of the method
|
||
|
* that failed. (Check out the third example!)
|
||
|
*
|
||
|
* @example
|
||
|
* let datastore = Datastore.create()
|
||
|
* datastore.on('update', (datastore, result, query, update, options) => {
|
||
|
* })
|
||
|
* datastore.on('load', (datastore) => {
|
||
|
* // this event doesn't have a result
|
||
|
* })
|
||
|
* datastore.on('ensureIndex', (datastore, options) => {
|
||
|
* // this event doesn't have a result
|
||
|
* // but it has the options argument which will be passed to the
|
||
|
* // event handlers
|
||
|
* })
|
||
|
* datastore.on('compactionDone', (datastore) => {
|
||
|
* // inherited from nedb's compaction.done event
|
||
|
* })
|
||
|
*
|
||
|
* @example
|
||
|
* let datastore = Datastore.create()
|
||
|
* datastore.on('updateError', (datastore, error, query, update, options) => {
|
||
|
* })
|
||
|
* datastore.on('loadError', (datastore, error) => {
|
||
|
* })
|
||
|
* datastore.on('ensureIndexError', (datastore, error, options) => {
|
||
|
* })
|
||
|
*
|
||
|
* @example
|
||
|
* let datastore = Datastore.create()
|
||
|
* datastore.on('__error__', (datastore, event, error, ...args) => {
|
||
|
* // for example
|
||
|
* // datastore, 'find', error, [{ foo: 'bar' }, {}]
|
||
|
* })
|
||
|
*
|
||
|
* @class
|
||
|
*/
|
||
|
class Datastore<TDocument> extends EventEmitter {
|
||
|
persistence: Persistence;
|
||
|
|
||
|
private constructor();
|
||
|
|
||
|
/**
|
||
|
* Create a database instance.
|
||
|
*
|
||
|
* Use this over `new Datastore(...)` to access
|
||
|
* original nedb datastore properties, such as
|
||
|
* `datastore.persistence`.
|
||
|
*
|
||
|
* Note that this method only creates the `Datastore`
|
||
|
* class instance, not the datastore file itself.
|
||
|
* The file will only be created once an operation
|
||
|
* is issued against the datastore or if you call
|
||
|
* the `load` instance method explicitly.
|
||
|
*
|
||
|
* The path (if specified) will be relative to `process.cwd()`
|
||
|
* (unless an absolute path was passed).
|
||
|
*
|
||
|
* For more information visit:
|
||
|
* https://github.com/louischatriot/nedb#creatingloading-a-database
|
||
|
*/
|
||
|
static create(
|
||
|
pathOrOptions: DatastoreOptions & { timestampData: true },
|
||
|
): Datastore<{ _id: string, createdAt: Date, updatedAt: Date }>;
|
||
|
/**
|
||
|
* Create a database instance.
|
||
|
*
|
||
|
* Use this over `new Datastore(...)` to access
|
||
|
* original nedb datastore properties, such as
|
||
|
* `datastore.persistence`.
|
||
|
*
|
||
|
* Note that this method only creates the `Datastore`
|
||
|
* class instance, not the datastore file itself.
|
||
|
* The file will only be created once an operation
|
||
|
* is issued against the datastore or if you call
|
||
|
* the `load` instance method explicitly.
|
||
|
*
|
||
|
* The path (if specified) will be relative to `process.cwd()`
|
||
|
* (unless an absolute path was passed).
|
||
|
*
|
||
|
* For more information visit:
|
||
|
* https://github.com/louischatriot/nedb#creatingloading-a-database
|
||
|
*/
|
||
|
static create(
|
||
|
pathOrOptions?: string | DatastoreOptions,
|
||
|
): Datastore<{ _id: string }>;
|
||
|
|
||
|
/**
|
||
|
* Load the datastore.
|
||
|
*
|
||
|
* Note that you don't necessarily have to call
|
||
|
* this method to load the datastore as it will
|
||
|
* automatically be called and awaited on any
|
||
|
* operation issued against the datastore
|
||
|
* (i.e.: `find`, `findOne`, etc.).
|
||
|
*/
|
||
|
load(): Promise<void>;
|
||
|
|
||
|
/**
|
||
|
* Find documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#finding-documents
|
||
|
*
|
||
|
* There are differences minor in how the cursor works though.
|
||
|
*
|
||
|
* @example
|
||
|
* datastore.find({ ... }).sort({ ... }).exec().then(...)
|
||
|
*
|
||
|
* @example
|
||
|
* datastore.find({ ... }).sort({ ... }).then(...)
|
||
|
*
|
||
|
* @example
|
||
|
* // in an async function
|
||
|
* await datastore.find({ ... }).sort({ ... })
|
||
|
*/
|
||
|
find<TSchema>(
|
||
|
query: Query,
|
||
|
projection?: Projection<TDocument & TSchema>,
|
||
|
): FindCursor<TDocument & TSchema>;
|
||
|
|
||
|
/**
|
||
|
* Find a document that matches the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#finding-documents
|
||
|
*
|
||
|
* @example
|
||
|
* datastore.findOne({ ... }).then(...)
|
||
|
*
|
||
|
* @example
|
||
|
* // in an async function
|
||
|
* await datastore.findOne({ ... }).sort({ ... })
|
||
|
*/
|
||
|
findOne<TSchema>(
|
||
|
query: Query,
|
||
|
projection?: Projection<TDocument & TSchema>,
|
||
|
): FindOneCursor<TDocument & TSchema>;
|
||
|
|
||
|
/**
|
||
|
* Insert a document.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#inserting-documents
|
||
|
*/
|
||
|
insert<TSchema>(
|
||
|
docs: TSchema,
|
||
|
): Promise<TDocument & TSchema>;
|
||
|
/**
|
||
|
* Insert an array of documents.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#inserting-documents
|
||
|
*/
|
||
|
insert<TSchema>(
|
||
|
docs: TSchema[],
|
||
|
): Promise<(TDocument & TSchema)[]>;
|
||
|
|
||
|
/**
|
||
|
* Insert a single document.
|
||
|
*
|
||
|
* This is just an alias for `insert` with object destructuring
|
||
|
* to ensure a single document.
|
||
|
*/
|
||
|
insertOne<TSchema>(
|
||
|
doc: TSchema,
|
||
|
): Promise<TDocument & TSchema>;
|
||
|
|
||
|
/**
|
||
|
* Insert multiple documents.
|
||
|
*
|
||
|
* This is just an alias for `insert` with array destructuring
|
||
|
* to ensure multiple documents.
|
||
|
*/
|
||
|
insertMany<TSchema>(
|
||
|
docs: TSchema[],
|
||
|
): Promise<(TDocument & TSchema)[]>;
|
||
|
|
||
|
/**
|
||
|
* Update documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#updating-documents
|
||
|
*
|
||
|
* If you set `options.returnUpdatedDocs`,
|
||
|
* the returned promise will resolve with
|
||
|
* an object (if `options.multi` is `false`) or
|
||
|
* with an array of objects.
|
||
|
*/
|
||
|
update<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true; upsert: true; multi?: false },
|
||
|
): Promise<TDocument & TSchema>;
|
||
|
/**
|
||
|
* Update documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#updating-documents
|
||
|
*
|
||
|
* If you set `options.returnUpdatedDocs`,
|
||
|
* the returned promise will resolve with
|
||
|
* an object (if `options.multi` is `false`) or
|
||
|
* with an array of objects.
|
||
|
*/
|
||
|
update<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true; upsert: true; multi: true },
|
||
|
): Promise<(TDocument & TSchema)[] | (TDocument & TSchema)>;
|
||
|
/**
|
||
|
* Update documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#updating-documents
|
||
|
*
|
||
|
* If you set `options.returnUpdatedDocs`,
|
||
|
* the returned promise will resolve with
|
||
|
* an object (if `options.multi` is `false`) or
|
||
|
* with an array of objects.
|
||
|
*/
|
||
|
update<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true; upsert?: false; multi?: false },
|
||
|
): Promise<(TDocument & TSchema) | null>;
|
||
|
/**
|
||
|
* Update documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#updating-documents
|
||
|
*
|
||
|
* If you set `options.returnUpdatedDocs`,
|
||
|
* the returned promise will resolve with
|
||
|
* an object (if `options.multi` is `false`) or
|
||
|
* with an array of objects.
|
||
|
*/
|
||
|
update<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true; multi: true },
|
||
|
): Promise<(TDocument & TSchema)[]>;
|
||
|
/**
|
||
|
* Update documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#updating-documents
|
||
|
*
|
||
|
* If you set `options.returnUpdatedDocs`,
|
||
|
* the returned promise will resolve with
|
||
|
* an object (if `options.multi` is `false`) or
|
||
|
* with an array of objects.
|
||
|
*/
|
||
|
update<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options?: UpdateOptions,
|
||
|
): Promise<number>;
|
||
|
/**
|
||
|
* Update documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#updating-documents
|
||
|
*
|
||
|
* If you set `options.returnUpdatedDocs`,
|
||
|
* the returned promise will resolve with
|
||
|
* an object (if `options.multi` is `false`) or
|
||
|
* with an array of objects.
|
||
|
*/
|
||
|
update(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options?: UpdateOptions,
|
||
|
): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Update a single document that matches the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `false`.
|
||
|
*/
|
||
|
updateOne<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true; upsert: true },
|
||
|
): Promise<TDocument & TSchema>;
|
||
|
/**
|
||
|
* Update a single document that matches the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `false`.
|
||
|
*/
|
||
|
updateOne<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true; upsert?: false },
|
||
|
): Promise<(TDocument & TSchema) | null>;
|
||
|
/**
|
||
|
* Update a single document that matches the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `false`.
|
||
|
*/
|
||
|
updateOne<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options?: UpdateOptions,
|
||
|
): Promise<number>;
|
||
|
/**
|
||
|
* Update a single document that matches the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `false`.
|
||
|
*/
|
||
|
updateOne(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options?: UpdateOptions,
|
||
|
): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Update multiple documents that match the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `true`.
|
||
|
*/
|
||
|
updateMany<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true; upsert: true },
|
||
|
): Promise<(TDocument & TSchema)[] | (TDocument & TSchema)>;
|
||
|
/**
|
||
|
* Update multiple documents that match the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `true`.
|
||
|
*/
|
||
|
updateMany<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options: UpdateOptions & { returnUpdatedDocs: true },
|
||
|
): Promise<(TDocument & TSchema)[]>;
|
||
|
/**
|
||
|
* Update multiple documents that match the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `true`.
|
||
|
*/
|
||
|
updateMany<TSchema>(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options?: UpdateOptions,
|
||
|
): Promise<number>;
|
||
|
/**
|
||
|
* Update multiple documents that match the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `update` with `options.multi` set to `true`.
|
||
|
*/
|
||
|
updateMany(
|
||
|
query: Query,
|
||
|
update: Update,
|
||
|
options?: UpdateOptions,
|
||
|
): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Remove documents that match the specified `query`.
|
||
|
*
|
||
|
* It's basically the same as the original:
|
||
|
* https://github.com/louischatriot/nedb#removing-documents
|
||
|
*/
|
||
|
remove(query: Query, options: RemoveOptions): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Remove the first document that matches the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `remove` with `options.multi` set to `false`.
|
||
|
*/
|
||
|
removeOne(query: Query, options: RemoveOptions): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Remove all documents that match the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `remove` with `options.multi` set to `true`.
|
||
|
*/
|
||
|
removeMany(query: Query, options: RemoveOptions): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Remove the first document that matches the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `removeOne`.
|
||
|
*/
|
||
|
deleteOne(query: Query, options: RemoveOptions): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Remove all documents that match the specified `query`.
|
||
|
*
|
||
|
* This is just an alias for `removeMany`.
|
||
|
*/
|
||
|
deleteMany(query: Query, options: RemoveOptions): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Count documents matching the specified `query`.
|
||
|
*/
|
||
|
count(query: Query): Promise<number>;
|
||
|
|
||
|
/**
|
||
|
* Ensure an index is kept for this field. Same parameters as lib/indexes
|
||
|
* For now this function is synchronous, we need to test how much time it
|
||
|
* takes We use an async API for consistency with the rest of the code.
|
||
|
*/
|
||
|
ensureIndex(options: IndexOptions): Promise<void>;
|
||
|
|
||
|
/**
|
||
|
* Remove an index.
|
||
|
*/
|
||
|
removeIndex(fieldName: string): Promise<void>;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export = NeDB.Datastore;
|