ts-patch-mongoose 1.2.1 → 1.2.3

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.
@@ -32,9 +32,35 @@ const deleteMethods = [
32
32
  'deleteOne',
33
33
  'deleteMany'
34
34
  ];
35
+ function splitUpdateAndCommands(updateQuery) {
36
+ let update = {};
37
+ const commands = [];
38
+ if (!lodash_1.default.isEmpty(updateQuery) && !lodash_1.default.isArray(updateQuery) && lodash_1.default.isObjectLike(updateQuery)) {
39
+ update = lodash_1.default.cloneDeep(updateQuery);
40
+ const keys = lodash_1.default.keys(update).filter((key) => key.startsWith('$'));
41
+ if (!lodash_1.default.isEmpty(keys)) {
42
+ lodash_1.default.forEach(keys, (key) => {
43
+ commands.push({ [key]: update[key] });
44
+ delete update[key];
45
+ });
46
+ }
47
+ }
48
+ return { update, commands };
49
+ }
50
+ function assignUpdate(document, update, commands) {
51
+ let updated = (0, power_assign_1.assign)(document, update);
52
+ lodash_1.default.forEach(commands, (command) => {
53
+ try {
54
+ updated = (0, power_assign_1.assign)(updated, command);
55
+ }
56
+ catch {
57
+ }
58
+ });
59
+ return updated;
60
+ }
35
61
  exports.patchEventEmitter = em_1.default;
36
62
  const patchHistoryPlugin = function plugin(schema, opts) {
37
- schema.pre('save', async function (next) {
63
+ schema.pre('save', async function () {
38
64
  const current = this.toObject(toObjectOptions);
39
65
  const model = this.constructor;
40
66
  const context = {
@@ -52,9 +78,8 @@ const patchHistoryPlugin = function plugin(schema, opts) {
52
78
  await (0, patch_1.updatePatch)(opts, context, current, original);
53
79
  }
54
80
  }
55
- next();
56
81
  });
57
- schema.post('insertMany', async function (docs, next) {
82
+ schema.post('insertMany', async function (docs) {
58
83
  const context = {
59
84
  op: 'create',
60
85
  modelName: opts.modelName ?? this.modelName,
@@ -62,64 +87,47 @@ const patchHistoryPlugin = function plugin(schema, opts) {
62
87
  createdDocs: docs
63
88
  };
64
89
  await (0, patch_1.createPatch)(opts, context);
65
- next();
66
90
  });
67
- schema.pre(updateMethods, async function (next) {
91
+ schema.pre(updateMethods, async function () {
68
92
  const options = this.getOptions();
69
93
  if (options.ignoreHook)
70
- return next();
94
+ return;
71
95
  const filter = this.getFilter();
72
- const update = lodash_1.default.cloneDeep(this.getUpdate());
73
96
  const count = await this.model.count(filter).exec();
74
- const commands = [];
75
97
  this._context = {
76
98
  op: this.op,
77
99
  modelName: opts.modelName ?? this.model.modelName,
78
100
  collectionName: opts.collectionName ?? this.model.collection.collectionName,
79
101
  isNew: options.upsert && count === 0
80
102
  };
81
- if (update) {
82
- delete update.$setOnInsert;
83
- const keys = lodash_1.default.keys(update).filter((key) => key.startsWith('$'));
84
- if (!lodash_1.default.isEmpty(keys)) {
85
- lodash_1.default.forEach(keys, (key) => {
86
- commands.push({ [key]: update[key] });
87
- delete update[key];
88
- });
89
- }
90
- }
103
+ const updateQuery = this.getUpdate();
104
+ const { update, commands } = splitUpdateAndCommands(updateQuery);
91
105
  const cursor = this.model.find(filter).cursor();
92
106
  await cursor.eachAsync(async (doc) => {
93
- let current = doc.toObject(toObjectOptions);
107
+ const current = assignUpdate(doc.toObject(toObjectOptions), update, commands);
94
108
  const original = doc.toObject(toObjectOptions);
95
- current = (0, power_assign_1.assign)(current, update);
96
- lodash_1.default.forEach(commands, (command) => {
97
- try {
98
- current = (0, power_assign_1.assign)(current, command);
99
- }
100
- catch (error) {
101
- }
102
- });
103
109
  await (0, patch_1.updatePatch)(opts, this._context, current, original);
104
110
  });
105
- next();
106
111
  });
107
- schema.post(updateMethods, async function (_, next) {
112
+ schema.post(updateMethods, async function () {
108
113
  const options = this.getOptions();
109
114
  if (options.ignoreHook)
110
- return next();
111
- const update = this.getUpdate();
112
- if (!update || !this._context.isNew)
113
115
  return;
114
- const found = await this.model.findOne(update).exec();
115
- if (found) {
116
- const current = found.toObject(toObjectOptions);
117
- this._context.createdDocs = [current];
118
- await (0, patch_1.createPatch)(opts, this._context);
116
+ if (!this._context.isNew)
117
+ return;
118
+ const updateQuery = this.getUpdate();
119
+ const { update, commands } = splitUpdateAndCommands(updateQuery);
120
+ const filter = assignUpdate({}, update, commands);
121
+ if (!lodash_1.default.isEmpty(filter)) {
122
+ const found = await this.model.findOne(update).exec();
123
+ if (found) {
124
+ const current = found.toObject(toObjectOptions);
125
+ this._context.createdDocs = [current];
126
+ await (0, patch_1.createPatch)(opts, this._context);
127
+ }
119
128
  }
120
- next();
121
129
  });
122
- schema.post('remove', async function (_, next) {
130
+ schema.post('remove', async function () {
123
131
  const original = this.toObject(toObjectOptions);
124
132
  const model = this.constructor;
125
133
  const context = {
@@ -131,12 +139,11 @@ const patchHistoryPlugin = function plugin(schema, opts) {
131
139
  em_1.default.emit(opts.eventDeleted, { oldDoc: original });
132
140
  }
133
141
  await (0, patch_1.deletePatch)(opts, context);
134
- next();
135
142
  });
136
- schema.pre(deleteMethods, options, async function (next) {
143
+ schema.pre(deleteMethods, options, async function () {
137
144
  const options = this.getOptions();
138
145
  if (options.ignoreHook)
139
- return next();
146
+ return;
140
147
  const filter = this.getFilter();
141
148
  this._context = {
142
149
  op: this.op,
@@ -158,14 +165,12 @@ const patchHistoryPlugin = function plugin(schema, opts) {
158
165
  if (opts.preDeleteCallback && lodash_1.default.isArray(this._context.deletedDocs) && !lodash_1.default.isEmpty(this._context.deletedDocs)) {
159
166
  await opts.preDeleteCallback(this._context.deletedDocs);
160
167
  }
161
- next();
162
168
  });
163
- schema.post(deleteMethods, options, async function (_, next) {
169
+ schema.post(deleteMethods, options, async function () {
164
170
  const options = this.getOptions();
165
171
  if (options.ignoreHook)
166
- return next();
172
+ return;
167
173
  await (0, patch_1.deletePatch)(opts, this._context);
168
- next();
169
174
  });
170
175
  };
171
176
  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 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,KAAK,EAAoB,KAAK,EAA2B,MAAM,EAAmB,MAAM,UAAU,CAAA;AAEzG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAwC7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IAkKlG,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,KAAK,EAAoB,KAAK,EAA2B,MAAM,EAA+D,MAAM,UAAU,CAAA;AAErJ,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAwE7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IAoIlG,CAAA"}
@@ -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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"}
@@ -28,9 +28,35 @@ const deleteMethods = [
28
28
  'deleteOne',
29
29
  'deleteMany'
30
30
  ];
31
+ function splitUpdateAndCommands(updateQuery) {
32
+ let update = {};
33
+ const commands = [];
34
+ if (!_.isEmpty(updateQuery) && !_.isArray(updateQuery) && _.isObjectLike(updateQuery)) {
35
+ update = _.cloneDeep(updateQuery);
36
+ const keys = _.keys(update).filter((key) => key.startsWith('$'));
37
+ if (!_.isEmpty(keys)) {
38
+ _.forEach(keys, (key) => {
39
+ commands.push({ [key]: update[key] });
40
+ delete update[key];
41
+ });
42
+ }
43
+ }
44
+ return { update, commands };
45
+ }
46
+ function assignUpdate(document, update, commands) {
47
+ let updated = assign(document, update);
48
+ _.forEach(commands, (command) => {
49
+ try {
50
+ updated = assign(updated, command);
51
+ }
52
+ catch {
53
+ }
54
+ });
55
+ return updated;
56
+ }
31
57
  export const patchEventEmitter = em;
32
58
  export const patchHistoryPlugin = function plugin(schema, opts) {
33
- schema.pre('save', async function (next) {
59
+ schema.pre('save', async function () {
34
60
  const current = this.toObject(toObjectOptions);
35
61
  const model = this.constructor;
36
62
  const context = {
@@ -48,9 +74,8 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
48
74
  await updatePatch(opts, context, current, original);
49
75
  }
50
76
  }
51
- next();
52
77
  });
53
- schema.post('insertMany', async function (docs, next) {
78
+ schema.post('insertMany', async function (docs) {
54
79
  const context = {
55
80
  op: 'create',
56
81
  modelName: opts.modelName ?? this.modelName,
@@ -58,64 +83,47 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
58
83
  createdDocs: docs
59
84
  };
60
85
  await createPatch(opts, context);
61
- next();
62
86
  });
63
- schema.pre(updateMethods, async function (next) {
87
+ schema.pre(updateMethods, async function () {
64
88
  const options = this.getOptions();
65
89
  if (options.ignoreHook)
66
- return next();
90
+ return;
67
91
  const filter = this.getFilter();
68
- const update = _.cloneDeep(this.getUpdate());
69
92
  const count = await this.model.count(filter).exec();
70
- const commands = [];
71
93
  this._context = {
72
94
  op: this.op,
73
95
  modelName: opts.modelName ?? this.model.modelName,
74
96
  collectionName: opts.collectionName ?? this.model.collection.collectionName,
75
97
  isNew: options.upsert && count === 0
76
98
  };
77
- if (update) {
78
- delete update.$setOnInsert;
79
- const keys = _.keys(update).filter((key) => key.startsWith('$'));
80
- if (!_.isEmpty(keys)) {
81
- _.forEach(keys, (key) => {
82
- commands.push({ [key]: update[key] });
83
- delete update[key];
84
- });
85
- }
86
- }
99
+ const updateQuery = this.getUpdate();
100
+ const { update, commands } = splitUpdateAndCommands(updateQuery);
87
101
  const cursor = this.model.find(filter).cursor();
88
102
  await cursor.eachAsync(async (doc) => {
89
- let current = doc.toObject(toObjectOptions);
103
+ const current = assignUpdate(doc.toObject(toObjectOptions), update, commands);
90
104
  const original = doc.toObject(toObjectOptions);
91
- current = assign(current, update);
92
- _.forEach(commands, (command) => {
93
- try {
94
- current = assign(current, command);
95
- }
96
- catch (error) {
97
- }
98
- });
99
105
  await updatePatch(opts, this._context, current, original);
100
106
  });
101
- next();
102
107
  });
103
- schema.post(updateMethods, async function (_, next) {
108
+ schema.post(updateMethods, async function () {
104
109
  const options = this.getOptions();
105
110
  if (options.ignoreHook)
106
- return next();
107
- const update = this.getUpdate();
108
- if (!update || !this._context.isNew)
109
111
  return;
110
- const found = await this.model.findOne(update).exec();
111
- if (found) {
112
- const current = found.toObject(toObjectOptions);
113
- this._context.createdDocs = [current];
114
- await createPatch(opts, this._context);
112
+ if (!this._context.isNew)
113
+ return;
114
+ const updateQuery = this.getUpdate();
115
+ const { update, commands } = splitUpdateAndCommands(updateQuery);
116
+ const filter = assignUpdate({}, update, commands);
117
+ if (!_.isEmpty(filter)) {
118
+ const found = await this.model.findOne(update).exec();
119
+ if (found) {
120
+ const current = found.toObject(toObjectOptions);
121
+ this._context.createdDocs = [current];
122
+ await createPatch(opts, this._context);
123
+ }
115
124
  }
116
- next();
117
125
  });
118
- schema.post('remove', async function (_, next) {
126
+ schema.post('remove', async function () {
119
127
  const original = this.toObject(toObjectOptions);
120
128
  const model = this.constructor;
121
129
  const context = {
@@ -127,12 +135,11 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
127
135
  em.emit(opts.eventDeleted, { oldDoc: original });
128
136
  }
129
137
  await deletePatch(opts, context);
130
- next();
131
138
  });
132
- schema.pre(deleteMethods, options, async function (next) {
139
+ schema.pre(deleteMethods, options, async function () {
133
140
  const options = this.getOptions();
134
141
  if (options.ignoreHook)
135
- return next();
142
+ return;
136
143
  const filter = this.getFilter();
137
144
  this._context = {
138
145
  op: this.op,
@@ -154,14 +161,12 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
154
161
  if (opts.preDeleteCallback && _.isArray(this._context.deletedDocs) && !_.isEmpty(this._context.deletedDocs)) {
155
162
  await opts.preDeleteCallback(this._context.deletedDocs);
156
163
  }
157
- next();
158
164
  });
159
- schema.post(deleteMethods, options, async function (_, next) {
165
+ schema.post(deleteMethods, options, async function () {
160
166
  const options = this.getOptions();
161
167
  if (options.ignoreHook)
162
- return next();
168
+ return;
163
169
  await deletePatch(opts, this._context);
164
- next();
165
170
  });
166
171
  };
167
172
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,KAAK,EAAoB,KAAK,EAA2B,MAAM,EAAmB,MAAM,UAAU,CAAA;AAEzG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAwC7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IAkKlG,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,KAAK,EAAoB,KAAK,EAA2B,MAAM,EAA+D,MAAM,UAAU,CAAA;AAErJ,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAwE7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IAoIlG,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-patch-mongoose",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "description": "Patch history & events for mongoose models",
5
5
  "author": "Alex Eagle",
6
6
  "license": "MIT",
@@ -83,16 +83,16 @@
83
83
  "devDependencies": {
84
84
  "@shelf/jest-mongodb": "4.1.7",
85
85
  "@swc/cli": "0.1.62",
86
- "@swc/core": "1.3.51",
86
+ "@swc/core": "1.3.53",
87
87
  "@swc/helpers": "0.5.0",
88
88
  "@swc/jest": "0.2.26",
89
89
  "@swc/register": "0.1.10",
90
- "@types/jest": "29.5.0",
90
+ "@types/jest": "29.5.1",
91
91
  "@types/lodash": "4.14.194",
92
- "@types/node": "18.15.11",
92
+ "@types/node": "18.15.13",
93
93
  "@typescript-eslint/eslint-plugin": "5.59.0",
94
94
  "@typescript-eslint/parser": "5.59.0",
95
- "eslint": "8.38.0",
95
+ "eslint": "8.39.0",
96
96
  "eslint-config-standard": "17.0.0",
97
97
  "eslint-plugin-import": "2.27.5",
98
98
  "eslint-plugin-jest": "27.2.1",
@@ -105,6 +105,7 @@
105
105
  "merge": "2.1.1",
106
106
  "mongoose": "6.10.5",
107
107
  "open-cli": "7.2.0",
108
+ "ts-node": "10.9.1",
108
109
  "typescript": "5.0.4"
109
110
  },
110
111
  "peerDependencies": {
package/src/plugin.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import _ from 'lodash'
2
2
  import { assign } from 'power-assign'
3
3
 
4
- import type { HydratedDocument, Model, MongooseQueryMiddleware, Schema, ToObjectOptions } from 'mongoose'
4
+ import type { HydratedDocument, Model, MongooseQueryMiddleware, Schema, ToObjectOptions, UpdateQuery, UpdateWithAggregationPipeline } from 'mongoose'
5
5
 
6
6
  import type IPluginOptions from './interfaces/IPluginOptions'
7
7
  import type IContext from './interfaces/IContext'
@@ -40,6 +40,38 @@ const deleteMethods = [
40
40
  'deleteMany'
41
41
  ]
42
42
 
43
+ function splitUpdateAndCommands<T> (updateQuery: UpdateWithAggregationPipeline | UpdateQuery<T> | null): { update: UpdateQuery<T>, commands: Record<string, unknown>[] } {
44
+ let update: UpdateQuery<T> = {}
45
+ const commands: Record<string, unknown>[] = []
46
+
47
+ if (!_.isEmpty(updateQuery) && !_.isArray(updateQuery) && _.isObjectLike(updateQuery)) {
48
+ update = _.cloneDeep(updateQuery)
49
+ const keys = _.keys(update).filter((key) => key.startsWith('$'))
50
+ if (!_.isEmpty(keys)) {
51
+ _.forEach(keys, (key) => {
52
+ commands.push({ [key]: update[key] as unknown })
53
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
54
+ delete update[key]
55
+ })
56
+ }
57
+ }
58
+
59
+ return { update, commands }
60
+ }
61
+
62
+ function assignUpdate<T> (document: HydratedDocument<T>, update: UpdateQuery<T>, commands: Record<string, unknown>[]): HydratedDocument<T> {
63
+ let updated = assign(document, update)
64
+ _.forEach(commands, (command) => {
65
+ try {
66
+ updated = assign(updated, command)
67
+ } catch {
68
+ // we catch assign keys that are not implemented
69
+ }
70
+ })
71
+
72
+ return updated
73
+ }
74
+
43
75
  /**
44
76
  * @description Patch patch event emitter
45
77
  */
@@ -52,7 +84,7 @@ export const patchEventEmitter = em
52
84
  * @returns {void}
53
85
  */
54
86
  export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: IPluginOptions<T>): void {
55
- schema.pre('save', async function (next) {
87
+ schema.pre('save', async function () {
56
88
  const current = this.toObject(toObjectOptions) as HydratedDocument<T>
57
89
  const model = this.constructor as Model<T>
58
90
 
@@ -71,11 +103,9 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
71
103
  await updatePatch(opts, context, current, original)
72
104
  }
73
105
  }
74
-
75
- next()
76
106
  })
77
107
 
78
- schema.post('insertMany', async function (docs, next) {
108
+ schema.post('insertMany', async function (docs) {
79
109
  const context = {
80
110
  op: 'create',
81
111
  modelName: opts.modelName ?? this.modelName,
@@ -84,18 +114,14 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
84
114
  }
85
115
 
86
116
  await createPatch(opts, context)
87
-
88
- next()
89
117
  })
90
118
 
91
- schema.pre(updateMethods as MongooseQueryMiddleware[], async function (this: IHookContext<T>, next) {
119
+ schema.pre(updateMethods as MongooseQueryMiddleware[], async function (this: IHookContext<T>) {
92
120
  const options = this.getOptions()
93
- if (options.ignoreHook) return next()
121
+ if (options.ignoreHook) return
94
122
 
95
123
  const filter = this.getFilter()
96
- const update = _.cloneDeep(this.getUpdate()) as Record<string, Partial<T>> | null
97
124
  const count = await this.model.count(filter).exec()
98
- const commands: Record<string, Partial<T>>[] = []
99
125
 
100
126
  this._context = {
101
127
  op: this.op,
@@ -104,58 +130,40 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
104
130
  isNew: options.upsert && count === 0
105
131
  }
106
132
 
107
- if (update) {
108
- delete update.$setOnInsert
109
- const keys = _.keys(update).filter((key) => key.startsWith('$'))
110
- if (!_.isEmpty(keys)) {
111
- _.forEach(keys, (key) => {
112
- commands.push({ [key]: update[key] })
113
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
114
- delete update[key]
115
- })
116
- }
117
- }
133
+ const updateQuery = this.getUpdate()
134
+ const { update, commands } = splitUpdateAndCommands(updateQuery)
118
135
 
119
136
  const cursor = this.model.find<HydratedDocument<T>>(filter).cursor()
120
137
  await cursor.eachAsync(async (doc) => {
121
- let current = doc.toObject(toObjectOptions) as HydratedDocument<T>
138
+ const current = assignUpdate(doc.toObject(toObjectOptions) as HydratedDocument<T>, update, commands)
122
139
  const original = doc.toObject(toObjectOptions) as HydratedDocument<T>
123
140
 
124
- current = assign(current, update)
125
- _.forEach(commands, (command) => {
126
- try {
127
- current = assign(current, command)
128
- } catch (error) {
129
- // we catch assign keys that are not implemented
130
- }
131
- })
132
-
133
141
  await updatePatch(opts, this._context, current, original)
134
142
  })
135
-
136
- next()
137
143
  })
138
144
 
139
- schema.post(updateMethods as MongooseQueryMiddleware[], async function (this: IHookContext<T>, _, next) {
145
+ schema.post(updateMethods as MongooseQueryMiddleware[], async function (this: IHookContext<T>) {
140
146
  const options = this.getOptions()
141
- if (options.ignoreHook) return next()
147
+ if (options.ignoreHook) return
142
148
 
143
- const update = this.getUpdate()
149
+ if (!this._context.isNew) return
144
150
 
145
- if (!update || !this._context.isNew) return
151
+ const updateQuery = this.getUpdate()
152
+ const { update, commands } = splitUpdateAndCommands(updateQuery)
146
153
 
147
- const found = await this.model.findOne<HydratedDocument<T>>(update).exec()
148
- if (found) {
149
- const current = found.toObject(toObjectOptions) as HydratedDocument<T>
150
- this._context.createdDocs = [current]
154
+ const filter = assignUpdate({} as HydratedDocument<T>, update, commands)
155
+ if (!_.isEmpty(filter)) {
156
+ const found = await this.model.findOne<HydratedDocument<T>>(update).exec()
157
+ if (found) {
158
+ const current = found.toObject(toObjectOptions) as HydratedDocument<T>
159
+ this._context.createdDocs = [current]
151
160
 
152
- await createPatch(opts, this._context)
161
+ await createPatch(opts, this._context)
162
+ }
153
163
  }
154
-
155
- next()
156
164
  })
157
165
 
158
- schema.post('remove', async function (this: HydratedDocument<T>, _, next) {
166
+ schema.post('remove', async function (this: HydratedDocument<T>) {
159
167
  const original = this.toObject(toObjectOptions)
160
168
  const model = this.constructor as Model<T>
161
169
 
@@ -170,13 +178,11 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
170
178
  }
171
179
 
172
180
  await deletePatch(opts, context)
173
-
174
- next()
175
181
  })
176
182
 
177
- schema.pre(deleteMethods as MongooseQueryMiddleware[], options, async function (this: IHookContext<T>, next) {
183
+ schema.pre(deleteMethods as MongooseQueryMiddleware[], options, async function (this: IHookContext<T>) {
178
184
  const options = this.getOptions()
179
- if (options.ignoreHook) return next()
185
+ if (options.ignoreHook) return
180
186
 
181
187
  const filter = this.getFilter()
182
188
 
@@ -201,16 +207,12 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
201
207
  if (opts.preDeleteCallback && _.isArray(this._context.deletedDocs) && !_.isEmpty(this._context.deletedDocs)) {
202
208
  await opts.preDeleteCallback(this._context.deletedDocs)
203
209
  }
204
-
205
- next()
206
210
  })
207
211
 
208
- schema.post(deleteMethods as MongooseQueryMiddleware[], options, async function (this: IHookContext<T>, _, next) {
212
+ schema.post(deleteMethods as MongooseQueryMiddleware[], options, async function (this: IHookContext<T>) {
209
213
  const options = this.getOptions()
210
- if (options.ignoreHook) return next()
214
+ if (options.ignoreHook) return
211
215
 
212
216
  await deletePatch(opts, this._context)
213
-
214
- next()
215
217
  })
216
218
  }
@@ -98,7 +98,7 @@ describe('plugin - event updated & patch history disabled', () => {
98
98
  expect(em.emit).toHaveBeenCalledTimes(3)
99
99
 
100
100
  // Confirm that the document is updated
101
- const updated = await User.find({})
101
+ const updated = await User.find({}).sort({ name: 1 })
102
102
  expect(updated).toHaveLength(3)
103
103
  const [alice, bob, john] = updated
104
104
  expect(alice.role).toBe('manager')
@@ -123,7 +123,7 @@ describe('plugin - event updated & patch history disabled', () => {
123
123
  expect(em.emit).toHaveBeenCalledTimes(1)
124
124
 
125
125
  // Confirm that the document is updated
126
- const updated = await User.find({})
126
+ const updated = await User.find({}).sort({ name: 1 })
127
127
  expect(updated).toHaveLength(3)
128
128
  const [alice, bob, john] = updated
129
129
  expect(alice.role).toBe('user')
@@ -172,7 +172,7 @@ describe('plugin - event updated & patch history disabled', () => {
172
172
  })
173
173
 
174
174
  // Confirm that the document is updated
175
- const updated = await User.find({})
175
+ const updated = await User.find({}).sort({ name: 1 })
176
176
  expect(updated).toHaveLength(3)
177
177
  const [alice, bob, john] = updated
178
178
  expect(alice.role).toBe('user')
@@ -197,7 +197,7 @@ describe('plugin - event updated & patch history disabled', () => {
197
197
  expect(em.emit).toHaveBeenCalledTimes(3)
198
198
 
199
199
  // Confirm that the document is updated
200
- const updated = await User.find({})
200
+ const updated = await User.find({}).sort({ name: 1 })
201
201
  expect(updated).toHaveLength(3)
202
202
  const [alice, bob, john] = updated
203
203
  expect(alice.role).toBe('manager')