rxdb
Version:
A local-first realtime NoSQL Database for JavaScript applications - https://rxdb.info/
55 lines (48 loc) • 1.6 kB
TypeScript
import type { WithDeleted } from './rx-storage.d.ts';
/**
* Notice that the conflict handler input/output
* does not work on RxDocumentData<RxDocType>, but only on WithDeleted<RxDocType>.
* This is because the _meta attributes are meant for the local storing of document data, they not replicated
* and therefore cannot be used to resolve conflicts.
*/
export type RxConflictHandlerInput<RxDocType> = {
assumedMasterState?: WithDeleted<RxDocType>;
realMasterState: WithDeleted<RxDocType>;
newDocumentState: WithDeleted<RxDocType>;
};
/**
* The conflict handler either returns:
* - The resolved new document state
* - A flag to identify the given 'realMasterState' and 'newDocumentState'
* as being exactly equal, so no conflict has to be resolved.
*/
export type RxConflictHandlerOutput<RxDocType> = {
isEqual: false;
documentData: WithDeleted<RxDocType>;
} | {
isEqual: true;
};
export type RxConflictHandler<RxDocType> = (
i: RxConflictHandlerInput<RxDocType>,
context: string
) => Promise<RxConflictHandlerOutput<RxDocType>>;
export type RxConflictResultionTask<RxDocType> = {
/**
* Unique id for that single task.
*/
id: string;
/**
* Tasks must have a context
* which makes it easy to filter/identify them again
* with plugins or other hacky stuff.
*/
context: string;
input: RxConflictHandlerInput<RxDocType>;
};
export type RxConflictResultionTaskSolution<RxDocType> = {
/**
* Id of the RxConflictResultionTask
*/
id: string;
output: RxConflictHandlerOutput<RxDocType>;
};