ts-patch-mongoose 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -82,6 +82,7 @@ const UserSchema = new Schema<IUser>({
82
82
  },
83
83
  role: {
84
84
  type: String,
85
+ enum: ['admin', 'manager', 'user'],
85
86
  required: true
86
87
  }
87
88
  }, { timestamps: true })
@@ -107,22 +108,37 @@ export default User
107
108
 
108
109
  ## Subscribe
109
110
 
110
- You can subscribe to events using patchEventEmitter anywhere in your application
111
+ You can subscribe to events using patchEventEmitter anywhere in your application `handlers/UserHandler.ts`
111
112
 
112
113
  ```typescript
113
114
  import { patchEventEmitter } from 'ts-patch-mongoose'
114
115
  import { USER_CREATED, USER_UPDATED, USER_DELETED } from '../constants/events'
115
116
 
116
117
  patchEventEmitter.on(USER_CREATED, ({ doc }) => {
117
- console.log('User created', doc)
118
+ try {
119
+ console.log('Event - user created', doc)
120
+ // Do something with doc here
121
+ } catch (error) {
122
+ console.error(error)
123
+ }
118
124
  })
119
125
 
120
126
  patchEventEmitter.on(USER_UPDATED, ({ doc, oldDoc, patch }) => {
121
- console.log('User updated', doc, oldDoc, patch)
127
+ try {
128
+ console.log('Event - user updated', doc, oldDoc, patch)
129
+ // Do something with doc, oldDoc and patch here
130
+ } catch (error) {
131
+ console.error(error)
132
+ }
122
133
  })
123
134
 
124
- patchEventEmitter.on(USER_DELETED, ({ doc }) => {
125
- console.log('User deleted', doc)
135
+ patchEventEmitter.on(USER_DELETED, ({ oldDoc }) => {
136
+ try {
137
+ console.log('Event - user deleted', oldDoc)
138
+ // Do something with doc here
139
+ } catch (error) {
140
+ console.error(error)
141
+ }
126
142
  })
127
143
  ```
128
144
 
@@ -1,12 +1,11 @@
1
- import type { HydratedDocument, Types } from 'mongoose';
1
+ import type { HydratedDocument } from 'mongoose';
2
2
  interface IContext<T> {
3
3
  op: string;
4
4
  modelName: string;
5
5
  collectionName: string;
6
6
  isNew?: boolean;
7
- oldDoc?: HydratedDocument<T>;
7
+ createdDocs?: HydratedDocument<T>[];
8
8
  deletedDocs?: HydratedDocument<T>[];
9
- updatedIds?: Types.ObjectId[];
10
9
  }
11
10
  export default IContext;
12
11
  //# sourceMappingURL=IContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEvD,UAAU,QAAQ,CAAC,CAAC;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC5B,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACnC,UAAU,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAA;CAC9B;AAED,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,UAAU,QAAQ,CAAC,CAAC;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;CACpC;AAED,eAAe,QAAQ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAwE7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IAgJlG,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AA2G7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IA2JlG,CAAA"}
@@ -47,16 +47,47 @@ async function updatePatch(opts, context, current, original) {
47
47
  version
48
48
  });
49
49
  }
50
- async function createPatch(opts, context, current) {
51
- if (opts.patchHistoryDisabled)
50
+ async function bulkPatch(opts, context, eventKey, docsKey) {
51
+ const event = opts[eventKey];
52
+ const docs = context[docsKey];
53
+ const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc';
54
+ if (lodash_1.default.isEmpty(docs) || (!event && opts.patchHistoryDisabled))
52
55
  return;
53
- await History_1.default.create({
54
- op: context.op,
55
- modelName: context.modelName,
56
- collectionName: context.collectionName,
57
- collectionId: current._id,
58
- doc: current
59
- });
56
+ const chunks = lodash_1.default.chunk(docs, 1000);
57
+ for await (const chunk of chunks) {
58
+ const bulk = [];
59
+ for (const doc of chunk) {
60
+ if (event)
61
+ em_1.default.emit(event, { [key]: doc });
62
+ if (!opts.patchHistoryDisabled) {
63
+ bulk.push({
64
+ insertOne: {
65
+ document: {
66
+ op: context.op,
67
+ modelName: context.modelName,
68
+ collectionName: context.collectionName,
69
+ collectionId: doc._id,
70
+ doc,
71
+ version: 0
72
+ }
73
+ }
74
+ });
75
+ }
76
+ }
77
+ if (!opts.patchHistoryDisabled) {
78
+ await History_1.default
79
+ .bulkWrite(bulk, { ordered: false })
80
+ .catch((err) => {
81
+ console.error(err);
82
+ });
83
+ }
84
+ }
85
+ }
86
+ async function createPatch(opts, context) {
87
+ await bulkPatch(opts, context, 'eventCreated', 'createdDocs');
88
+ }
89
+ async function deletePatch(opts, context) {
90
+ await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs');
60
91
  }
61
92
  exports.patchEventEmitter = em_1.default;
62
93
  const patchHistoryPlugin = function plugin(schema, opts) {
@@ -66,14 +97,12 @@ const patchHistoryPlugin = function plugin(schema, opts) {
66
97
  const context = {
67
98
  op: this.isNew ? 'create' : 'update',
68
99
  modelName: opts.modelName ?? model.modelName,
69
- collectionName: opts.collectionName ?? model.collection.collectionName
100
+ collectionName: opts.collectionName ?? model.collection.collectionName,
101
+ createdDocs: [current]
70
102
  };
71
103
  try {
72
104
  if (this.isNew) {
73
- if (opts.eventCreated) {
74
- em_1.default.emit(opts.eventCreated, { doc: current });
75
- }
76
- await createPatch(opts, context, current);
105
+ await createPatch(opts, context);
77
106
  }
78
107
  else {
79
108
  const original = await model.findById(current._id).exec();
@@ -87,19 +116,27 @@ const patchHistoryPlugin = function plugin(schema, opts) {
87
116
  next(error);
88
117
  }
89
118
  });
90
- schema.pre(['findOneAndUpdate', 'update', 'updateOne', 'updateMany'], async function (next) {
119
+ schema.post('insertMany', async function (docs) {
120
+ const context = {
121
+ op: 'create',
122
+ modelName: opts.modelName ?? this.modelName,
123
+ collectionName: opts.collectionName ?? this.collection.collectionName,
124
+ createdDocs: docs
125
+ };
126
+ await createPatch(opts, context);
127
+ });
128
+ schema.pre(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function (next) {
91
129
  const filter = this.getFilter();
92
130
  const update = this.getUpdate();
93
131
  const options = this.getOptions();
94
132
  const count = await this.model.count(filter).exec();
95
133
  const commands = [];
96
- const context = {
134
+ this._context = {
97
135
  op: this.op,
98
136
  modelName: opts.modelName ?? this.model.modelName,
99
137
  collectionName: opts.collectionName ?? this.model.collection.collectionName,
100
138
  isNew: options.upsert && count === 0
101
139
  };
102
- this._context = context;
103
140
  try {
104
141
  const keys = lodash_1.default.keys(update).filter((key) => key.startsWith('$'));
105
142
  if (update && !lodash_1.default.isEmpty(keys)) {
@@ -111,6 +148,7 @@ const patchHistoryPlugin = function plugin(schema, opts) {
111
148
  const cursor = this.model.find(filter).cursor();
112
149
  await cursor.eachAsync(async (doc) => {
113
150
  let current = doc.toObject({ depopulate: true });
151
+ const original = doc.toObject({ depopulate: true });
114
152
  current = (0, power_assign_1.assign)(current, update);
115
153
  lodash_1.default.forEach(commands, (command) => {
116
154
  try {
@@ -119,7 +157,7 @@ const patchHistoryPlugin = function plugin(schema, opts) {
119
157
  catch (error) {
120
158
  }
121
159
  });
122
- await updatePatch(opts, context, current, doc.toObject({ depopulate: true }));
160
+ await updatePatch(opts, this._context, current, original);
123
161
  });
124
162
  next();
125
163
  }
@@ -127,68 +165,71 @@ const patchHistoryPlugin = function plugin(schema, opts) {
127
165
  next(error);
128
166
  }
129
167
  });
130
- schema.post(['findOneAndUpdate', 'update', 'updateOne', 'updateMany'], async function () {
168
+ schema.post(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function () {
131
169
  const update = this.getUpdate();
132
170
  if (update && this._context.isNew) {
133
171
  const cursor = this.model.findOne(update).cursor();
134
- await cursor.eachAsync(async (doc) => {
172
+ await cursor.eachAsync((doc) => {
135
173
  const current = doc.toObject({ depopulate: true });
136
- if (opts.eventCreated) {
137
- em_1.default.emit(opts.eventCreated, { doc: current });
174
+ if (this._context.createdDocs) {
175
+ this._context.createdDocs.push(current);
176
+ }
177
+ else {
178
+ this._context.createdDocs = [current];
138
179
  }
139
- await createPatch(opts, this._context, current);
140
180
  });
181
+ await createPatch(opts, this._context);
182
+ }
183
+ });
184
+ schema.pre('remove', async function (next) {
185
+ const original = this.toObject({ depopulate: true });
186
+ const model = this.constructor;
187
+ const context = {
188
+ op: 'delete',
189
+ modelName: opts.modelName ?? model.modelName,
190
+ collectionName: opts.collectionName ?? model.collection.collectionName
191
+ };
192
+ try {
193
+ if (opts.eventDeleted) {
194
+ em_1.default.emit(opts.eventDeleted, { oldDoc: original });
195
+ }
196
+ await deletePatch(opts, context);
197
+ next();
198
+ }
199
+ catch (error) {
200
+ next(error);
141
201
  }
142
202
  });
143
203
  schema.pre(['remove', 'findOneAndDelete', 'findOneAndRemove', 'deleteOne', 'deleteMany'], options, async function (next) {
144
204
  const filter = this.getFilter();
145
205
  const options = this.getOptions();
146
206
  const ignore = options.__ignore;
147
- const context = {
207
+ if (ignore)
208
+ return next();
209
+ this._context = {
148
210
  op: this.op,
149
211
  modelName: opts.modelName ?? this.model.modelName,
150
212
  collectionName: opts.collectionName ?? this.model.collection.collectionName
151
213
  };
152
- if (!ignore) {
153
- context.deletedDocs = await this.model.find(filter).exec();
154
- if (opts.preDeleteManyCallback) {
155
- await opts.preDeleteManyCallback(context.deletedDocs);
214
+ if (['remove', 'deleteMany'].includes(this._context.op) && !options.single) {
215
+ const docs = await this.model.find(filter).exec();
216
+ if (!lodash_1.default.isEmpty(docs)) {
217
+ this._context.deletedDocs = docs;
218
+ }
219
+ }
220
+ else {
221
+ const doc = await this.model.findOne(filter).exec();
222
+ if (!lodash_1.default.isEmpty(doc)) {
223
+ this._context.deletedDocs = [doc];
156
224
  }
157
225
  }
158
- this._context = context;
226
+ if (opts.preDeleteManyCallback && lodash_1.default.isArray(this._context.deletedDocs) && !lodash_1.default.isEmpty(this._context.deletedDocs)) {
227
+ await opts.preDeleteManyCallback(this._context.deletedDocs);
228
+ }
159
229
  next();
160
230
  });
161
231
  schema.post(['remove', 'findOneAndDelete', 'findOneAndRemove', 'deleteOne', 'deleteMany'], options, async function () {
162
- if (lodash_1.default.isEmpty(this._context.deletedDocs) || (!opts.eventDeleted && opts.patchHistoryDisabled))
163
- return;
164
- const chunks = lodash_1.default.chunk(this._context.deletedDocs, 1000);
165
- for await (const chunk of chunks) {
166
- const bulk = [];
167
- for (const oldDoc of chunk) {
168
- if (opts.eventDeleted) {
169
- em_1.default.emit(opts.eventDeleted, { oldDoc });
170
- }
171
- if (!opts.patchHistoryDisabled) {
172
- bulk.push({
173
- insertOne: {
174
- document: {
175
- op: this._context.op,
176
- modelName: this._context.modelName,
177
- collectionName: this._context.collectionName,
178
- collectionId: oldDoc._id,
179
- doc: oldDoc,
180
- version: 0
181
- }
182
- }
183
- });
184
- }
185
- }
186
- if (!opts.patchHistoryDisabled) {
187
- await History_1.default.bulkWrite(bulk, { ordered: false }).catch((err) => {
188
- console.error(err);
189
- });
190
- }
191
- }
232
+ await deletePatch(opts, this._context);
192
233
  });
193
234
  };
194
235
  exports.patchHistoryPlugin = patchHistoryPlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
- import type { HydratedDocument, Types } from 'mongoose';
1
+ import type { HydratedDocument } from 'mongoose';
2
2
  interface IContext<T> {
3
3
  op: string;
4
4
  modelName: string;
5
5
  collectionName: string;
6
6
  isNew?: boolean;
7
- oldDoc?: HydratedDocument<T>;
7
+ createdDocs?: HydratedDocument<T>[];
8
8
  deletedDocs?: HydratedDocument<T>[];
9
- updatedIds?: Types.ObjectId[];
10
9
  }
11
10
  export default IContext;
12
11
  //# sourceMappingURL=IContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEvD,UAAU,QAAQ,CAAC,CAAC;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC5B,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACnC,UAAU,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAA;CAC9B;AAED,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,UAAU,QAAQ,CAAC,CAAC;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;CACpC;AAED,eAAe,QAAQ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAwE7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IAgJlG,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AA2G7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IA2JlG,CAAA"}
@@ -43,16 +43,47 @@ async function updatePatch(opts, context, current, original) {
43
43
  version
44
44
  });
45
45
  }
46
- async function createPatch(opts, context, current) {
47
- if (opts.patchHistoryDisabled)
46
+ async function bulkPatch(opts, context, eventKey, docsKey) {
47
+ const event = opts[eventKey];
48
+ const docs = context[docsKey];
49
+ const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc';
50
+ if (_.isEmpty(docs) || (!event && opts.patchHistoryDisabled))
48
51
  return;
49
- await History.create({
50
- op: context.op,
51
- modelName: context.modelName,
52
- collectionName: context.collectionName,
53
- collectionId: current._id,
54
- doc: current
55
- });
52
+ const chunks = _.chunk(docs, 1000);
53
+ for await (const chunk of chunks) {
54
+ const bulk = [];
55
+ for (const doc of chunk) {
56
+ if (event)
57
+ em.emit(event, { [key]: doc });
58
+ if (!opts.patchHistoryDisabled) {
59
+ bulk.push({
60
+ insertOne: {
61
+ document: {
62
+ op: context.op,
63
+ modelName: context.modelName,
64
+ collectionName: context.collectionName,
65
+ collectionId: doc._id,
66
+ doc,
67
+ version: 0
68
+ }
69
+ }
70
+ });
71
+ }
72
+ }
73
+ if (!opts.patchHistoryDisabled) {
74
+ await History
75
+ .bulkWrite(bulk, { ordered: false })
76
+ .catch((err) => {
77
+ console.error(err);
78
+ });
79
+ }
80
+ }
81
+ }
82
+ async function createPatch(opts, context) {
83
+ await bulkPatch(opts, context, 'eventCreated', 'createdDocs');
84
+ }
85
+ async function deletePatch(opts, context) {
86
+ await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs');
56
87
  }
57
88
  export const patchEventEmitter = em;
58
89
  export const patchHistoryPlugin = function plugin(schema, opts) {
@@ -62,14 +93,12 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
62
93
  const context = {
63
94
  op: this.isNew ? 'create' : 'update',
64
95
  modelName: opts.modelName ?? model.modelName,
65
- collectionName: opts.collectionName ?? model.collection.collectionName
96
+ collectionName: opts.collectionName ?? model.collection.collectionName,
97
+ createdDocs: [current]
66
98
  };
67
99
  try {
68
100
  if (this.isNew) {
69
- if (opts.eventCreated) {
70
- em.emit(opts.eventCreated, { doc: current });
71
- }
72
- await createPatch(opts, context, current);
101
+ await createPatch(opts, context);
73
102
  }
74
103
  else {
75
104
  const original = await model.findById(current._id).exec();
@@ -83,19 +112,27 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
83
112
  next(error);
84
113
  }
85
114
  });
86
- schema.pre(['findOneAndUpdate', 'update', 'updateOne', 'updateMany'], async function (next) {
115
+ schema.post('insertMany', async function (docs) {
116
+ const context = {
117
+ op: 'create',
118
+ modelName: opts.modelName ?? this.modelName,
119
+ collectionName: opts.collectionName ?? this.collection.collectionName,
120
+ createdDocs: docs
121
+ };
122
+ await createPatch(opts, context);
123
+ });
124
+ schema.pre(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function (next) {
87
125
  const filter = this.getFilter();
88
126
  const update = this.getUpdate();
89
127
  const options = this.getOptions();
90
128
  const count = await this.model.count(filter).exec();
91
129
  const commands = [];
92
- const context = {
130
+ this._context = {
93
131
  op: this.op,
94
132
  modelName: opts.modelName ?? this.model.modelName,
95
133
  collectionName: opts.collectionName ?? this.model.collection.collectionName,
96
134
  isNew: options.upsert && count === 0
97
135
  };
98
- this._context = context;
99
136
  try {
100
137
  const keys = _.keys(update).filter((key) => key.startsWith('$'));
101
138
  if (update && !_.isEmpty(keys)) {
@@ -107,6 +144,7 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
107
144
  const cursor = this.model.find(filter).cursor();
108
145
  await cursor.eachAsync(async (doc) => {
109
146
  let current = doc.toObject({ depopulate: true });
147
+ const original = doc.toObject({ depopulate: true });
110
148
  current = assign(current, update);
111
149
  _.forEach(commands, (command) => {
112
150
  try {
@@ -115,7 +153,7 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
115
153
  catch (error) {
116
154
  }
117
155
  });
118
- await updatePatch(opts, context, current, doc.toObject({ depopulate: true }));
156
+ await updatePatch(opts, this._context, current, original);
119
157
  });
120
158
  next();
121
159
  }
@@ -123,68 +161,71 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
123
161
  next(error);
124
162
  }
125
163
  });
126
- schema.post(['findOneAndUpdate', 'update', 'updateOne', 'updateMany'], async function () {
164
+ schema.post(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function () {
127
165
  const update = this.getUpdate();
128
166
  if (update && this._context.isNew) {
129
167
  const cursor = this.model.findOne(update).cursor();
130
- await cursor.eachAsync(async (doc) => {
168
+ await cursor.eachAsync((doc) => {
131
169
  const current = doc.toObject({ depopulate: true });
132
- if (opts.eventCreated) {
133
- em.emit(opts.eventCreated, { doc: current });
170
+ if (this._context.createdDocs) {
171
+ this._context.createdDocs.push(current);
172
+ }
173
+ else {
174
+ this._context.createdDocs = [current];
134
175
  }
135
- await createPatch(opts, this._context, current);
136
176
  });
177
+ await createPatch(opts, this._context);
178
+ }
179
+ });
180
+ schema.pre('remove', async function (next) {
181
+ const original = this.toObject({ depopulate: true });
182
+ const model = this.constructor;
183
+ const context = {
184
+ op: 'delete',
185
+ modelName: opts.modelName ?? model.modelName,
186
+ collectionName: opts.collectionName ?? model.collection.collectionName
187
+ };
188
+ try {
189
+ if (opts.eventDeleted) {
190
+ em.emit(opts.eventDeleted, { oldDoc: original });
191
+ }
192
+ await deletePatch(opts, context);
193
+ next();
194
+ }
195
+ catch (error) {
196
+ next(error);
137
197
  }
138
198
  });
139
199
  schema.pre(['remove', 'findOneAndDelete', 'findOneAndRemove', 'deleteOne', 'deleteMany'], options, async function (next) {
140
200
  const filter = this.getFilter();
141
201
  const options = this.getOptions();
142
202
  const ignore = options.__ignore;
143
- const context = {
203
+ if (ignore)
204
+ return next();
205
+ this._context = {
144
206
  op: this.op,
145
207
  modelName: opts.modelName ?? this.model.modelName,
146
208
  collectionName: opts.collectionName ?? this.model.collection.collectionName
147
209
  };
148
- if (!ignore) {
149
- context.deletedDocs = await this.model.find(filter).exec();
150
- if (opts.preDeleteManyCallback) {
151
- await opts.preDeleteManyCallback(context.deletedDocs);
210
+ if (['remove', 'deleteMany'].includes(this._context.op) && !options.single) {
211
+ const docs = await this.model.find(filter).exec();
212
+ if (!_.isEmpty(docs)) {
213
+ this._context.deletedDocs = docs;
214
+ }
215
+ }
216
+ else {
217
+ const doc = await this.model.findOne(filter).exec();
218
+ if (!_.isEmpty(doc)) {
219
+ this._context.deletedDocs = [doc];
152
220
  }
153
221
  }
154
- this._context = context;
222
+ if (opts.preDeleteManyCallback && _.isArray(this._context.deletedDocs) && !_.isEmpty(this._context.deletedDocs)) {
223
+ await opts.preDeleteManyCallback(this._context.deletedDocs);
224
+ }
155
225
  next();
156
226
  });
157
227
  schema.post(['remove', 'findOneAndDelete', 'findOneAndRemove', 'deleteOne', 'deleteMany'], options, async function () {
158
- if (_.isEmpty(this._context.deletedDocs) || (!opts.eventDeleted && opts.patchHistoryDisabled))
159
- return;
160
- const chunks = _.chunk(this._context.deletedDocs, 1000);
161
- for await (const chunk of chunks) {
162
- const bulk = [];
163
- for (const oldDoc of chunk) {
164
- if (opts.eventDeleted) {
165
- em.emit(opts.eventDeleted, { oldDoc });
166
- }
167
- if (!opts.patchHistoryDisabled) {
168
- bulk.push({
169
- insertOne: {
170
- document: {
171
- op: this._context.op,
172
- modelName: this._context.modelName,
173
- collectionName: this._context.collectionName,
174
- collectionId: oldDoc._id,
175
- doc: oldDoc,
176
- version: 0
177
- }
178
- }
179
- });
180
- }
181
- }
182
- if (!opts.patchHistoryDisabled) {
183
- await History.bulkWrite(bulk, { ordered: false }).catch((err) => {
184
- console.error(err);
185
- });
186
- }
187
- }
228
+ await deletePatch(opts, this._context);
188
229
  });
189
230
  };
190
231
  //# sourceMappingURL=plugin.js.map