rxdb
Version:
A local-first realtime NoSQL Database for JavaScript applications - https://rxdb.info/
86 lines (70 loc) • 2.59 kB
TypeScript
import type {
RxDocumentData,
RxStorageChangeEvent,
RxStorageDefaultCheckpoint
} from './rx-storage.d.ts';
export type RxChangeEventBase<RxDocType> = {
operation: 'INSERT' | 'UPDATE' | 'DELETE';
readonly documentId: string;
// optional, does not exist on changes to localdocs of the database
readonly collectionName?: string;
// true if the event is about a local document, false if not.
readonly isLocal: boolean;
documentData: RxDocumentData<RxDocType>;
};
export type RxChangeEventInsert<RxDocType> = RxChangeEventBase<RxDocType> & {
operation: 'INSERT';
previousDocumentData: undefined;
};
export type RxChangeEventUpdate<RxDocType> = RxChangeEventBase<RxDocType> & {
operation: 'UPDATE';
previousDocumentData: RxDocumentData<RxDocType>;
};
export type RxChangeEventDelete<RxDocType> = RxChangeEventBase<RxDocType> & {
operation: 'DELETE';
previousDocumentData: RxDocumentData<RxDocType>;
};
export type RxChangeEvent<RxDocType> = RxChangeEventInsert<RxDocType> | RxChangeEventUpdate<RxDocType> | RxChangeEventDelete<RxDocType>;
/**
* Internally, all events are processed via bulks
* to save performance when sending them over a transport layer
* or de-duplicating them.
*/
export type RxChangeEventBulk<RxDocType, CheckpointType = RxStorageDefaultCheckpoint> = {
/**
* Unique id of the bulk,
* used to detect duplicate bulks
* that have already been processed.
*/
id: string;
// optional, not given for changes to local documents of a RxDatabase.
collectionName?: string;
isLocal: boolean;
events: RxStorageChangeEvent<RxDocType>[];
/**
* Required for replication.
* Passing this checkpoint into getChangedDocumentsSince()
* must return all items that have been modified AFTER this write event.
*/
checkpoint: CheckpointType;
/**
* The context that was given at the call to bulkWrite()
* that caused this EventBulk.
*/
context: string;
/**
* Token of the database instance that created the events.
* Used to determine if the events came from another instance over the BroadcastChannel.
*/
databaseToken: string;
/**
* The storageToken of the RxDatabase that created the events.
* Used to ensure we do not process events of other RxDatabases.
*/
storageToken: string;
/**
* If true, the events belong to some internal stuff like from plugins.
* Internal events are not emitted to the outside over the .$ Observables.
*/
internal: boolean;
};