rxdb
Version:
A local-first realtime NoSQL Database for JavaScript applications - https://rxdb.info/
294 lines (263 loc) • 6.52 kB
TypeScript
import type {
MangoQuery,
MangoQuerySelector,
MangoQuerySortPart
} from './rx-query.d.ts';
import type { BulkWriteRow } from './rx-storage.d.ts';
/**
* This file contains types that are CouchDB specific
*/
export interface CouchReplicationOptions {
live?: boolean;
retry?: boolean;
filter?: Function;
doc_ids?: string[];
query_params?: any;
view?: any;
since?: number | 'now';
heartbeat?: number;
timeout?: number;
batch_size?: number;
batches_limit?: number;
back_off_function?: Function;
checkpoint?: false | 'source' | 'target';
include_docs?: boolean;
limit?: number;
}
export interface CouchChangesOptionsBase {
include_docs?: boolean;
conflicts?: boolean;
attachments?: boolean;
binary?: boolean;
descending?: boolean;
since?: any;
limit?: number;
timeout?: any;
heartbeat?: number | boolean;
filter?: any;
doc_ids?: string | string[];
query_param?: any;
view?: any;
return_docs?: boolean;
batch_size?: number;
style?: string;
}
export interface CouchChangesOptionsLive extends CouchChangesOptionsBase {
live: true;
}
export interface CouchChangesOptionsNonLive extends CouchChangesOptionsBase {
live: false;
}
interface CouchChangesOnChangeEvent {
on: (eventName: string, handler: Function) => void;
off: (eventName: string, handler: Function) => void;
cancel(): void;
}
export type CouchWriteError = {
/**
* status code from couchdb
* 409 for 'conflict'
*/
status: number;
error: true;
/**
* primary key value of the errored document
*/
id: string;
};
/**
* possible couch-settings
* @link https://couchdb.com/api.html#create_database
*/
export interface CouchSettings {
auto_compaction?: boolean;
revs_limit?: number;
ajax?: any;
fetch?: any;
auth?: any;
skip_setup?: boolean;
storage?: any;
size?: number;
location?: string;
iosDatabaseLocation?: string;
}
/**
* options for couch.allDocs()
* @link https://couchdb.com/api.html#batch_fetch
*/
export type CouchAllDocsOptions = {
include_docs?: boolean;
conflicts?: boolean;
attachments?: boolean;
binary?: boolean;
startkey?: string;
endkey?: string;
inclusive_end?: boolean;
limit?: number;
skip?: number;
descending?: boolean;
key?: string;
keys?: string[];
update_seq?: string;
// undocument but needed
revs?: boolean;
deleted?: 'ok';
};
export type CouchSyncHandlerEvents = 'change' | 'paused' | 'active' | 'error' | 'complete';
export type CouchSyncHandler = {
on(ev: CouchSyncHandlerEvents, fn: (el: any) => void): void;
off(ev: CouchSyncHandlerEvents, fn: any): void;
cancel(): void;
};
export type CouchChangeRow = {
id: string;
seq: number;
deleted?: true;
changes: {
rev: 'string';
}[];
/**
* only if include_docs === true
*/
doc?: CouchChangeDoc;
};
export type CouchAttachmentMeta = {
digest: string;
content_type: string;
length: number;
stub: boolean;
/**
* 'revpos indicates the generation number (numeric prefix in the revID) at which the attachment was last altered'
* @link https://github.com/couchbase/couchbase-lite-ios/issues/1200#issuecomment-206444554
*/
revpos: number;
};
export type CouchAttachmentWithData = CouchAttachmentMeta & {
/**
* Base64 string with the data
* or directly a buffer
*/
data: Blob;
type: string;
/**
* If set, must be false
* because we have the full data and not only a stub.
*/
stub?: false;
};
export type CouchChangeDoc = {
_id: string;
_rev: string;
/**
* True if the document is deleted.
*/
_deleted?: boolean;
_attachments: {
[attachmentId: string]: CouchAttachmentMeta;
};
};
export type WithAttachments<Data> = Data & {
/**
* Intentional optional,
* if the document has no attachments,
* we do NOT have an empty object.
*/
_attachments?: {
[attachmentId: string]: CouchAttachmentMeta;
};
};
export type WithAttachmentsData<Data> = Data & {
/**
* Intentional optional,
* if the document has no attachments,
* we do NOT have an empty object.
*/
_attachments?: {
[attachmentId: string]: CouchAttachmentWithData;
};
};
export type WithCouchMeta<Data> = Data & {
_rev: string;
_attachments?: {
[attachmentId: string]: CouchAttachmentMeta;
};
_deleted?: boolean;
};
export type CouchdbChangesResult = {
results: CouchChangeRow[];
last_seq: number;
};
declare type Debug = {
enable(what: string): void;
disable(): void;
};
export type CouchDbSorting = (string | string[] | { [k: string]: 'asc' | 'desc' | 1 | -1; })[];
// this is not equal to the standard MangoQuery
// because of different sorting
export type CouchdbQuery = MangoQuery & {
sort?: CouchDbSorting;
};
export type CouchBulkDocResultRow = {
ok: boolean;
id: string;
rev: string;
error?: 'conflict';
reason?: string;
};
export type CouchCheckpoint = {
sequence: number;
};
export type CouchBulkDocOptions = {
new_edits?: boolean;
// custom options for RxDB
isDeeper?: boolean;
custom?: {
primaryPath: string;
writeRowById: Map<string, BulkWriteRow<any>>;
insertDocsById: Map<string, any>;
previousDocsInDb: Map<string, any>;
context: string;
};
};
export type CouchMangoQuery<DocType> = MangoQuery<DocType> & {
index: undefined;
use_index?: string;
};
export type ExplainedCouchQuery<DocType> = {
dbname: string;
index: {
ddoc: string | null;
name: string; // 'idx-rxdb-index-age,_id'
type: 'json';
def: {
fields: MangoQuerySortPart<DocType>[];
};
};
selector: MangoQuerySelector<DocType>;
range: {
start_key: any[];
end_key: any[];
};
opts: {
use_index: string[];
bookmark: string;
sort: MangoQuerySortPart<DocType>[];
conflicts: boolean;
r: any[];
};
skip: number;
};
export type CouchAllDocsResponse = {
offset: number;
rows: {
id: string;
doc: any;
key: string;
value: {
rev: string;
deleted?: boolean;
};
error?: 'not_found' | string;
}[];
total_rows: number;
};