ts-patch-mongoose 2.3.1 → 2.4.0

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.
Files changed (61) hide show
  1. package/README.md +9 -6
  2. package/dist/cjs/helpers.js +12 -0
  3. package/dist/cjs/helpers.js.map +1 -0
  4. package/dist/cjs/hooks/delete-hooks.js +55 -0
  5. package/dist/cjs/hooks/delete-hooks.js.map +1 -0
  6. package/dist/cjs/hooks/save-hooks.js +28 -0
  7. package/dist/cjs/hooks/save-hooks.js.map +1 -0
  8. package/dist/cjs/hooks/update-hooks.js +89 -0
  9. package/dist/cjs/hooks/update-hooks.js.map +1 -0
  10. package/dist/cjs/plugin.js +26 -163
  11. package/dist/cjs/plugin.js.map +1 -1
  12. package/dist/cjs/types/helpers.d.ts +4 -0
  13. package/dist/cjs/types/helpers.d.ts.map +1 -0
  14. package/dist/cjs/types/hooks/delete-hooks.d.ts +28 -0
  15. package/dist/cjs/types/hooks/delete-hooks.d.ts.map +1 -0
  16. package/dist/cjs/types/hooks/save-hooks.d.ts +28 -0
  17. package/dist/cjs/types/hooks/save-hooks.d.ts.map +1 -0
  18. package/dist/cjs/types/hooks/update-hooks.d.ts +33 -0
  19. package/dist/cjs/types/hooks/update-hooks.d.ts.map +1 -0
  20. package/dist/cjs/types/models/History.d.ts +7 -1
  21. package/dist/cjs/types/models/History.d.ts.map +1 -1
  22. package/dist/cjs/types/plugin.d.ts +3 -1
  23. package/dist/cjs/types/plugin.d.ts.map +1 -1
  24. package/dist/cjs/types/version.d.ts +1 -0
  25. package/dist/cjs/types/version.d.ts.map +1 -1
  26. package/dist/cjs/version.js +2 -1
  27. package/dist/cjs/version.js.map +1 -1
  28. package/dist/esm/helpers.js +12 -0
  29. package/dist/esm/helpers.js.map +1 -0
  30. package/dist/esm/hooks/delete-hooks.js +55 -0
  31. package/dist/esm/hooks/delete-hooks.js.map +1 -0
  32. package/dist/esm/hooks/save-hooks.js +28 -0
  33. package/dist/esm/hooks/save-hooks.js.map +1 -0
  34. package/dist/esm/hooks/update-hooks.js +89 -0
  35. package/dist/esm/hooks/update-hooks.js.map +1 -0
  36. package/dist/esm/plugin.js.map +1 -1
  37. package/dist/esm/plugin.mjs +26 -163
  38. package/dist/esm/types/helpers.d.ts +4 -0
  39. package/dist/esm/types/helpers.d.ts.map +1 -0
  40. package/dist/esm/types/hooks/delete-hooks.d.ts +28 -0
  41. package/dist/esm/types/hooks/delete-hooks.d.ts.map +1 -0
  42. package/dist/esm/types/hooks/save-hooks.d.ts +28 -0
  43. package/dist/esm/types/hooks/save-hooks.d.ts.map +1 -0
  44. package/dist/esm/types/hooks/update-hooks.d.ts +33 -0
  45. package/dist/esm/types/hooks/update-hooks.d.ts.map +1 -0
  46. package/dist/esm/types/models/History.d.ts +7 -1
  47. package/dist/esm/types/models/History.d.ts.map +1 -1
  48. package/dist/esm/types/plugin.d.ts +3 -1
  49. package/dist/esm/types/plugin.d.ts.map +1 -1
  50. package/dist/esm/types/version.d.ts +1 -0
  51. package/dist/esm/types/version.d.ts.map +1 -1
  52. package/dist/esm/version.js +2 -1
  53. package/dist/esm/version.js.map +1 -1
  54. package/package.json +11 -11
  55. package/src/helpers.ts +10 -0
  56. package/src/hooks/delete-hooks.ts +59 -0
  57. package/src/hooks/save-hooks.ts +29 -0
  58. package/src/hooks/update-hooks.ts +100 -0
  59. package/src/plugin.ts +42 -194
  60. package/src/version.ts +1 -0
  61. package/tests/plugin-event-deleted.test.ts +13 -10
package/README.md CHANGED
@@ -26,7 +26,7 @@ I need to track changes of mongoose models and save them as patch history (audit
26
26
  ```json
27
27
  {
28
28
  "node": "16.x || 18.x || 20.x",
29
- "mongoose": ">=6.6.x || 7.x",
29
+ "mongoose": "6.6.x || 7.x || 8.x",
30
30
  }
31
31
  ```
32
32
 
@@ -49,15 +49,18 @@ npm install ts-patch-mongoose
49
49
  yarn add ts-patch-mongoose
50
50
  ```
51
51
 
52
- - This plugin requires mongoose `>=6.6.x || 7.x` to be installed as a peer dependency
52
+ - This plugin requires mongoose `6.6.x || 7.x || 8.x` to be installed as a peer dependency
53
53
 
54
54
  ```bash
55
55
  # For mongoose 6
56
- npm install mongoose@legacy
57
- yarn add mongoose mongoose@legacy
56
+ npm install mongoose@6.12.2
57
+ yarn add mongoose mongoose@6.12.2
58
58
  # For mongoose 7
59
- npm install mongoose@latest
60
- yarn add mongoose@latest
59
+ npm install mongoose@7.6.4
60
+ yarn add mongoose@7.6.4
61
+ # For mongoose 8
62
+ npm install mongoose@8.0.0
63
+ yarn add mongoose@8.0.0
61
64
  ```
62
65
 
63
66
  ## Example
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toObjectOptions = exports.isHookIgnored = void 0;
4
+ const isHookIgnored = (options) => {
5
+ return options.ignoreHook === true || (options.ignoreEvent === true && options.ignorePatchHistory === true);
6
+ };
7
+ exports.isHookIgnored = isHookIgnored;
8
+ exports.toObjectOptions = {
9
+ depopulate: true,
10
+ virtuals: false
11
+ };
12
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";;;AAEO,MAAM,aAAa,GAAG,CAAI,OAAwB,EAAW,EAAE;IACpE,OAAO,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAA;AAC7G,CAAC,CAAA;AAFY,QAAA,aAAa,iBAEzB;AAEY,QAAA,eAAe,GAAoB;IAC9C,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,KAAK;CAChB,CAAA"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteHooksInitialize = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
6
+ const patch_1 = require("../patch");
7
+ const helpers_1 = require("../helpers");
8
+ const deleteMethods = [
9
+ 'remove',
10
+ 'findOneAndDelete',
11
+ 'findOneAndRemove',
12
+ 'findByIdAndDelete',
13
+ 'findByIdAndRemove',
14
+ 'deleteOne',
15
+ 'deleteMany'
16
+ ];
17
+ const deleteHooksInitialize = (schema, opts) => {
18
+ schema.pre(deleteMethods, { document: false, query: true }, async function () {
19
+ const options = this.getOptions();
20
+ if ((0, helpers_1.isHookIgnored)(options))
21
+ return;
22
+ const model = this.model;
23
+ const filter = this.getFilter();
24
+ this._context = {
25
+ op: this.op,
26
+ modelName: opts.modelName ?? this.model.modelName,
27
+ collectionName: opts.collectionName ?? this.model.collection.collectionName,
28
+ ignoreEvent: options.ignoreEvent,
29
+ ignorePatchHistory: options.ignorePatchHistory
30
+ };
31
+ if (['remove', 'deleteMany'].includes(this._context.op) && !options.single) {
32
+ const docs = await model.find(filter).lean().exec();
33
+ if (!lodash_1.default.isEmpty(docs)) {
34
+ this._context.deletedDocs = docs;
35
+ }
36
+ }
37
+ else {
38
+ const doc = await model.findOne(filter).lean().exec();
39
+ if (!lodash_1.default.isEmpty(doc)) {
40
+ this._context.deletedDocs = [doc];
41
+ }
42
+ }
43
+ if (opts.preDelete && lodash_1.default.isArray(this._context.deletedDocs) && !lodash_1.default.isEmpty(this._context.deletedDocs)) {
44
+ await opts.preDelete(this._context.deletedDocs);
45
+ }
46
+ });
47
+ schema.post(deleteMethods, { document: false, query: true }, async function () {
48
+ const options = this.getOptions();
49
+ if ((0, helpers_1.isHookIgnored)(options))
50
+ return;
51
+ await (0, patch_1.deletePatch)(opts, this._context);
52
+ });
53
+ };
54
+ exports.deleteHooksInitialize = deleteHooksInitialize;
55
+ //# sourceMappingURL=delete-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-hooks.js","sourceRoot":"","sources":["../../../src/hooks/delete-hooks.ts"],"names":[],"mappings":";;;;AAAA,4DAAsB;AAEtB,oCAAsC;AACtC,wCAA0C;AAM1C,MAAM,aAAa,GAAG;IACpB,QAAQ;IACR,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,WAAW;IACX,YAAY;CACb,CAAA;AAEM,MAAM,qBAAqB,GAAG,CAAI,MAAiB,EAAE,IAAuB,EAAQ,EAAE;IAC3F,MAAM,CAAC,GAAG,CAAC,aAA0C,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK;QAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,IAAA,uBAAa,EAAC,OAAO,CAAC;YAAE,OAAM;QAElC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAiB,CAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAE/B,IAAI,CAAC,QAAQ,GAAG;YACd,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YACjD,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc;YAC3E,WAAW,EAAE,OAAO,CAAC,WAAsB;YAC3C,kBAAkB,EAAE,OAAO,CAAC,kBAA6B;SAC1D,CAAA;QAED,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC1E,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;YACnD,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACpB,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAA6B,CAAA;aAC1D;SACF;aAAM;YACL,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;YACrD,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,GAAG,CAA0B,CAAA;aAC3D;SACF;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,gBAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACnG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;SAChD;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,aAA0C,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK;QAC7F,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,IAAA,uBAAa,EAAC,OAAO,CAAC;YAAE,OAAM;QAElC,MAAM,IAAA,mBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAvCY,QAAA,qBAAqB,yBAuCjC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.saveHooksInitialize = void 0;
4
+ const patch_1 = require("../patch");
5
+ const helpers_1 = require("../helpers");
6
+ const saveHooksInitialize = (schema, opts) => {
7
+ schema.pre('save', async function () {
8
+ const current = this.toObject(helpers_1.toObjectOptions);
9
+ const model = this.constructor;
10
+ const context = {
11
+ op: this.isNew ? 'create' : 'update',
12
+ modelName: opts.modelName ?? model.modelName,
13
+ collectionName: opts.collectionName ?? model.collection.collectionName,
14
+ createdDocs: [current]
15
+ };
16
+ if (this.isNew) {
17
+ await (0, patch_1.createPatch)(opts, context);
18
+ }
19
+ else {
20
+ const original = await model.findById(current._id).lean().exec();
21
+ if (original) {
22
+ await (0, patch_1.updatePatch)(opts, context, current, original);
23
+ }
24
+ }
25
+ });
26
+ };
27
+ exports.saveHooksInitialize = saveHooksInitialize;
28
+ //# sourceMappingURL=save-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-hooks.js","sourceRoot":"","sources":["../../../src/hooks/save-hooks.ts"],"names":[],"mappings":";;;AAAA,oCAAmD;AACnD,wCAA4C;AAMrC,MAAM,mBAAmB,GAAG,CAAI,MAAiB,EAAE,IAAuB,EAAQ,EAAE;IACzF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAe,CAAwB,CAAA;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAuB,CAAA;QAE1C,MAAM,OAAO,GAAgB;YAC3B,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACpC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS;YAC5C,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc;YACtE,WAAW,EAAE,CAAC,OAAO,CAAC;SACvB,CAAA;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,IAAA,mBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;SACjC;aAAM;YACL,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;YAChE,IAAI,QAAQ,EAAE;gBACZ,MAAM,IAAA,mBAAW,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAA+B,CAAC,CAAA;aAC3E;SACF;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AArBY,QAAA,mBAAmB,uBAqB/B"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateHooksInitialize = exports.splitUpdateAndCommands = exports.assignUpdate = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
6
+ const power_assign_1 = require("power-assign");
7
+ const patch_1 = require("../patch");
8
+ const helpers_1 = require("../helpers");
9
+ const updateMethods = [
10
+ 'update',
11
+ 'updateOne',
12
+ 'replaceOne',
13
+ 'updateMany',
14
+ 'findOneAndUpdate',
15
+ 'findOneAndReplace',
16
+ 'findByIdAndUpdate'
17
+ ];
18
+ const assignUpdate = (document, update, commands) => {
19
+ let updated = (0, power_assign_1.assign)(document, update);
20
+ lodash_1.default.forEach(commands, (command) => {
21
+ try {
22
+ updated = (0, power_assign_1.assign)(updated, command);
23
+ }
24
+ catch {
25
+ }
26
+ });
27
+ return updated;
28
+ };
29
+ exports.assignUpdate = assignUpdate;
30
+ const splitUpdateAndCommands = (updateQuery) => {
31
+ let update = {};
32
+ const commands = [];
33
+ if (!lodash_1.default.isEmpty(updateQuery) && !lodash_1.default.isArray(updateQuery) && lodash_1.default.isObjectLike(updateQuery)) {
34
+ update = lodash_1.default.cloneDeep(updateQuery);
35
+ const keys = lodash_1.default.keys(update).filter((key) => key.startsWith('$'));
36
+ if (!lodash_1.default.isEmpty(keys)) {
37
+ lodash_1.default.forEach(keys, (key) => {
38
+ commands.push({ [key]: update[key] });
39
+ delete update[key];
40
+ });
41
+ }
42
+ }
43
+ return { update, commands };
44
+ };
45
+ exports.splitUpdateAndCommands = splitUpdateAndCommands;
46
+ const updateHooksInitialize = (schema, opts) => {
47
+ schema.pre(updateMethods, async function () {
48
+ const options = this.getOptions();
49
+ if ((0, helpers_1.isHookIgnored)(options))
50
+ return;
51
+ const model = this.model;
52
+ const filter = this.getFilter();
53
+ const count = await this.model.countDocuments(filter).exec();
54
+ this._context = {
55
+ op: this.op,
56
+ modelName: opts.modelName ?? this.model.modelName,
57
+ collectionName: opts.collectionName ?? this.model.collection.collectionName,
58
+ isNew: options.upsert && count === 0,
59
+ ignoreEvent: options.ignoreEvent,
60
+ ignorePatchHistory: options.ignorePatchHistory
61
+ };
62
+ const updateQuery = this.getUpdate();
63
+ const { update, commands } = (0, exports.splitUpdateAndCommands)(updateQuery);
64
+ const cursor = model.find(filter).lean().cursor();
65
+ await cursor.eachAsync(async (doc) => {
66
+ await (0, patch_1.updatePatch)(opts, this._context, (0, exports.assignUpdate)(doc, update, commands), doc);
67
+ });
68
+ });
69
+ schema.post(updateMethods, async function () {
70
+ const options = this.getOptions();
71
+ if ((0, helpers_1.isHookIgnored)(options))
72
+ return;
73
+ if (!this._context.isNew)
74
+ return;
75
+ const model = this.model;
76
+ const updateQuery = this.getUpdate();
77
+ const { update, commands } = (0, exports.splitUpdateAndCommands)(updateQuery);
78
+ const filter = (0, exports.assignUpdate)({}, update, commands);
79
+ if (!lodash_1.default.isEmpty(filter)) {
80
+ const current = await model.findOne(update).lean().exec();
81
+ if (current) {
82
+ this._context.createdDocs = [current];
83
+ await (0, patch_1.createPatch)(opts, this._context);
84
+ }
85
+ }
86
+ });
87
+ };
88
+ exports.updateHooksInitialize = updateHooksInitialize;
89
+ //# sourceMappingURL=update-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-hooks.js","sourceRoot":"","sources":["../../../src/hooks/update-hooks.ts"],"names":[],"mappings":"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"}
@@ -3,83 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.patchHistoryPlugin = exports.patchEventEmitter = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const lodash_1 = tslib_1.__importDefault(require("lodash"));
6
- const power_assign_1 = require("power-assign");
6
+ const em_1 = tslib_1.__importDefault(require("./em"));
7
7
  const patch_1 = require("./patch");
8
8
  const version_1 = require("./version");
9
- const em_1 = tslib_1.__importDefault(require("./em"));
9
+ const helpers_1 = require("./helpers");
10
+ const save_hooks_1 = require("./hooks/save-hooks");
11
+ const update_hooks_1 = require("./hooks/update-hooks");
12
+ const delete_hooks_1 = require("./hooks/delete-hooks");
10
13
  const remove = version_1.isMongooseLessThan7 ? 'remove' : 'deleteOne';
11
- const toObjectOptions = {
12
- depopulate: true,
13
- virtuals: false
14
- };
15
- const updateMethods = [
16
- 'update',
17
- 'updateOne',
18
- 'replaceOne',
19
- 'updateMany',
20
- 'findOneAndUpdate',
21
- 'findOneAndReplace',
22
- 'findByIdAndUpdate'
23
- ];
24
- const deleteMethods = [
25
- 'remove',
26
- 'findOneAndDelete',
27
- 'findOneAndRemove',
28
- 'findByIdAndDelete',
29
- 'findByIdAndRemove',
30
- 'deleteOne',
31
- 'deleteMany'
32
- ];
33
- function isHookIgnored(options) {
34
- return options.ignoreHook === true || (options.ignoreEvent === true && options.ignorePatchHistory === true);
35
- }
36
- function splitUpdateAndCommands(updateQuery) {
37
- let update = {};
38
- const commands = [];
39
- if (!lodash_1.default.isEmpty(updateQuery) && !lodash_1.default.isArray(updateQuery) && lodash_1.default.isObjectLike(updateQuery)) {
40
- update = lodash_1.default.cloneDeep(updateQuery);
41
- const keys = lodash_1.default.keys(update).filter((key) => key.startsWith('$'));
42
- if (!lodash_1.default.isEmpty(keys)) {
43
- lodash_1.default.forEach(keys, (key) => {
44
- commands.push({ [key]: update[key] });
45
- delete update[key];
46
- });
47
- }
48
- }
49
- return { update, commands };
50
- }
51
- function assignUpdate(document, update, commands) {
52
- let updated = (0, power_assign_1.assign)(document, update);
53
- lodash_1.default.forEach(commands, (command) => {
54
- try {
55
- updated = (0, power_assign_1.assign)(updated, command);
56
- }
57
- catch {
58
- }
59
- });
60
- return updated;
61
- }
62
14
  exports.patchEventEmitter = em_1.default;
63
15
  const patchHistoryPlugin = function plugin(schema, opts) {
64
- schema.pre('save', async function () {
65
- const current = this.toObject(toObjectOptions);
66
- const model = this.constructor;
67
- const context = {
68
- op: this.isNew ? 'create' : 'update',
69
- modelName: opts.modelName ?? model.modelName,
70
- collectionName: opts.collectionName ?? model.collection.collectionName,
71
- createdDocs: [current]
72
- };
73
- if (this.isNew) {
74
- await (0, patch_1.createPatch)(opts, context);
75
- }
76
- else {
77
- const original = await model.findById(current._id).lean().exec();
78
- if (original) {
79
- await (0, patch_1.updatePatch)(opts, context, current, original);
80
- }
81
- }
82
- });
16
+ (0, save_hooks_1.saveHooksInitialize)(schema, opts);
17
+ (0, update_hooks_1.updateHooksInitialize)(schema, opts);
18
+ (0, delete_hooks_1.deleteHooksInitialize)(schema, opts);
83
19
  schema.post('insertMany', async function (docs) {
84
20
  const context = {
85
21
  op: 'create',
@@ -89,98 +25,25 @@ const patchHistoryPlugin = function plugin(schema, opts) {
89
25
  };
90
26
  await (0, patch_1.createPatch)(opts, context);
91
27
  });
92
- schema.pre(updateMethods, async function () {
93
- const options = this.getOptions();
94
- if (isHookIgnored(options))
95
- return;
96
- const model = this.model;
97
- const filter = this.getFilter();
98
- const count = await this.model.count(filter).exec();
99
- this._context = {
100
- op: this.op,
101
- modelName: opts.modelName ?? this.model.modelName,
102
- collectionName: opts.collectionName ?? this.model.collection.collectionName,
103
- isNew: options.upsert && count === 0,
104
- ignoreEvent: options.ignoreEvent,
105
- ignorePatchHistory: options.ignorePatchHistory
106
- };
107
- const updateQuery = this.getUpdate();
108
- const { update, commands } = splitUpdateAndCommands(updateQuery);
109
- const cursor = model.find(filter).lean().cursor();
110
- await cursor.eachAsync(async (doc) => {
111
- await (0, patch_1.updatePatch)(opts, this._context, assignUpdate(doc, update, commands), doc);
112
- });
113
- });
114
- schema.post(updateMethods, async function () {
115
- const options = this.getOptions();
116
- if (isHookIgnored(options))
117
- return;
118
- if (!this._context.isNew)
119
- return;
120
- const model = this.model;
121
- const updateQuery = this.getUpdate();
122
- const { update, commands } = splitUpdateAndCommands(updateQuery);
123
- const filter = assignUpdate({}, update, commands);
124
- if (!lodash_1.default.isEmpty(filter)) {
125
- const current = await model.findOne(update).lean().exec();
126
- if (current) {
127
- this._context.createdDocs = [current];
128
- await (0, patch_1.createPatch)(opts, this._context);
28
+ if (version_1.isMongooseLessThan8) {
29
+ schema.pre(remove, { document: true, query: false }, async function () {
30
+ const original = this.toObject(helpers_1.toObjectOptions);
31
+ if (opts.preDelete && !lodash_1.default.isEmpty(original)) {
32
+ await opts.preDelete([original]);
129
33
  }
130
- }
131
- });
132
- schema.pre(remove, { document: true, query: false }, async function () {
133
- const original = this.toObject(toObjectOptions);
134
- if (opts.preDelete && !lodash_1.default.isEmpty(original)) {
135
- await opts.preDelete([original]);
136
- }
137
- });
138
- schema.post(remove, { document: true, query: false }, async function () {
139
- const original = this.toObject(toObjectOptions);
140
- const model = this.constructor;
141
- const context = {
142
- op: 'delete',
143
- modelName: opts.modelName ?? model.modelName,
144
- collectionName: opts.collectionName ?? model.collection.collectionName,
145
- deletedDocs: [original]
146
- };
147
- await (0, patch_1.deletePatch)(opts, context);
148
- });
149
- schema.pre(deleteMethods, { document: false, query: true }, async function () {
150
- const options = this.getOptions();
151
- if (isHookIgnored(options))
152
- return;
153
- const model = this.model;
154
- const filter = this.getFilter();
155
- this._context = {
156
- op: this.op,
157
- modelName: opts.modelName ?? this.model.modelName,
158
- collectionName: opts.collectionName ?? this.model.collection.collectionName,
159
- ignoreEvent: options.ignoreEvent,
160
- ignorePatchHistory: options.ignorePatchHistory
161
- };
162
- if (['remove', 'deleteMany'].includes(this._context.op) && !options.single) {
163
- const docs = await model.find(filter).lean().exec();
164
- if (!lodash_1.default.isEmpty(docs)) {
165
- this._context.deletedDocs = docs;
166
- }
167
- }
168
- else {
169
- const doc = await model.findOne(filter).lean().exec();
170
- if (!lodash_1.default.isEmpty(doc)) {
171
- this._context.deletedDocs = [doc];
172
- }
173
- }
174
- if (opts.preDelete && lodash_1.default.isArray(this._context.deletedDocs) && !lodash_1.default.isEmpty(this._context.deletedDocs)) {
175
- await opts.preDelete(this._context.deletedDocs);
176
- }
177
- });
178
- schema.post(deleteMethods, { document: false, query: true }, async function () {
179
- const options = this.getOptions();
180
- if (isHookIgnored(options))
181
- return;
182
- await (0, patch_1.deletePatch)(opts, this._context);
183
- });
34
+ });
35
+ schema.post(remove, { document: true, query: false }, async function () {
36
+ const original = this.toObject(helpers_1.toObjectOptions);
37
+ const model = this.constructor;
38
+ const context = {
39
+ op: 'delete',
40
+ modelName: opts.modelName ?? model.modelName,
41
+ collectionName: opts.collectionName ?? model.collection.collectionName,
42
+ deletedDocs: [original]
43
+ };
44
+ await (0, patch_1.deletePatch)(opts, context);
45
+ });
46
+ }
184
47
  };
185
48
  exports.patchHistoryPlugin = patchHistoryPlugin;
186
49
  //# sourceMappingURL=plugin.js.map
@@ -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":";;;;AAAA,4DAAsB;AACtB,sDAAqB;AAErB,mCAAkD;AAClD,uCAAoE;AACpE,uCAA2C;AAE3C,mDAAwD;AACxD,uDAA4D;AAC5D,uDAA4D;AAM5D,MAAM,MAAM,GAAG,6BAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAA;AAK9C,QAAA,iBAAiB,GAAG,YAAE,CAAA;AAQ5B,MAAM,kBAAkB,GAAG,SAAS,MAAM,CAAK,MAAiB,EAAE,IAAuB;IAE9F,IAAA,gCAAmB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACjC,IAAA,oCAAqB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACnC,IAAA,oCAAqB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAGnC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,WAAW,IAAI;QAC5C,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,QAAQ;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAC3C,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc;YACrE,WAAW,EAAE,IAAwC;SACtD,CAAA;QAED,MAAM,IAAA,mBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAIF,IAAI,6BAAmB,EAAE;QAEvB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK;YAGxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAe,CAAwB,CAAA;YAEtE,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;aACjC;QACH,CAAC,CAAC,CAAA;QAGF,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAe,CAAwB,CAAA;YACtE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAuB,CAAA;YAE1C,MAAM,OAAO,GAAgB;gBAC3B,EAAE,EAAE,QAAQ;gBACZ,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS;gBAC5C,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc;gBACtE,WAAW,EAAE,CAAC,QAAQ,CAAC;aACxB,CAAA;YAED,MAAM,IAAA,mBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;KACH;AACH,CAAC,CAAA;AA/CY,QAAA,kBAAkB,sBA+C9B"}
@@ -0,0 +1,4 @@
1
+ import type { QueryOptions, ToObjectOptions } from 'mongoose';
2
+ export declare const isHookIgnored: <T>(options: QueryOptions<T>) => boolean;
3
+ export declare const toObjectOptions: ToObjectOptions;
4
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE7D,eAAO,MAAM,aAAa,mCAAkC,OAE3D,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,eAG7B,CAAA"}
@@ -0,0 +1,28 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import type { Model, Schema } from 'mongoose';
26
+ import type IPluginOptions from '../interfaces/IPluginOptions';
27
+ export declare const deleteHooksInitialize: <T>(schema: Schema<T, Model<T, any, any, any, import("mongoose").IfAny<T, any, import("mongoose").Document<unknown, any, T> & import("mongoose").Require_id<T>>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>, import("mongoose").IfAny<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>, any, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>> & import("mongoose").Require_id<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>>>>, opts: IPluginOptions<T>) => void;
28
+ //# sourceMappingURL=delete-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-hooks.d.ts","sourceRoot":"","sources":["../../../../src/hooks/delete-hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAoB,KAAK,EAA2B,MAAM,EAAE,MAAM,UAAU,CAAA;AACxF,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAA;AAa9D,eAAO,MAAM,qBAAqB,y8BAAoD,IAuCrF,CAAA"}
@@ -0,0 +1,28 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import type { Model, Schema } from 'mongoose';
26
+ import type IPluginOptions from '../interfaces/IPluginOptions';
27
+ export declare const saveHooksInitialize: <T>(schema: Schema<T, Model<T, any, any, any, import("mongoose").IfAny<T, any, import("mongoose").Document<unknown, any, T> & import("mongoose").Require_id<T>>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>, import("mongoose").IfAny<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>, any, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>> & import("mongoose").Require_id<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>>>>, opts: IPluginOptions<T>) => void;
28
+ //# sourceMappingURL=save-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-hooks.d.ts","sourceRoot":"","sources":["../../../../src/hooks/save-hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,KAAK,EAAoB,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAA;AAG9D,eAAO,MAAM,mBAAmB,y8BAAoD,IAqBnF,CAAA"}
@@ -0,0 +1,33 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import type { HydratedDocument, Model, Schema, UpdateQuery, UpdateWithAggregationPipeline } from 'mongoose';
26
+ import type IPluginOptions from '../interfaces/IPluginOptions';
27
+ export declare const assignUpdate: <T>(document: HydratedDocument<T>, update: UpdateQuery<T>, commands: Record<string, unknown>[]) => HydratedDocument<T>;
28
+ export declare const splitUpdateAndCommands: <T>(updateQuery: UpdateWithAggregationPipeline | UpdateQuery<T> | null) => {
29
+ update: UpdateQuery<T>;
30
+ commands: Record<string, unknown>[];
31
+ };
32
+ export declare const updateHooksInitialize: <T>(schema: Schema<T, Model<T, any, any, any, import("mongoose").IfAny<T, any, import("mongoose").Document<unknown, any, T> & import("mongoose").Require_id<T>>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>, import("mongoose").IfAny<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>, any, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>> & import("mongoose").Require_id<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>>>>, opts: IPluginOptions<T>) => void;
33
+ //# sourceMappingURL=update-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-hooks.d.ts","sourceRoot":"","sources":["../../../../src/hooks/update-hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAA2B,MAAM,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AACpI,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAA;AAa9D,eAAO,MAAM,YAAY,uEAAwE,OAAO,MAAM,EAAE,OAAO,CAAC,EAAE,wBAWzH,CAAA;AAED,eAAO,MAAM,sBAAsB;;cAAgH,OAAO,MAAM,EAAE,OAAO,CAAC,EAAE;CAiB3K,CAAA;AAED,eAAO,MAAM,qBAAqB,y8BAAoD,IA+CrF,CAAA"}
@@ -24,6 +24,12 @@
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Schema } from 'mongoose';
26
26
  import type IHistory from '../interfaces/IHistory';
27
- declare const History: import("mongoose").Model<IHistory, {}, {}, {}, Schema<IHistory, import("mongoose").Model<IHistory, any, any, any, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IHistory>>;
27
+ declare const History: import("mongoose").Model<IHistory, {}, {}, {}, import("mongoose").Document<unknown, {}, IHistory> & IHistory & {
28
+ _id: import("mongoose").Types.ObjectId;
29
+ }, Schema<IHistory, import("mongoose").Model<IHistory, any, any, any, import("mongoose").Document<unknown, any, IHistory> & IHistory & {
30
+ _id: import("mongoose").Types.ObjectId;
31
+ }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IHistory, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IHistory>> & import("mongoose").FlatRecord<IHistory> & {
32
+ _id: import("mongoose").Types.ObjectId;
33
+ }>>;
28
34
  export default History;
29
35
  //# sourceMappingURL=History.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"History.d.ts","sourceRoot":"","sources":["../../../../src/models/History.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAS,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AA4ClD,QAAA,MAAM,OAAO,6LAA6C,CAAA;AAE1D,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"History.d.ts","sourceRoot":"","sources":["../../../../src/models/History.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAS,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AA4ClD,QAAA,MAAM,OAAO;;;;;;GAA6C,CAAA;AAE1D,eAAe,OAAO,CAAA"}