ts-patch-mongoose
Version:
Patch history & events for mongoose models
77 lines (71 loc) • 2.98 kB
text/typescript
import { HydratedDocument, Types, Query, Schema } from 'mongoose';
import { Operation } from 'fast-json-patch';
import ms from 'ms';
interface History {
op: string;
modelName: string;
collectionName: string;
collectionId: Types.ObjectId;
version: number;
doc?: object;
user?: object;
reason?: string;
metadata?: object;
patch?: Operation[];
}
interface PatchEvent<T> {
oldDoc?: HydratedDocument<T>;
doc?: HydratedDocument<T>;
patch?: Operation[];
}
interface PatchContext<T> {
op: string;
modelName: string;
collectionName: string;
isNew?: boolean;
createdDocs?: HydratedDocument<T>[];
deletedDocs?: HydratedDocument<T>[];
ignoreEvent?: boolean;
ignorePatchHistory?: boolean;
}
type HookContext<T> = Query<T, T> & {
op: string;
_context: PatchContext<T>;
};
type User = Record<string, unknown>;
type Metadata = Record<string, unknown>;
interface PluginOptions<T> {
modelName?: string;
collectionName?: string;
eventUpdated?: string;
eventCreated?: string;
eventDeleted?: string;
getUser?: (doc: HydratedDocument<T>) => Promise<User> | User;
getReason?: (doc: HydratedDocument<T>) => Promise<string> | string;
getMetadata?: (doc: HydratedDocument<T>) => Promise<Metadata> | Metadata;
omit?: string[];
patchHistoryDisabled?: boolean;
preDelete?: (docs: HydratedDocument<T>[]) => Promise<void>;
}
declare const setPatchHistoryTTL: (ttl: number | ms.StringValue) => Promise<void>;
declare const patchEventEmitter: {
[EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void;
addListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
on<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
once<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
removeListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
off<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
removeAllListeners(eventName?: string | symbol | undefined): any;
setMaxListeners(n: number): any;
getMaxListeners(): number;
listeners<K>(eventName: string | symbol): Function[];
rawListeners<K>(eventName: string | symbol): Function[];
emit<K>(eventName: string | symbol, ...args: any[]): boolean;
listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number;
prependListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
prependOnceListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
eventNames(): (string | symbol)[];
};
declare const patchHistoryPlugin: <T>(schema: Schema<T>, opts: PluginOptions<T>) => void;
export { patchEventEmitter, patchHistoryPlugin, setPatchHistoryTTL };
export type { History, HookContext, Metadata, PatchContext, PatchEvent, PluginOptions, User };