UNPKG

@360-l/mongo-bulk-data-migration

Version:
69 lines (68 loc) 3.02 kB
import type { Db, Filter, FindOptions, UpdateFilter, ObjectId, Document } from 'mongodb'; import type { DELETE_OPERATION } from './lib/MigrationBulk'; import { DELETE_COLLECTION, FETCH_ALL } from './MongoBulkDataMigration'; export type DataMigrationOptions<TSchema> = { arrayFilters: Document[]; bypassRollbackValidation: boolean; bypassUpdateValidation: boolean; dontCount: boolean; continueOnBulkWriteError: boolean; maxBulkSize: number; maxConcurrentUpdateCalls: number; projectionBackupFilter?: Array<keyof TSchema>; rollbackable: boolean; throttle: number; }; export type RollbackDocument = { _id: ObjectId; date: Date; backup: any; updateQuery: string; }; export type RollBackUpdateObject = { $set?: any; $unset?: any; arrayFilters?: Document[]; }; export type MongoPipeline = object[]; export type MigrationInfos<TSchema extends Document> = { db: Db; operation?: typeof DELETE_COLLECTION; projection: FindOptions<TSchema>['projection']; rollback?: (backup?: RollbackDocument['backup']) => RollBackUpdateObject; query: Filter<TSchema> | MongoPipeline | typeof FETCH_ALL; update: UpdateFilter<TSchema> | typeof DELETE_OPERATION | ((arg: TSchema | UpdateFilter<TSchema>) => Promise<UpdateFilter<TSchema>> | UpdateFilter<TSchema>); }; export type DataMigrationConfig<TSchema extends Document, TQuery extends Filter<TSchema> | typeof FETCH_ALL = Filter<TSchema>> = DMInstanceSpecialOperation<TSchema> | DMInstanceSpecialOperationDropDocument<TSchema, TQuery> | DMInstanceAggregate<TSchema> | DMInstanceFilter<TSchema, TQuery>; type DMInstanceSpecialOperationDropDocument<TSchema extends Document, TQuery extends Filter<TSchema> | typeof FETCH_ALL = Filter<TSchema>> = Omit<DMInstanceFilter<TSchema, TQuery>, 'projection'> & { update: typeof DELETE_OPERATION; }; type DMInstanceAggregate<TSchema> = DMInstanceBase<TSchema> & { query: MongoPipeline; }; export type DMInstanceSpecialOperation<TSchema> = Pick<DMInstanceBase<TSchema>, 'db' | 'id' | 'collectionName' | 'logger' | 'options'> & { operation: typeof DELETE_COLLECTION; }; export type DMInstanceFilter<TSchema extends Document, TQuery extends Filter<TSchema> | typeof FETCH_ALL = Filter<TSchema>> = DMInstanceBase<TSchema> & { projection: FindOptions<TSchema>['projection']; query: TQuery; }; type DMInstanceBase<TSchema> = { collectionName: string; db: Db; id: string; logger?: LoggerInterface; options?: Partial<DataMigrationOptions<TSchema>>; rollback?: (backup: RollbackDocument['backup']) => RollBackUpdateObject; update: UpdateFilter<TSchema> | typeof DELETE_OPERATION | ((arg: TSchema) => Promise<UpdateFilter<TSchema>> | UpdateFilter<TSchema>); }; export type LoggerInterface = { info: (...params: any[]) => void; warn: (...params: any[]) => void; }; export interface RollbackableUpdate { setLogger(logger: LoggerInterface): void; rollback(): Promise<any>; update(): Promise<any>; } export {};