mongocat
Version:
✨ Mongocat 😺 is easy to use, configuration based Denormalization mongoose plugin for read heavy applications. Mongocat reduces write complexity too.
80 lines (74 loc) • 1.98 kB
text/typescript
import { Schema } from 'mongoose';
export interface IProvider {
toRef?: string;
keyFields?: string[];
ignoredFields?: string[];
// publish?: (data: any) => void;
}
export interface IConsumer {
fromRef: string;
toPath?: string;
key?: string;
as?: Record<string, any>;
inArray?: boolean;
withTimestamp?: boolean;
toRef?: string; // string | undefined;
}
export interface IWatchConsumer {
changeStreamEnabled?: boolean;
key?: string;
fromRef: string;
toPath?: string;
inArray?: boolean;
strict?: boolean;
exceptionOnFailure?: boolean;
toRef: string; // string | undefined;
// relationship?: string;
}
export interface IPolymorphicConsumer {
availableProviders?: string[];
localKey?: string; // default: modelId
foreignKey?: string; // default: _id
toRef: string; // for eventEmitter & changeStream & third party source
fromRefPath?: string;
fixedProvider?: string;
denormWhen?: {
field: string;
is?: string[];
ne?: string[];
in?: string[];
nin?: string[];
};
toPath: string;
morphSchemaMap?: Record<string, Schema>;
modelSwitcher?: Record<string, string>;
withTimestamp?: boolean;
clean?: boolean;
strict?: boolean;
inArray?: boolean;
polymorphic?: boolean;
exceptionOnFailure?: boolean;
as?: Record<string, string>;
changeStreamEnabled?: boolean;
// old
morphKey?: string;
fromRef?: string;
}
export interface IPolymorphicArrayConsumer {
toPathNestedField: string; // 'artist';
availableProviders?: string[];
localKey?: string; // default: modelId
foreignKey?: string; // default: _id
toRef: string; // for eventEmitter & changeStream & third party source
fromRefPath?: string;
fixedProvider?: string;
toPath: string;
morphSchemaMap?: Record<string, Schema>;
withTimestamp?: boolean;
clean?: boolean;
strict: boolean;
inArray?: boolean;
as?: Record<string, string>;
changeStreamEnabled?: boolean;
polymorphic?: boolean; // default: true
}