blob: 857a9d8814c18d005d61f2771e25c5cef30ab6f1 [file] [log] [blame]
/**
* @file nano.d.ts
*
* Type definitions for nano 6.4
*
* Project: https://github.com/apache/couchdb-nano
*
* Definitions by: Tim Jacobi <https://github.com/timjacobi>
* Kovács Vince <https://github.com/vincekovacs>
* Glynn Bird <https://github.com/glynnbird>
* Kyle Chine <https://github.com/kylechine>
* Jean-Christophe Hoelt <https://github.com/j3k0>
*
* Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
*
* TypeScript Version: 2.3
*/
/// <reference types="node" />
import { EventEmitter } from "events";
/** nano entry function */
declare function nano(
config: nano.Configuration | string
): nano.ServerScope;
declare namespace nano {
/** RequestDefaults.auth options */
interface RequestDefaultOptionsAuth {
username: string,
password: string
}
/** RequestDefaults options */
interface RequestDefaultsOptions {
timeout?: number;
agent?: any;
headers?: object;
auth?: RequestDefaultOptionsAuth;
jar?: boolean;
}
/** Nano configuration */
interface Configuration {
/** The URL of the CouchDB service, including username and password if required e.g.
* http://username:password@hostname:port
*/
url: string;
/** For cookie authentication */
cookie?: string;
/** HTTP request options
* @see README: {@link https://www.npmjs.com/package/nano#pool-size-and-open-sockets}
*/
requestDefaults?: RequestDefaultsOptions;
/** Logging function
* @see README: {@link https://www.npmjs.com/package/nano#logging}
*/
log?(id: string, args: any): void;
/** Set to false to prevent parsing of url
* @see README: {@link https://www.npmjs.com/package/nano#configuration}
*/
parseUrl?: boolean;
}
type Callback<R> = (error: RequestError | null, response: R, headers?: any) => void;
/** An error triggered by nano */
interface RequestError extends Error {
/** An error code. */
error?: string; // 'not_found', 'file_exists'
/** Human readable reason for the error. */
reason?: string; // 'missing', 'The database could not be created, the file already exists.';
/** Was the problem at the socket or couch level */
scope?: 'couch' | 'socket';
/** Status code returned by the server */
statusCode?: number; // 404;
/** Request sent to Couch */
request?: {
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
headers?: { [key: string]: string | number };
uri?: string; // 'http://couchhost:5984/db/tsp2',
qs?: any; // { revs_info: true }
};
/** Response headers */
headers?: { [key: string]: string | number };
/** Error identifier */
errid?: 'non_200' | 'request'; // string; // 'non_200'
description?: string;
}
/** Server scope */
interface ServerScope {
/**
* An object containing the nano configurations.
* @see README: {@link https://www.npmjs.com/package/nano#nanoconfig}
*/
readonly config: ServerConfig;
db: DatabaseScope;
/**
* Returns a database object that allows you to perform operations against that database.
* @see README: {@link https://www.npmjs.com/package/nano#nanousename}
*/
use<D>(db: string): DocumentScope<D>;
/**
* Returns a database object that allows you to perform operations against that database.
* @see README: {@link https://www.npmjs.com/package/nano#nanoscopename}
*/
scope<D>(db: string): DocumentScope<D>;
/**
* Initiates a custom request
* @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}
**/
request(opts: RequestOptions | string, callback?: Callback<any>): Promise<any>;
/**
* Initiates a custom request
* @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}
**/
relax(opts: RequestOptions | string, callback?: Callback<any>): Promise<any>;
/**
* Initiates a custom request
* @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}
**/
dinosaur(opts: RequestOptions | string, callback?: Callback<any>): Promise<any>;
/**
* Initiates new session for specified user credentials by providing Cookie value.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
auth(username: string, userpass: string, callback?: Callback<DatabaseAuthResponse>): Promise<DatabaseAuthResponse>;
/**
* Returns information about the authenticated user, including a User Context Object, the authentication method and database that were used, and a list of configured authentication handlers on the server.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
session(callback?: Callback<DatabaseSessionResponse>): Promise<DatabaseSessionResponse>;
/**
* Returns a list of all database events in the CouchDB instance.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
updates(callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
/**
* Returns a list of all database events in the CouchDB instance.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
updates(params: UpdatesParams, callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
/**
* Requests one or more Universally Unique Identifiers (UUIDs) from the CouchDB instance.
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/server/common.html#uuids}
*/
uuids(num?: number, callback?: Callback<any>): Promise<UUIDObject>;
/**
* Accessing the root of a CouchDB instance returns meta information about the instance.
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/server/common.html#api-server-root} */
info(callback?: Callback<InfoResponse>): Promise<InfoResponse>;
}
interface UUIDObject {
uuids: string[];
}
/**
* Response to CouchDB root API call - cluster information.
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/server/common.html#api-server-root} */
interface InfoResponse {
couchdb: string;
version: string;
git_sha: string;
uuid: string;
features: string[];
vendor: { name: string }
}
/**
* Database creation options
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/common.html#put--db} */
interface DatabaseCreateParams {
n?: number;
partitioned?: boolean;
q?: number;
}
/** Database scope */
interface DatabaseScope {
replication: {
enable(source: string, target: string, opts0: object, callback0?: Callback<DatabaseCreateResponse>): Promise<DatabaseCreateResponse>;
disable(id:string, rev: string, opts0: object, callback0?: Callback<DatabaseCreateResponse>): Promise<DatabaseCreateResponse>;
query(id: string, opts0: object, callback0?: Callback<DatabaseGetResponse>): Promise<DatabaseGetResponse>;
};
/**
* Create database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#put--db} */
create(name: string, params?: DatabaseCreateParams, callback?: Callback<DatabaseCreateResponse>): Promise<DatabaseCreateResponse>;
/** Get database information.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
get(name: string, callback?: Callback<DatabaseGetResponse>): Promise<DatabaseGetResponse>;
/** Delete database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#delete--db} */
destroy(name: string, callback?: Callback<OkResponse>): Promise<OkResponse>;
/** List databases.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_all_dbs} */
list(callback?: Callback<string[]>): Promise<string[]>;
/** List databases as a stream.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_all_dbs} */
listAsStream(): NodeJS.ReadStream;
/** Use a specific database.
* @see README: {@link https://www.npmjs.com/package/nano#nanousename} */
use<D>(db: string): DocumentScope<D>;
/** Request compaction on a database.
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/compact.html} */
compact(name: string, callback?: Callback<OkResponse>): Promise<OkResponse>;
/** Request compaction of a database's view indexes.
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/compact.html} */
compact(name: string, designname: string, callback?: Callback<OkResponse>): Promise<OkResponse>;
/** Request a replication operation.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
replicate<D>(
source: string | DocumentScope<D>,
target: string | DocumentScope<D>,
callback?: Callback<DatabaseReplicateResponse>
): Promise<DatabaseReplicateResponse>;
/** Reqiest a replication
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
replicate<D>(
source: string | DocumentScope<D>,
target: string | DocumentScope<D>,
options: DatabaseReplicateOptions,
callback?: Callback<DatabaseReplicateResponse>
): Promise<DatabaseReplicateResponse>;
/** Return sorted list of changes to a database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
changes(name: string, callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
/** Return sorted list of changes to a database with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
changes(name: string, params: DatabaseChangesParams, callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
/** Return sorted list of changes to a database as a stream.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
changesAsStream(name: string): NodeJS.ReadStream;
/** Return sorted list of changes to a database with options as a stream.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
changesAsStream(name: string, params: DatabaseChangesParams): NodeJS.ReadStream;
/** Return a list of all database events.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
updates(callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
/** Return a list of all database event with options
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
updates(params: UpdatesParams, callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
}
/** ChangesReader options */
interface ChangesReaderOptions {
/** number of changes per API call */
batchSize?: number;
/** whether to get a faster changes feed by supplying 'seq_interval' */
fastChanges?: boolean;
/** where to begin the changes feed: 0, now or a sequence token */
since?: string;
/** whether to return document bodies too */
includeDocs?: boolean;
/** number of milliseconds when the longpoll request will timeout */
timeout?: number;
/** whether to require a callback before performing the next request (get/start only) */
wait?: boolean;
/** additional query string parameters */
qs?: object;
/** a MangoSelector defining the slice of the changes feed to return */
selector?: MangoSelector;
}
/** ChangesReader functions */
interface ChangesReaderScope {
/** fetch changes forever */
start(opts: ChangesReaderOptions): EventEmitter;
/** fetch changes and stop when an empty batch is received */
get(opts: ChangesReaderOptions): EventEmitter;
/** spool the change in one long feed, instead of batches */
spool(opts: ChangesReaderOptions): EventEmitter;
/** stop consuming the changes feed */
stop(): void;
}
/** Documents scope */
interface DocumentScope<D> {
/**
* An object containing the nano configurations.
* @see README: {@link https://www.npmjs.com/package/nano#nanoconfig} */
readonly config: ServerConfig;
/** Get database info
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
info(callback?: Callback<DatabaseGetResponse>): Promise<DatabaseGetResponse>;
/** Request a replication opertation with this datbase as the target.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
replicate<D>(
target: string | DocumentScope<D>,
callback?: Callback<DatabaseReplicateResponse>
): Promise<DatabaseReplicateResponse>;
/** Request a replication opertation with this datbase as the target with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
replicate(
target: string | DocumentScope<D>,
options: any,
callback?: Callback<DatabaseReplicateResponse>
): Promise<DatabaseReplicateResponse>;
/** Request compaction on this database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
compact(callback?: Callback<OkResponse>): Promise<OkResponse>;
/** Return sorted list of changes to this database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
changes(callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
/** Return sorted list of changes to this database with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
changes(params: DatabaseChangesParams, callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
/** Changes feed follower.
* @see README: {@link https://www.npmjs.com/package/nano#reading-changes-feed} */
changesReader: ChangesReaderScope;
/** Initiates new session for specified user credentials by providing Cookie value.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
auth(username: string, userpass: string, callback?: Callback<DatabaseAuthResponse>): Promise<DatabaseAuthResponse>;
/** Returns information about the authenticated user, including a User Context Object, the authentication method and database that were used, and a list of configured authentication handlers on the server.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
session(callback?: Callback<DatabaseSessionResponse>): Promise<DatabaseSessionResponse>;
/** Insert a document into this database.
* @see POST Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
* @see PUT Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
insert(document: ViewDocument<D> | D & MaybeDocument, callback?: Callback<DocumentInsertResponse>): Promise<DocumentInsertResponse>;
/**
* Insert a document into this database with options.
* @see POST Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
* @see PUT Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
insert(
document: ViewDocument<D> | D & MaybeDocument,
params: DocumentInsertParams | string | null,
callback?: Callback<DocumentInsertResponse>
): Promise<DocumentInsertResponse>;
/** Fetch a document from this database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
get(docname: string, callback?: Callback<DocumentGetResponse & D>): Promise<DocumentGetResponse & D>;
/** Fetch a document from this database with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
get(docname: string, params?: DocumentGetParams, callback?: Callback<DocumentGetResponse & D>): Promise<DocumentGetResponse & D>;
/** Fetch document meta data, useful for fetching a document's current revision.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#head--db-docid} */
head(docname: string, callback?: Callback<any>): Promise<any>;
/** Delete a document from this database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid} */
destroy(docname: string, rev: string, callback?: Callback<DocumentDestroyResponse>): Promise<DocumentDestroyResponse>;
/** Bulk insert/update/delete multiple documents in this database.
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/bulk-api.html#db-bulk-docs} */
bulk(docs: BulkModifyDocsWrapper, callback?: Callback<DocumentBulkResponse[]>): Promise<DocumentBulkResponse[]>;
/** Bulk insert/update/delete multiple documents in this database, with options.
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/bulk-api.html#db-bulk-docs} */
bulk(docs: BulkModifyDocsWrapper, params: any, callback?: Callback<DocumentInsertResponse[]>): Promise<DocumentInsertResponse[]>;
/** List documents from this database.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
list(callback?: Callback<DocumentListResponse<D>>): Promise<DocumentListResponse<D>>;
/** List documents from this database with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
list(params: DocumentListParams, callback?: Callback<DocumentListResponse<D>>): Promise<DocumentListResponse<D>>;
/** List document from this database as a stream.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
listAsStream(): NodeJS.ReadStream;
/** List document from this database as a stream with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
listAsStream(params: DocumentListParams): NodeJS.ReadStream;
/** Fetch a list of documents by _id.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
fetch(docnames: BulkFetchDocsWrapper, callback?: Callback<DocumentFetchResponse<D>>): Promise<DocumentFetchResponse<D>>;
/** Fetch a list of documents by _id with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
fetch(
docnames: BulkFetchDocsWrapper,
params: DocumentFetchParams,
callback?: Callback<DocumentFetchResponse<D>>
): Promise<DocumentFetchResponse<D>>;
/** Fetch revisions of a list of document _ids.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
fetchRevs(docnames: BulkFetchDocsWrapper, callback?: Callback<DocumentFetchRevsResponse<D>>): Promise<DocumentFetchRevsResponse<D>>;
/** Fetch revisions of a list of document _ids with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
fetchRevs(
docnames: BulkFetchDocsWrapper,
params: DocumentFetchParams,
callback?: Callback<DocumentFetchRevsResponse<D>>
): Promise<DocumentFetchRevsResponse<D>>;
/** Create a Mango index.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
createIndex(indexDef: CreateIndexRequest,
callback?: Callback<CreateIndexResponse>
): Promise<CreateIndexResponse>;
/** Multipart HTTP functions */
multipart: Multipart<D>;
/** Attachment functions */
attachment: Attachment;
/** Apply a show function to a document.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#get--db-_design-ddoc-_show-func} */
show(
designname: string,
showname: string,
doc_id: string,
callback?: Callback<any>
): Promise<any>;
/** Apply a show function to a document.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#get--db-_design-ddoc-_show-func} */
show(
designname: string,
showname: string,
doc_id: string,
params: any,
callback?: Callback<any>
): Promise<any>;
/** Executes an update function on the server side for the supplied document id.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
atomic<R>(
designname: string,
updatename: string,
docname: string,
callback?: Callback<R>
): Promise<R>;
/** Executes an update function on the server side for the supplied document id with body.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
atomic<R>(
designname: string,
updatename: string,
docname: string,
body: any,
callback?: Callback<R>
): Promise<R>;
/** Executes an update function on the server side for the supplied document id.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
updateWithHandler(
designname: string,
updatename: string,
docname: string,
callback?: Callback<OkResponse>
): Promise<OkResponse>;
/** Executes an update function on the server side for the supplied document id with body.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
updateWithHandler(
designname: string,
updatename: string,
docname: string,
body: any,
callback?: Callback<OkResponse>
): Promise<OkResponse>;
/** Executes a search request against the named index.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/ddoc/search.html#db-design-design-doc-search-index-name} */
search<V>(
designname: string,
searchname: string,
params: DocumentSearchParams,
callback?: Callback<DocumentSearchResponse<V>>
): Promise<DocumentSearchResponse<V>>;
/** Executes a search request against the named index as a stream.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/ddoc/search.html#db-design-design-doc-search-index-name} */
searchAsStream<V>(
designname: string,
searchname: string,
params: DocumentSearchParams
): NodeJS.ReadStream;
/** Low-level wrapper that executes a view from a Design Document.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
baseView<V>(
designname: string,
viewname: string,
meta: any,
params?: any,
callback?: Callback<any>
): Promise<any>;
/** Executes a view from a Design Document.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
view<V>(
designname: string,
viewname: string,
callback?: Callback<DocumentViewResponse<V,D>>
): Promise<DocumentViewResponse<V,D>>;
/** Executes a view from a Design Document, with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
view<V>(
designname: string,
viewname: string,
params: DocumentViewParams,
callback?: Callback<DocumentViewResponse<V,D>>
): Promise<DocumentViewResponse<V,D>>;
/** Executes a view from a Design Document as a stream
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
viewAsStream<V>(
designname: string,
viewname: string
): NodeJS.ReadStream;
/** Executes a view from a Design Document, with options as a stream
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
viewAsStream<V>(
designname: string,
viewname: string,
params: DocumentViewParams
): NodeJS.ReadStream;
/** Applies a list function to a view.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
viewWithList(
designname: string,
viewname: string,
listname: string,
callback?: Callback<any>
): Promise<any>;
/** Applies a list function to a view with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
viewWithList(
designname: string,
viewname: string,
listname: string,
params: DocumentViewParams,
callback?: Callback<any>
): Promise<any>;
/** Applies a list function to a view as a stream.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
viewWithListAsStream(
designname: string,
viewname: string,
listname: string,
callback?: Callback<any>
): NodeJS.ReadStream;
/** Applies a list function to a view with options as a stream.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
viewWithListAsStream(
designname: string,
viewname: string,
listname: string,
params: DocumentViewParams,
callback?: Callback<any>
): NodeJS.ReadStream;
/** Run Mango query.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-find} */
find(query: MangoQuery, callback?: Callback<MangoResponse<D>>): Promise <MangoResponse<D>>;
/** Server scope */
server: ServerScope;
/** Fetch information about a single partition in this database.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition} */
partitionInfo(partitionKey: string, callback?: Callback<PartitionInfoResponse>): Promise <PartitionInfoResponse>;
/** List documents in a single partition in this database.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-all-docs} */
partitionedList(partitionKey: string, params?: DocumentFetchParams, callback?: Callback<DocumentListResponse<D>>): Promise<DocumentListResponse<D>>;
/** List documents in a single partition in this database as a stream.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-all-docs} */
partitionedListAsStream(partitionKey: string, params?: DocumentFetchParams): NodeJS.ReadStream;
/** Run Mango query a single partition in this database.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-id-find} */
partitionedFind(partitionKey: string, query: MangoQuery, callback?: Callback<MangoResponse<D>>): Promise <MangoResponse<D>>;
/** Run Mango query a single partition in this database, as a stream.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-id-find} */
partitionedFindAsStream(partitionKey: string, query: MangoQuery): NodeJS.ReadStream;
/** Run a full-text search in a single partition in this database. */
partitionedSearch<V>(
partitionKey: string,
designname: string,
searchname: string,
params: DocumentSearchParams,
callback?: Callback<DocumentSearchResponse<V>>
): Promise<DocumentSearchResponse<V>>;
/** Run a full-text search in a single partition in this database, as a stream. */
partitionedSearchAsStream(
partitionKey: string,
designname: string,
searchname: string,
params: DocumentSearchParams
): NodeJS.ReadStream;
/** Executes the specified view function in a single partition from the specified design document.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-design-design-doc-view-view-name} */
partitionedView<V>(
partitionKey: string,
designname: string,
viewname: string,
params: DocumentViewParams,
callback?: Callback<DocumentViewResponse<V,D>>
): Promise<DocumentViewResponse<V,D>>;
/** Executes the specified view function in a single partition from the specified design document, as a stream
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-design-design-doc-view-view-name} */
partitionedViewAsStream<V>(
partitionKey: string,
designname: string,
viewname: string,
params: DocumentViewParams
): NodeJS.ReadStream;
}
/** attachment data */
interface AttachmentData {
name: string;
data: any;
content_type: any;
}
/** Multi-part HTTP functions */
interface Multipart<D> {
/** Create doc with multiple attachments using mutlipart HTTP request.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments} */
insert(doc: D, attachments: AttachmentData[], callback?: Callback<DocumentInsertResponse>): Promise<DocumentInsertResponse>;
/** Create doc with multiple attachments using mutlipart HTTP request with options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments} */
insert(doc: D, attachments: AttachmentData[], params: any, callback?: Callback<DocumentInsertResponse>): Promise<DocumentInsertResponse>;
/** Fetch document and its attachments as a multipart HTTP request.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/common.html#efficient-multiple-attachments-retrieving} */
get(docname: string, callback?: Callback<any>): Promise<any>;
/** Fetch document and its attachments as a multipart HTTP request with options.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/common.html#efficient-multiple-attachments-retrieving} */
get(docname: string, params: any, callback?: Callback<any>): Promise<any>;
}
/** Attachment functions */
interface Attachment {
/** Insert an attachment.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname} */
insert(
docname: string,
attname: string,
att: any,
contenttype: string,
callback?: Callback<DocumentInsertResponse>
): Promise<DocumentInsertResponse>;
/** Insert an attachment with options.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname} */
insert(
docname: string,
attname: string,
att: any,
contenttype: string,
params: any,
callback?: Callback<DocumentInsertResponse>
): Promise<DocumentInsertResponse>;
/** Get an attachment.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#get--db-docid-attname} */
get(docname: string, attname: string, callback?: Callback<Buffer>): Promise<Buffer>;
/** Get an attachment as a stream.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#get--db-docid-attname} */
getAsStream(docname: string, attname: string): NodeJS.ReadStream;
/** Get an attachment with options.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#get--db-docid-attname} */
get(
docname: string,
attname: string,
params: any,
callback?: Callback<Buffer>
): Promise<Buffer>;
/** Delete an attachment.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#delete--db-docid-attname} */
destroy(docname: string, attname: string, callback?: Callback<any>): Promise<any>;
/** Delete an attachment with options.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#delete--db-docid-attname} */
destroy(
docname: string,
attname: string,
params: any,
callback?: Callback<any>
): Promise<any>;
}
/** Server configuration */
interface ServerConfig {
url: string;
db: string;
}
/** Custom request options
* @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}*/
interface RequestOptions {
db?: string;
method?: string;
path?: string;
doc?: string;
att?: string;
qs?: any;
content_type?: string;
headers?: any;
body?: any;
encoding?: string;
multipart?: any[];
}
/** Global changes feed paramters.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
interface UpdatesParams {
feed: "longpoll" | "continuous" | "eventsource";
timeout: number;
heartbeat: boolean;
since: string;
}
interface BulkModifyDocsWrapper {
docs: any[];
}
interface BulkFetchDocsWrapper {
keys: string[];
}
// -------------------------------------
// Document
// -------------------------------------
interface MaybeIdentifiedDocument {
_id?: string;
}
interface IdentifiedDocument {
_id: string;
}
interface MaybeRevisionedDocument {
_rev?: string;
}
interface RevisionedDocument {
_rev: string;
}
interface MaybeDocument extends MaybeIdentifiedDocument, MaybeRevisionedDocument {
}
interface Document extends IdentifiedDocument, RevisionedDocument {
}
// -------------------------------------
// View
// -------------------------------------
type DocumentInfer<D> = (doc: D & Document) => void
interface View<D> {
map?: string | DocumentInfer<D>;
reduce?: string | DocumentInfer<D>
}
interface ViewDocument<D> extends IdentifiedDocument {
views: {
[name: string]: View<D>
};
}
// -------------------------------------
// Database scope request and response
// -------------------------------------
/** Database creation options
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#put--db} */
interface DatabaseCreateResponse {
/** Operation status. Available in case of success */
ok?: boolean;
/** Error type. Available if response code is 4xx */
error?: string;
/** Error description. Available if response code is 4xx */
reason?: string;
}
/** Database information response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
interface DatabaseGetResponse {
/** Set to true if the database compaction routine is operating on this database. */
compact_running: boolean;
/** The name of the database. */
db_name: string;
/** The version of the physical format used for the data when it is stored on disk. */
disk_format_version: number;
/** The number of bytes of live data inside the database file. */
data_size: number;
/** The length of the database file on disk. Views indexes are not included in the calculation. */
disk_size: number;
/** A count of the documents in the specified database. */
doc_count: number;
/** Number of deleted documents */
doc_del_count: number;
/** Timestamp of when the database was opened, expressed in microseconds since the epoch. */
instance_start_time: string;
/** The number of purge operations on the database. */
purge_seq: number;
sizes: {
/** The size of live data inside the database, in bytes. */
active: number;
/** The uncompressed size of database contents in bytes. */
external: number;
/** The size of the database file on disk in bytes. Views indexes */
file: number;
};
/** The current number of updates to the database. */
update_seq: number;
}
/** OK response
* @see Delete docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#delete--db}
* @see Compaction docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
interface OkResponse {
/** Operation status */
ok: boolean;
}
/** Database _replicate options.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
interface DatabaseReplicateOptions {
/** Cancels the replication */
cancel?: boolean;
/** Configure the replication to be continuous */
continuous?: boolean;
/** Creates the target database. Required administrator’s privileges on target server. */
create_target?: boolean;
/** Array of document IDs to be synchronized */
doc_ids?: string[];
/** The name of a filter function. */
filter?: string;
/** Address of a proxy server through which replication should occur (protocol can be “http” or “socks5”) */
proxy?: string;
/** Source database name or URL */
source?: string;
/** Target database name or URL */
target?: string;
}
/** Database replication history.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
interface DatabaseReplicationHistoryItem {
/** Number of document write failures */
doc_write_failures: number;
/** Number of documents read */
docs_read: number;
/** Number of documents written to target */
docs_written: number;
/** Last sequence number in changes stream */
end_last_seq: number;
/** Date/Time replication operation completed in RFC 2822 format */
end_time: string;
/** Number of missing documents checked */
missing_checked: number;
/** Number of missing documents found */
missing_found: number;
/** Last recorded sequence number */
recorded_seq: number;
/** Session ID for this replication operation */
session_id: string;
/** First sequence number in changes stream */
start_last_seq: number;
/** Date/Time replication operation started in RFC 2822 format */
start_time: string;
}
/** Database _replicate response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
interface DatabaseReplicateResponse {
/** Replication history */
history: DatabaseReplicationHistoryItem[];
/** Replication status */
ok: boolean;
/** Replication protocol version */
replication_id_version: number;
/** Unique session ID */
session_id: string;
/** Last sequence number read from source database */
source_last_seq: number;
}
/** Database _changes parameters.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
interface DatabaseChangesParams {
/** List of document IDs to filter the changes feed as valid JSON array.
*
* Used with _doc_ids filter. Since length of URL is limited, it is better to use POST /{db}/_changes instead. */
doc_ids?: string[];
/** Includes conflicts information in response.
*
* Ignored if `include_docs` isn’t true.
*
* @default false */
conflicts?: boolean;
/** Return the change results in descending sequence order (most recent change first).
*
* @default false */
descending?: boolean;
/** Polling mode.
*
* - `"normal"` Specifies Normal Polling Mode. All past changes are returned immediately. Default.
* - `"longpoll"` Specifies Long Polling Mode. Waits until at least one change has occurred, sends the change, then
* closes the connection. Most commonly used in conjunction with since=now, to wait for the next change.
* - `"continuous"` Sets Continuous Mode. Sends a line of JSON per event. Keeps the socket open until timeout.
* - `"eventsource"` Sets Event Source Mode. Works the same as Continuous Mode, but sends the events in EventSource
* format.
*
* @detault "normal" */
feed?: "normal" | "longpoll" | "continuous" | "eventsource";
/** Reference to a filter function from a design document.
*
* The filter function will filter whole stream emitting only filtered events. See the section Change Notifications
* in the book CouchDB The Definitive Guide for more information. */
filter?: string;
/** Period in milliseconds after which an empty line is sent in the results.
*
* Only applicable for longpoll, continuous, and eventsource feeds. Overrides any timeout to keep the feed alive
* indefinitely. May be true to use default value.
*
* @default 60000 */
heartbeat?: number;
/** Include the associated document with each result.
*
* If there are conflicts, only the winning revision is returned.
*
* @default false */
include_docs?: boolean;
/** Include the Base64-encoded content of attachments in the documents that are included if include_docs is true.
*
* Ignored if include_docs isn’t true.
*
* @default false */
attachments?: boolean;
/** Include encoding information in attachment stubs.
*
* Only used if include_docs is true and the particular attachment is compressed. Ignored if include_docs isn’t
* true.
*
* @default false */
att_encoding_info?: boolean;
/** Limit number of result rows to the specified value.
*
* Note that using 0 here has the same effect as 1. */
limit?: number;
/** Start the results from the change immediately after the given update sequence.
*
* Can be valid update sequence or now value.
*
* @default 0 */
since?: number;
/** Specifies how many revisions are returned in the changes array.
*
* The default, `"main_only"`, will only return the current “winning” revision; `"all_docs"` will return all leaf
* revisions (including conflicts and deleted former conflicts).
*
* @default "main_only" */
style?: string;
/** Maximum period in milliseconds to wait for a change before the response is sent, even if there are no results.
*
* Only applicable for longpoll or continuous feeds. Default value is specified by httpd/changes_timeout
* configuration option. Note that 60000 value is also the default maximum timeout to prevent undetected dead
* connections. */
timeout?: number;
/** Allows to use view functions as filters.
*
* Documents counted as “passed” for view filter in case if map function emits at least one record for them.
*
* @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/changes.html#changes-filter-view|_view} for more info. */
view?: string;
}
/** Database change item.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
interface DatabaseChangesResultItem {
/** List of document’s leaves with single field rev. */
changes: Array<{ rev: string }>;
/** Document ID. */
id: string;
/** Update sequence. */
seq: any;
/** true if the document is deleted. */
deleted: boolean;
}
/** Database _changes response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
interface DatabaseChangesResponse {
/** Last change update sequence */
last_seq: any;
/** Count of remaining items in the feed */
pending: number;
/** Changes made to a database */
results: DatabaseChangesResultItem[];
}
/** Database authentication response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
interface DatabaseAuthResponse {
/** Operation status */
ok: boolean;
/** Username */
name: string;
/** List of user roles */
roles: string[];
}
/** Database _session response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
interface DatabaseSessionResponse {
/** Operation status */
ok: boolean;
/** User context for the current user */
userCtx: any;
/** Server authentication configuration */
info: any;
}
/** Database global changes result item.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
interface DatabaseUpdatesResultItem {
/** Database name. */
db_name: string;
/** A database event is one of created, updated, deleted. */
type: string;
/** Update sequence of the event. */
seq: any;
}
/** Global changes response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
interface DatabaseUpdatesResponse {
/** An array of database events.
*
* For longpoll and continuous modes, the entire response is the contents of the results array. */
results: DatabaseUpdatesResultItem[];
/** The last sequence ID reported. */
last_seq: string;
}
// -------------------------------------
// Document scope request and response
// -------------------------------------
/** Bulk API per-document response. */
interface DocumentResponseRowMeta {
id: string;
key: string;
value: {
rev: string;
};
error?: string;
}
/** Bulk API per-document response with document body. */
interface DocumentResponseRow<D> extends DocumentResponseRowMeta {
doc?: D & Document;
}
/** Bulk API response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_bulk_docs} */
interface DocumentBulkResponse {
/** Document ID. Available in all cases */
id: string;
/** New document revision token. Available if document has saved without errors. */
rev?: string;
/** Error type. Available if response code is 4xx */
error?: string;
/** Error reason. Available if response code is 4xx */
reason?: string;
}
/** Document insert parameters.
* @see POST docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
* @see PUT docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
interface DocumentInsertParams {
/** Document’s revision if updating an existing document. Alternative to If-Match header or document key. */
rev?: string;
/** Stores document in batch mode. */
batch?: "ok";
/** Prevents insertion of a conflicting document.
*
* If false, a well-formed `_rev` must be included in the document. `new_edits=false` is used by the replicator to
* insert documents into the target database even if that leads to the creation of conflicts.
*
* @default true */
new_edits?: boolean;
}
/** Document insert response:
* @see POST docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
* @see PUT docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
interface DocumentInsertResponse {
/** Document ID */
id: string;
/** Operation status */
ok: boolean;
/** Revision MVCC token */
rev: string;
}
/** Document delete response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid} */
interface DocumentDestroyResponse {
/** Document ID */
id: string;
/** Operation status */
ok: boolean;
/** Revision MVCC token */
rev: string;
}
/** Document get parameters.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
interface DocumentGetParams {
/** Includes attachments bodies in response.
*
* @default false */
attachments?: boolean;
/** Includes encoding information in attachment stubs if the particular attachment is compressed.
*
* @default false */
att_encoding_info?: boolean;
/** Includes attachments only since specified revisions.
*
* Doesn’t includes attachments for specified revisions. */
atts_since?: any[];
/** Includes information about conflicts in document.
*
* @default false */
conflicts?: boolean;
/** Includes information about deleted conflicted revisions.
*
* @default false */
deleted_conflicts?: boolean;
/** Forces retrieving latest “leaf” revision, no matter what rev was requested.
*
* @default false */
latest?: boolean;
/** Includes last update sequence for the document.
*
* @default false */
local_seq?: boolean;
/** Acts same as specifying all conflicts, deleted_conflicts and revs_info query parameters.
*
* @default false */
meta?: boolean;
/** Retrieves documents of specified leaf revisions.
*
* Additionally, it accepts value as all to return all leaf revisions. */
open_revs?: any[];
/** Retrieves document of specified revision. */
rev?: string;
/** Includes list of all known document revisions. */
revs?: boolean;
/** Includes detailed information for all known document revisions.
*
* @default false */
revs_info?: boolean;
}
/** Document get response:
* @see docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
interface DocumentGetResponse {
/** Document ID. */
_id: string;
/** Revision MVCC token. */
_rev: string;
/** Deletion flag. Available if document was removed. */
_deleted?: boolean;
/** Attachment’s stubs. Available if document has any attachments. */
_attachments?: any;
/** List of conflicted revisions. Available if requested with conflicts=true query parameter. */
_conflicts?: any[];
/** List of deleted conflicted revisions. Available if requested with deleted_conflicts=true query parameter. */
_deleted_conflicts?: any[];
/** Document’s update sequence in current database. Available if requested with local_seq=true query parameter. */
_local_seq?: string;
/** List of objects with information about local revisions and their status.
*
* Available if requested with open_revs query parameter. */
_revs_info?: any[];
/** List of local revision tokens without.
*
* Available if requested with revs=true query parameter. */
_revisions?: any;
}
/** _all_docs parameters
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
interface DocumentListParams {
/** Includes conflicts information in response.
*
* Ignored if include_docs isn’t true.
*
* @default false */
conflicts?: boolean;
/** Return the documents in descending by key order.
*
* @default false */
descending?: boolean;
/** Stop returning records when the specified key is reached. */
endkey?: string;
/** Stop returning records when the specified key is reached.
*
* end_key is an alias for endkey */
end_key?: string;
/** Stop returning records when the specified document ID is reached. */
end_key_doc_id?: string;
/** Include the full content of the documents in the return.
*
* @default false */
include_docs?: boolean;
/** Specifies whether the specified end key should be included in the result.
*
* @default true */
inclusive_end?: boolean;
/** Return only documents that match the specified key. */
key?: string;
/** Return only documents that match the specified keys. */
keys?: string | string[];
/** Limit the number of the returned documents to the specified number. */
limit?: number;
/** Skip this number of records before starting to return the results.
*
* @default 0 */
skip?: number;
/** Allow the results from a stale view to be used.
*
* Using a stale view wont trigger a rebuild of all views within the encompassing design doc.
*
* Supported values: "ok" and "update_after". */
stale?: string;
/** Return records starting with the specified key. */
startkey?: string;
/** Return records starting with the specified key.
*
* start_key is an alias for startkey */
start_key?: string;
/** Return records starting with the specified document ID. */
start_key_doc_id?: string;
/** Response includes an update_seq value indicating which sequence id of the underlying database the view reflects.
*
* @default false */
update_seq?: boolean;
}
/** _all_docs response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
interface DocumentListResponse<D> {
/** Offset where the document list started. */
offset: number;
/** Array of view row objects.
*
* By default the information returned contains only the document ID and revision. */
rows: Array<DocumentResponseRow<D>>;
/** Number of documents in the database/view.
*
* Note that this is not the number of rows returned in the actual query. */
total_rows: number;
/** Current update sequence for the database. */
update_seq?: number;
}
/** Fetch with POST _all_docs parameters.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
interface DocumentFetchParams {
conflicts?: boolean;
descending?: boolean;
end_key?: string;
end_key_doc_id?: string;
inclusive_end?: boolean;
key?: string;
keys?: string | string[];
limit?: number;
skip?: number;
stale?: string;
start_key?: string;
start_key_doc_id?: string;
update_seq?: boolean;
}
/** Document fetch error */
interface DocumentLookupFailure {
key: string;
error: string;
}
/** Fetch with POST _all_docs response
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
interface DocumentFetchResponse<D> {
offset: number;
rows: Array<DocumentResponseRow<D> | DocumentLookupFailure>;
total_rows: number;
update_seq?: number;
}
/** Fetch revisions response
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
interface DocumentFetchRevsResponse<D> {
offset: number;
rows: Array<DocumentResponseRow<D> | DocumentLookupFailure>;
total_rows: number;
update_seq?: number;
}
/** Search response
* @see Docs: {@link https://docs.couchdb.org/en/latest/ddocs/search.html#queries} */
interface DocumentSearchResponse<V> {
/** Array of search results */
rows: Array<{
id: string;
order: number[];
fields: object;
key: string;
doc?: V;
}>;
/** Number of documents in the search resykts */
total_rows: number;
/** token which if supplied to a subsequent search will return the next page of results. */
bookmark: string;
/** facet counts */
counts?: object;
/** facet range results */
ranges?: object;
highlights?: object;
}
/** Partitioned database info response.
* @see Docs: {@link https://docs.couchdb.org/en/latest/partitioned-dbs/index.html} */
interface PartitionInfoResponse {
/** Database name */
db_name: string;
/** Partition sizes */
sizes: {
active: number;
external: number;
}
/** Partition name */
partition: string;
/** Document count */
doc_count: number;
/** Deleted document count */
doc_del_count: number;
}
/** Document search parameters:
* @see Docs: {@link https://docs.couchdb.org/en/latest/ddocs/search.html#queries} */
interface DocumentSearchParams {
/** A bookmark that was received from a previous search. Used for pagination. */
bookmark?: string;
/** An array of field names for which facet counts are requested. */
counts?: string[];
/** Filters the result set using key value pairs supplied to the drilldown parameter. */
drilldown?: string[];
/** The name of a string field to group results by. */
group_field?: string;
/** The maximum group count when used in conjunction with group_field. */
group_limit?: number;
/** Defines the order of the groups in a search when used with group_field. */
group_sort?: string | string[];
/** Which fields are to be highlighted. */
highlight_fields?: string[];
/** String used before a highlighted word.
*
* @default <em> */
highlight_pre_tag?: string;
/** String used after a highlighted word.
*
* @default </em> */
highlight_post_tag?: string;
/** The number of gradments that are returned in highlights.
*
* @default 1 */
highlight_number?: number;
/** The number of characters in each fragment for highlight.
*
* @default 100 */
highlight_size?: number;
/** Include the full document bodies in the response.
*
* @default false */
include_docs?: boolean;
/** An array of fields to include in the search results */
include_fields?: string[];
/** The maximum number of returned documents.
*
* Positive integer up to 200. */
limit?: number;
/** Alias of 'query'.
*
* One of q or query must be present. */
q?: string;
/** The Lucene query to perform.
*
* One of q or query must be present. */
query?: string;
/** Defines ranges for faceted numeric search fields. */
ranges?: object;
/** Specifies the sort order of the results. */
sort?: string | string[];
/** Do not wait for the index to finish building to return results. */
stale?: boolean;
}
/** View query parameters.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
interface DocumentViewParams {
/** Includes conflicts information in response.
*
* Ignored if include_docs isn’t true.
*
* @default false */
conflicts?: boolean;
/** Return the documents in descending by key order.
*
* @default false */
descending?: boolean;
/** Stop returning records when the specified key is reached. */
endkey?: any;
/** Alias for endkey param. */
end_key?: any;
/** Stop returning records when the specified document ID is reached.
*
* Requires endkey to be specified for this to have any effect. */
endkey_docid?: string;
/** Alias for endkey_docid param. */
end_key_doc_id?: string;
/** Group the results using the reduce function to a group or single row.
*
* @default false */
group?: boolean;
/** Specify the group level to be used. */
group_level?: number;
/** Include the associated document with each row.
*
* @default false */
include_docs?: boolean;
/** Include the Base64-encoded content of attachments in the documents that are included if include_docs is true.
*
* Ignored if include_docs isn’t true.
*
* @default false */
attachments?: boolean;
/** Include encoding information in attachment stubs.
*
* Only if include_docs is true and the particular attachment is compressed.
*
* Ignored if include_docs isn’t true.
*
* @default false */
att_encoding_info?: boolean;
/** Specifies whether the specified end key should be included in the result.
*
* @default true */
inclusive_end?: boolean;
/** Return only documents that match the specified key. */
key?: any;
/** Return only documents where the key matches one of the keys specified in the array. */
keys?: any[];
/** Limit the number of the returned documents to the specified number. */
limit?: number;
/** Use the reduction function.
*
* @default true */
reduce?: boolean;
/** Skip this number of records before starting to return the results.
*
* @default 0 */
skip?: number;
/** Sort returned rows.
*
* Setting this to false offers a performance boost. The total_rows and offset fields are not available when this is
* set to false.
*
* @default true */
sorted?: boolean;
/** Whether or not the view results should be returned from a stable set of shards.
*
* @default false */
stable?: boolean;
/** Allow the results from a stale view to be used.
*
* Supported values: ok, update_after and false.
*
* - ok is equivalent to stable=true&update=false.
* - update_after is equivalent to stable=true&update=lazy.
* - false is equivalent to stable=false&update=true.
*/
stale?: string;
/** Return records starting with the specified key. */
startkey?: any;
/** Alias for startkey param */
start_key?: any;
/** Return records starting with the specified document ID.
*
* Requires startkey to be specified for this to have any effect. */
startkey_docid?: string;
/** Alias for startkey_docid param */
start_key_doc_id?: string;
/** Whether or not the view in question should be updated prior to responding to the user.
*
* Supported values: true, false, lazy.
*
* @default true */
update?: string;
/** Response includes an update_seq value indicating which sequence id of the database the view reflects.
*
* @default false */
update_seq?: boolean;
}
/** View response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
interface DocumentViewResponse<V,D> {
/** Offset where the document list started. */
offset: number;
/** Array of view row objects.
*
* By default the information returned contains only the document ID and revision. */
rows: Array<{
id: string;
key: string;
value: V;
doc?: D & Document;
}>;
/** Number of documents in the database/view. */
total_rows: number;
/** Current update sequence for the database */
update_seq: any;
}
type MangoValue = number | string | Date | boolean | object | null;
type MangoOperator = '$lt' | '$lte' | '$eq' | '$ne' | '$gte' | '$gt' |
'$exists' | '$type' |
'$in' | '$nin' | '$size' | '$mod' | '$regex' |
'$or' | '$and' | '$nor' | '$not' | '$all' | '$allMatch' | '$elemMatch';
/** Mango selector syntax.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#selector-syntax} */
type MangoSelector = {
[K in MangoOperator | string]: MangoSelector| MangoSelector[] | MangoValue | MangoValue[];
}
/** Mango sort syntax
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#sort-syntax} */
type SortOrder = string | string[] | { [key: string]: 'asc' | 'desc' };
/** Mango query syntax.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/find.html#db-find} */
interface MangoQuery {
/** JSON object describing criteria used to select documents. */
selector: MangoSelector;
/** Maximum number of results returned. @default 25 */
limit?: number;
/** Skip the first 'n' results, where 'n' is the value specified. */
skip?: number;
/** JSON array following sort syntax. */
sort?: SortOrder[];
/** JSON array specifying which fields of each object should be returned.
*
* If it is omitted, the entire object is returned.
*
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#filtering-fields} */
fields?: string[];
/* Instruct a query to use a specific index.
*
* Specified either as "<design_document>" or ["<design_document>", "<index_name>"]. */
use_index?: string | [string, string];
/** Read quorum needed for the result.
*
* @default 1 */
r?: number;
/** A string that enables you to specify which page of results you require.
*
* Used for paging through result sets. */
bookmark?: string;
/** Whether to update the index prior to returning the result.
*
* @default true */
update?: boolean;
/** Whether or not the view results should be returned from a “stable” set of shards. */
stable?: boolean;
/** Combination of update = false and stable = true options.
*
* Possible options: "ok", false (default). */
stale?: 'ok' | false;
/** Include execution statistics in the query response.
*
* Optional, default: false. */
execution_stats?: boolean;
}
/** Mango response.
* @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/find.html#db-find} */
interface MangoResponse<D> {
/** Array of documents matching the search.
*
* In each matching document, the fields specified in the fields part of the request body are listed, along with
* their values. */
docs: (D & {_id: string, _rev:string})[];
/** A string that enables you to specify which page of results you require.
*
* Used for paging through result sets. */
bookmark?: string;
/** Execution warnings */
warning?: string;
/** Basic execution statistics for a specific request. */
execution_stats?: MangoExecutionStats;
}
/** Mango execution stats.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#execution-statistics} */
interface MangoExecutionStats {
/** Number of index keys examined. Currently always 0. */
total_keys_examined: number;
/** Number of documents fetched from the database / index.
*
* Equivalent to using include_docs = true in a view. */
total_docs_examined: number;
/** Number of documents fetched from the database using an out-of-band document fetch.
*
* This is only non-zero when read quorum > 1 is specified in the query parameters. */
total_quorum_docs_examined: number;
/** Number of results returned from the query. */
results_returned: number;
/** Total execution time in milliseconds as measured by the database. */
execution_time_ms: number;
}
/** Mango create index parameters.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
interface CreateIndexRequest{
/** JSON object describing the index to create */
index: {
/** Array of field names following the sort syntax. */
fields: SortOrder[],
/** A selector to apply to documents at indexing time, creating a partial index. */
partial_filter_selector?: MangoSelector
},
/** Name of the design document in which the index will be created. */
ddoc?: string
/** Name of the index. If no name is provided, a name will be generated automatically. */
name?: string,
/** Can be "json" or "text".
*
* @default "json" */
type?: 'json' | 'text',
/** This field sets whether the created index will be a partitioned or global index. */
partitioned?: boolean
}
/** Mango create index response.
* @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
interface CreateIndexResponse {
/** Flag to show whether the index was created or one already exists.
*
* Can be “created” or “exists”. */
result: string,
/** Id of the design document the index was created in. */
id: string,
/** Name of the index created. */
name: string
}
}
export = nano;