UNPKG

@decaf-ts/for-couchdb

Version:
175 lines (174 loc) 6.94 kB
import { AdapterFlags } from "@decaf-ts/core"; /** * @description Response from a CouchDB Mango query * @summary Contains the matching documents and additional metadata about the query execution * @interface MangoResponse * @template D - The document type * @memberOf module:for-couchdb * @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/find.html#db-find} */ export 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; } /** * @description Statistics about the execution of a Mango query * @summary Provides detailed metrics about query execution including document and key examination counts * @interface MangoExecutionStats * @memberOf module:for-couchdb * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#execution-statistics} */ export 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; } /** * @description Parameters for creating a CouchDB Mango index * @summary Defines the structure and configuration for a new Mango index * @interface CreateIndexRequest * @memberOf module:for-couchdb * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */ export 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; } /** * @description Represents the possible value types in a Mango query * @summary Union type of all possible value types that can be used in Mango queries * @typedef {(number|string|Date|boolean|object|null)} MangoValue * @memberOf module:for-couchdb */ export type MangoValue = number | string | Date | boolean | object | null; /** * @description Operators available in Mango queries * @summary Union type of all possible operators that can be used in Mango queries * @typedef {string} MangoOperator * @memberOf module:for-couchdb */ export type MangoOperator = "$lt" | "$lte" | "$eq" | "$ne" | "$gte" | "$gt" | "$exists" | "$type" | "$in" | "$nin" | "$size" | "$mod" | "$regex" | "$or" | "$and" | "$nor" | "$not" | "$all" | "$allMatch" | "$elemMatch"; /** * @description Represents a CouchDB Mango query selector * @summary Type for defining query conditions in Mango queries * @typedef {Object} MangoSelector * @memberOf module:for-couchdb * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#selector-syntax} */ export type MangoSelector = { [K in MangoOperator | string]: MangoSelector | MangoSelector[] | MangoValue | MangoValue[]; }; /** * @description Represents a sort order specification in Mango queries * @summary Type for defining sort order in Mango queries * @typedef {(string|string[]|Object)} SortOrder * @memberOf module:for-couchdb * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#sort-syntax} */ export type SortOrder = string | string[] | { [key: string]: "asc" | "desc"; }; /** * @description Represents a CouchDB Mango query * @summary Interface for defining complete Mango queries with selectors, sorting, pagination, and other options * @interface MangoQuery * @memberOf module:for-couchdb * @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/find.html#db-find} */ export 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[]; 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; } export interface ViewRow<D = any> { id?: string; key?: any; value?: any; doc?: D; } export interface ViewResponse<D = any> { total_rows?: number; offset?: number; rows: ViewRow<D>[]; } export interface CouchDBFlags extends Partial<AdapterFlags> { /** * When true, non-default Mango queries try to attach a generated named index. * Default-query index selection remains unchanged. */ forceNamedIndexes?: boolean; }