UNPKG

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

Version:
69 lines (68 loc) 2.75 kB
import type { Db, Filter, FindOptions, UpdateFilter, ObjectId, Document } from 'mongodb'; import type { DELETE_OPERATION } from './lib/MigrationBulk'; import { DELETE_COLLECTION } 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; update: UpdateFilter<TSchema> | typeof DELETE_OPERATION | ((arg: TSchema | UpdateFilter<TSchema>) => Promise<UpdateFilter<TSchema>> | UpdateFilter<TSchema>); }; export type DataMigrationConfig<TSchema extends Document> = DMInstanceSpecialOperation<TSchema> | DMInstanceSpecialOperationDropDocument<TSchema> | DMInstanceAggregate<TSchema> | DMInstanceFilter<TSchema>; type DMInstanceSpecialOperationDropDocument<TSchema> = Omit<DMInstanceFilter<TSchema>, '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> = DMInstanceBase<TSchema> & { projection: FindOptions<TSchema>['projection']; query: Filter<TSchema>; }; 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 {};