ts-patch-mongoose 2.6.1 → 2.6.2
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 +19 -15
- package/dist/cjs/patch.js +16 -10
- package/dist/cjs/patch.js.map +1 -1
- package/dist/cjs/types/patch.d.ts +2 -4
- package/dist/cjs/types/patch.d.ts.map +1 -1
- package/dist/esm/patch.js +13 -8
- package/dist/esm/patch.js.map +1 -1
- package/dist/esm/types/patch.d.ts +2 -4
- package/dist/esm/types/patch.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/patch.ts +16 -8
- package/tests/patch.test.ts +7 -3
- package/tests/plugin-event-deleted.test.ts +1 -1
- package/tests/plugin-global.test.ts +20 -20
- package/tests/plugin-omit-all.test.ts +50 -50
- package/tests/plugin-pre-save.test.ts +53 -0
- package/tests/plugin.test.ts +44 -44
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": "18.x || 20.x || 22.x",
|
|
29
|
-
"mongoose": "6.6.x || 7.x || 8.x",
|
|
29
|
+
"mongoose": ">=6.6.x || 7.x || 8.x",
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
@@ -46,25 +46,29 @@ I need to track changes of mongoose models and save them as patch history (audit
|
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
48
|
npm install ts-patch-mongoose
|
|
49
|
-
yarn add ts-patch-mongoose
|
|
50
49
|
pnpm add ts-patch-mongoose
|
|
50
|
+
yarn add ts-patch-mongoose
|
|
51
|
+
bun add ts-patch-mongoose
|
|
51
52
|
```
|
|
52
53
|
|
|
53
|
-
- This plugin requires mongoose
|
|
54
|
+
- This plugin requires mongoose `>=6.6.x || 7.x || 8.x` to be installed as a peer dependency
|
|
54
55
|
|
|
55
56
|
```bash
|
|
56
|
-
# For mongoose 6
|
|
57
|
-
npm install mongoose@6
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
pnpm add mongoose@7
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
# For latest mongoose 6
|
|
58
|
+
npm install mongoose@6
|
|
59
|
+
pnpm add mongoose@6
|
|
60
|
+
yarn add mongoose@6
|
|
61
|
+
bun add mongoose@6
|
|
62
|
+
# For latest mongoose 7
|
|
63
|
+
npm install mongoose@7
|
|
64
|
+
pnpm add mongoose@7
|
|
65
|
+
yarn add mongoose@7
|
|
66
|
+
bun add mongoose@7
|
|
67
|
+
# For latest mongoose 8
|
|
68
|
+
npm install mongoose@8
|
|
69
|
+
pnpm add mongoose@8
|
|
70
|
+
yarn add mongoose@8
|
|
71
|
+
bun add mongoose@8
|
|
68
72
|
```
|
|
69
73
|
|
|
70
74
|
## Example
|
package/dist/cjs/patch.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.deletePatch = exports.updatePatch = exports.createPatch = exports.bulkPatch = exports.emitEvent = exports.getData = exports.getValue = exports.getMetadata = exports.getReason = exports.getUser = exports.
|
|
3
|
+
exports.deletePatch = exports.updatePatch = exports.createPatch = exports.bulkPatch = exports.emitEvent = exports.getData = exports.getValue = exports.getMetadata = exports.getReason = exports.getUser = exports.getObjectOmit = exports.getJsonOmit = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
6
6
|
const omit_deep_1 = tslib_1.__importDefault(require("omit-deep"));
|
|
@@ -10,16 +10,21 @@ const em_1 = tslib_1.__importDefault(require("./em"));
|
|
|
10
10
|
function isPatchHistoryEnabled(opts, context) {
|
|
11
11
|
return !opts.patchHistoryDisabled && !context.ignorePatchHistory;
|
|
12
12
|
}
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
let originalObject = JSON.parse(JSON.stringify(original));
|
|
13
|
+
function getJsonOmit(opts, doc) {
|
|
14
|
+
const object = JSON.parse(JSON.stringify(doc));
|
|
16
15
|
if (opts.omit) {
|
|
17
|
-
|
|
18
|
-
originalObject = (0, omit_deep_1.default)(originalObject, opts.omit);
|
|
16
|
+
return (0, omit_deep_1.default)(object, opts.omit);
|
|
19
17
|
}
|
|
20
|
-
return
|
|
18
|
+
return object;
|
|
21
19
|
}
|
|
22
|
-
exports.
|
|
20
|
+
exports.getJsonOmit = getJsonOmit;
|
|
21
|
+
function getObjectOmit(opts, doc) {
|
|
22
|
+
if (opts.omit) {
|
|
23
|
+
return (0, omit_deep_1.default)(lodash_1.default.isFunction(doc?.toObject) ? doc.toObject() : doc, opts.omit);
|
|
24
|
+
}
|
|
25
|
+
return doc;
|
|
26
|
+
}
|
|
27
|
+
exports.getObjectOmit = getObjectOmit;
|
|
23
28
|
async function getUser(opts) {
|
|
24
29
|
if (lodash_1.default.isFunction(opts.getUser)) {
|
|
25
30
|
return await opts.getUser();
|
|
@@ -84,7 +89,7 @@ async function bulkPatch(opts, context, eventKey, docsKey) {
|
|
|
84
89
|
modelName: context.modelName,
|
|
85
90
|
collectionName: context.collectionName,
|
|
86
91
|
collectionId: doc._id,
|
|
87
|
-
doc,
|
|
92
|
+
doc: getObjectOmit(opts, doc),
|
|
88
93
|
user,
|
|
89
94
|
reason,
|
|
90
95
|
metadata,
|
|
@@ -106,7 +111,8 @@ async function createPatch(opts, context) {
|
|
|
106
111
|
exports.createPatch = createPatch;
|
|
107
112
|
async function updatePatch(opts, context, current, original) {
|
|
108
113
|
const history = isPatchHistoryEnabled(opts, context);
|
|
109
|
-
const
|
|
114
|
+
const currentObject = getJsonOmit(opts, current);
|
|
115
|
+
const originalObject = getJsonOmit(opts, original);
|
|
110
116
|
if (lodash_1.default.isEmpty(originalObject) || lodash_1.default.isEmpty(currentObject))
|
|
111
117
|
return;
|
|
112
118
|
const patch = fast_json_patch_1.default.compare(originalObject, currentObject, true);
|
package/dist/cjs/patch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":";;;;AAAA,4DAAsB;AACtB,kEAA4B;AAC5B,8EAAuC;AASvC,uEAAsC;AACtC,sDAAqB;AAErB,SAAS,qBAAqB,CAAI,IAAuB,EAAE,OAAoB;IAC7E,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAA;AAClE,CAAC;AAED,SAAgB,
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,10 +28,8 @@ import type IEvent from './interfaces/IEvent';
|
|
|
28
28
|
import type IContext from './interfaces/IContext';
|
|
29
29
|
import type IPluginOptions from './interfaces/IPluginOptions';
|
|
30
30
|
import type { User, Metadata } from './interfaces/IPluginOptions';
|
|
31
|
-
export declare function
|
|
32
|
-
|
|
33
|
-
originalObject: Partial<T>;
|
|
34
|
-
};
|
|
31
|
+
export declare function getJsonOmit<T>(opts: IPluginOptions<T>, doc: HydratedDocument<T>): Partial<T>;
|
|
32
|
+
export declare function getObjectOmit<T>(opts: IPluginOptions<T>, doc: HydratedDocument<T>): Partial<T>;
|
|
35
33
|
export declare function getUser<T>(opts: IPluginOptions<T>): Promise<User | undefined>;
|
|
36
34
|
export declare function getReason<T>(opts: IPluginOptions<T>): Promise<string | undefined>;
|
|
37
35
|
export declare function getMetadata<T>(opts: IPluginOptions<T>): Promise<Metadata | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/patch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,UAAU,CAAA;AAEvD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AASjE,wBAAgB,
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/patch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,UAAU,CAAA;AAEvD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AASjE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ5F;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO9F;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKnF;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAKvF;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAK3F;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAExE;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,CAU/H;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAInG;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAG,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwClL;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC9J;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG"}
|
package/dist/esm/patch.js
CHANGED
|
@@ -6,14 +6,18 @@ import em from './em.js';
|
|
|
6
6
|
function isPatchHistoryEnabled(opts, context) {
|
|
7
7
|
return !opts.patchHistoryDisabled && !context.ignorePatchHistory;
|
|
8
8
|
}
|
|
9
|
-
export function
|
|
10
|
-
|
|
11
|
-
let originalObject = JSON.parse(JSON.stringify(original));
|
|
9
|
+
export function getJsonOmit(opts, doc) {
|
|
10
|
+
const object = JSON.parse(JSON.stringify(doc));
|
|
12
11
|
if (opts.omit) {
|
|
13
|
-
|
|
14
|
-
originalObject = omit(originalObject, opts.omit);
|
|
12
|
+
return omit(object, opts.omit);
|
|
15
13
|
}
|
|
16
|
-
return
|
|
14
|
+
return object;
|
|
15
|
+
}
|
|
16
|
+
export function getObjectOmit(opts, doc) {
|
|
17
|
+
if (opts.omit) {
|
|
18
|
+
return omit(_.isFunction(doc?.toObject) ? doc.toObject() : doc, opts.omit);
|
|
19
|
+
}
|
|
20
|
+
return doc;
|
|
17
21
|
}
|
|
18
22
|
export async function getUser(opts) {
|
|
19
23
|
if (_.isFunction(opts.getUser)) {
|
|
@@ -73,7 +77,7 @@ export async function bulkPatch(opts, context, eventKey, docsKey) {
|
|
|
73
77
|
modelName: context.modelName,
|
|
74
78
|
collectionName: context.collectionName,
|
|
75
79
|
collectionId: doc._id,
|
|
76
|
-
doc,
|
|
80
|
+
doc: getObjectOmit(opts, doc),
|
|
77
81
|
user,
|
|
78
82
|
reason,
|
|
79
83
|
metadata,
|
|
@@ -93,7 +97,8 @@ export async function createPatch(opts, context) {
|
|
|
93
97
|
}
|
|
94
98
|
export async function updatePatch(opts, context, current, original) {
|
|
95
99
|
const history = isPatchHistoryEnabled(opts, context);
|
|
96
|
-
const
|
|
100
|
+
const currentObject = getJsonOmit(opts, current);
|
|
101
|
+
const originalObject = getJsonOmit(opts, original);
|
|
97
102
|
if (_.isEmpty(originalObject) || _.isEmpty(currentObject))
|
|
98
103
|
return;
|
|
99
104
|
const patch = jsonpatch.compare(originalObject, currentObject, true);
|
package/dist/esm/patch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AACtB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,SAAS,MAAM,iBAAiB,CAAA;AASvC,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,MAAM,CAAA;AAErB,SAAS,qBAAqB,CAAI,IAAuB,EAAE,OAAoB;IAC7E,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,10 +28,8 @@ import type IEvent from './interfaces/IEvent';
|
|
|
28
28
|
import type IContext from './interfaces/IContext';
|
|
29
29
|
import type IPluginOptions from './interfaces/IPluginOptions';
|
|
30
30
|
import type { User, Metadata } from './interfaces/IPluginOptions';
|
|
31
|
-
export declare function
|
|
32
|
-
|
|
33
|
-
originalObject: Partial<T>;
|
|
34
|
-
};
|
|
31
|
+
export declare function getJsonOmit<T>(opts: IPluginOptions<T>, doc: HydratedDocument<T>): Partial<T>;
|
|
32
|
+
export declare function getObjectOmit<T>(opts: IPluginOptions<T>, doc: HydratedDocument<T>): Partial<T>;
|
|
35
33
|
export declare function getUser<T>(opts: IPluginOptions<T>): Promise<User | undefined>;
|
|
36
34
|
export declare function getReason<T>(opts: IPluginOptions<T>): Promise<string | undefined>;
|
|
37
35
|
export declare function getMetadata<T>(opts: IPluginOptions<T>): Promise<Metadata | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/patch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,UAAU,CAAA;AAEvD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AASjE,wBAAgB,
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/patch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,UAAU,CAAA;AAEvD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AASjE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ5F;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO9F;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKnF;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAKvF;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAK3F;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAExE;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,CAU/H;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAInG;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAG,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwClL;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC9J;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-patch-mongoose",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.2",
|
|
4
4
|
"description": "Patch history & events for mongoose models",
|
|
5
5
|
"author": "Alex Eagle",
|
|
6
6
|
"license": "MIT",
|
|
@@ -85,25 +85,25 @@
|
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
87
|
"@shelf/jest-mongodb": "4.3.2",
|
|
88
|
-
"@stylistic/eslint-plugin": "2.
|
|
88
|
+
"@stylistic/eslint-plugin": "2.2.0",
|
|
89
89
|
"@swc/cli": "0.3.12",
|
|
90
|
-
"@swc/core": "1.
|
|
90
|
+
"@swc/core": "1.6.0",
|
|
91
91
|
"@swc/helpers": "0.5.11",
|
|
92
92
|
"@swc/jest": "0.2.36",
|
|
93
93
|
"@swc/register": "0.1.10",
|
|
94
94
|
"@types/jest": "29.5.12",
|
|
95
|
-
"@types/lodash": "4.17.
|
|
95
|
+
"@types/lodash": "4.17.5",
|
|
96
96
|
"@types/node": "20",
|
|
97
97
|
"@types/semver": "7.5.8",
|
|
98
|
-
"@typescript-eslint/eslint-plugin": "7.
|
|
99
|
-
"@typescript-eslint/parser": "7.
|
|
98
|
+
"@typescript-eslint/eslint-plugin": "7.13.0",
|
|
99
|
+
"@typescript-eslint/parser": "7.13.0",
|
|
100
100
|
"eslint": "8.57.0",
|
|
101
|
-
"eslint-plugin-jest": "28.
|
|
101
|
+
"eslint-plugin-jest": "28.6.0",
|
|
102
102
|
"eslint-plugin-jest-formatting": "3.1.0",
|
|
103
103
|
"eslint-plugin-sonarjs": "0.25.1",
|
|
104
104
|
"jest": "29.7.0",
|
|
105
105
|
"merge": "2.1.1",
|
|
106
|
-
"mongoose": "8.4.
|
|
106
|
+
"mongoose": "8.4.1",
|
|
107
107
|
"open-cli": "8.0.0",
|
|
108
108
|
"typescript": "5.4.5"
|
|
109
109
|
},
|
package/src/patch.ts
CHANGED
|
@@ -16,16 +16,23 @@ function isPatchHistoryEnabled<T>(opts: IPluginOptions<T>, context: IContext<T>)
|
|
|
16
16
|
return !opts.patchHistoryDisabled && !context.ignorePatchHistory
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export function
|
|
20
|
-
|
|
21
|
-
let originalObject = JSON.parse(JSON.stringify(original)) as Partial<T>
|
|
19
|
+
export function getJsonOmit<T>(opts: IPluginOptions<T>, doc: HydratedDocument<T>): Partial<T> {
|
|
20
|
+
const object = JSON.parse(JSON.stringify(doc)) as Partial<T>
|
|
22
21
|
|
|
23
22
|
if (opts.omit) {
|
|
24
|
-
|
|
25
|
-
originalObject = omit(originalObject, opts.omit)
|
|
23
|
+
return omit(object, opts.omit)
|
|
26
24
|
}
|
|
27
25
|
|
|
28
|
-
return
|
|
26
|
+
return object
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function getObjectOmit<T>(opts: IPluginOptions<T>, doc: HydratedDocument<T>): Partial<T> {
|
|
30
|
+
if (opts.omit) {
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/unbound-method
|
|
32
|
+
return omit(_.isFunction(doc?.toObject) ? doc.toObject() : doc, opts.omit)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return doc
|
|
29
36
|
}
|
|
30
37
|
|
|
31
38
|
export async function getUser<T>(opts: IPluginOptions<T>): Promise<User | undefined> {
|
|
@@ -96,7 +103,7 @@ export async function bulkPatch<T>(opts: IPluginOptions<T>, context: IContext<T>
|
|
|
96
103
|
modelName: context.modelName,
|
|
97
104
|
collectionName: context.collectionName,
|
|
98
105
|
collectionId: doc._id as Types.ObjectId,
|
|
99
|
-
doc,
|
|
106
|
+
doc: getObjectOmit(opts, doc),
|
|
100
107
|
user,
|
|
101
108
|
reason,
|
|
102
109
|
metadata,
|
|
@@ -120,7 +127,8 @@ export async function createPatch<T>(opts: IPluginOptions<T>, context: IContext<
|
|
|
120
127
|
export async function updatePatch<T>(opts: IPluginOptions<T>, context: IContext<T>, current: HydratedDocument<T>, original: HydratedDocument<T>): Promise<void> {
|
|
121
128
|
const history = isPatchHistoryEnabled(opts, context)
|
|
122
129
|
|
|
123
|
-
const
|
|
130
|
+
const currentObject = getJsonOmit(opts, current)
|
|
131
|
+
const originalObject = getJsonOmit(opts, original)
|
|
124
132
|
if (_.isEmpty(originalObject) || _.isEmpty(currentObject)) return
|
|
125
133
|
|
|
126
134
|
const patch = jsonpatch.compare(originalObject, currentObject, true)
|
package/tests/patch.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import mongoose, { model } from 'mongoose'
|
|
2
2
|
|
|
3
|
-
import { getUser, getReason, getMetadata, getData, getValue,
|
|
3
|
+
import { getUser, getReason, getMetadata, getData, getValue, getJsonOmit, bulkPatch, updatePatch } from '../src/patch'
|
|
4
4
|
import { patchHistoryPlugin } from '../src/plugin'
|
|
5
5
|
|
|
6
6
|
import UserSchema from './schemas/UserSchema'
|
|
@@ -53,7 +53,8 @@ describe('patch tests', () => {
|
|
|
53
53
|
omit: ['createdAt'],
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
const
|
|
56
|
+
const currentObject = getJsonOmit(pluginOptions, current)
|
|
57
|
+
const originalObject = getJsonOmit(pluginOptions, original)
|
|
57
58
|
|
|
58
59
|
expect(currentObject.name).toBe('John')
|
|
59
60
|
expect(currentObject.role).toBe('admin')
|
|
@@ -68,7 +69,10 @@ describe('patch tests', () => {
|
|
|
68
69
|
const original = await User.create({ name: 'John', role: 'user' })
|
|
69
70
|
const current = await User.create({ name: 'John', role: 'admin' })
|
|
70
71
|
|
|
71
|
-
const
|
|
72
|
+
const pluginOptions = {}
|
|
73
|
+
|
|
74
|
+
const currentObject = getJsonOmit(pluginOptions, current)
|
|
75
|
+
const originalObject = getJsonOmit(pluginOptions, original)
|
|
72
76
|
|
|
73
77
|
expect(currentObject.name).toBe('John')
|
|
74
78
|
expect(currentObject.role).toBe('admin')
|
|
@@ -137,7 +137,7 @@ describe('plugin - event delete & patch history disabled', () => {
|
|
|
137
137
|
|
|
138
138
|
const [john] = users
|
|
139
139
|
|
|
140
|
-
await User.findOneAndDelete({
|
|
140
|
+
await User.findOneAndDelete({ name: 'John' }).exec()
|
|
141
141
|
|
|
142
142
|
const history = await History.find({})
|
|
143
143
|
expect(history).toHaveLength(0)
|
|
@@ -64,8 +64,8 @@ describe('plugin - global', () => {
|
|
|
64
64
|
expect(first.doc).toHaveProperty('_id', product._id)
|
|
65
65
|
expect(first.doc).toHaveProperty('name', 'paper')
|
|
66
66
|
expect(first.doc).toHaveProperty('groups', [])
|
|
67
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
68
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
67
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
68
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
69
69
|
|
|
70
70
|
expect(first.patch).toHaveLength(0)
|
|
71
71
|
|
|
@@ -138,8 +138,8 @@ describe('plugin - global', () => {
|
|
|
138
138
|
expect(first.doc).toHaveProperty('_id', product._id)
|
|
139
139
|
expect(first.doc).toHaveProperty('name', 'paper')
|
|
140
140
|
expect(first.doc).toHaveProperty('groups', [])
|
|
141
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
142
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
141
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
142
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
143
143
|
|
|
144
144
|
expect(first.patch).toHaveLength(0)
|
|
145
145
|
|
|
@@ -210,8 +210,8 @@ describe('plugin - global', () => {
|
|
|
210
210
|
expect(first.doc).toHaveProperty('_id', product._id)
|
|
211
211
|
expect(first.doc).toHaveProperty('name', 'paper')
|
|
212
212
|
expect(first.doc).toHaveProperty('description', { summary: 'test1' })
|
|
213
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
214
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
213
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
214
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
215
215
|
|
|
216
216
|
expect(first.patch).toHaveLength(0)
|
|
217
217
|
|
|
@@ -286,8 +286,8 @@ describe('plugin - global', () => {
|
|
|
286
286
|
expect(first.doc).toHaveProperty('_id', product._id)
|
|
287
287
|
expect(first.doc).toHaveProperty('name', 'paper')
|
|
288
288
|
expect(first.doc).toHaveProperty('description', { summary: 'test1' })
|
|
289
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
290
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
289
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
290
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
291
291
|
|
|
292
292
|
expect(first.patch).toHaveLength(0)
|
|
293
293
|
|
|
@@ -361,8 +361,8 @@ describe('plugin - global', () => {
|
|
|
361
361
|
expect(first.doc).toHaveProperty('_id', john._id)
|
|
362
362
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
363
363
|
expect(first.doc).toHaveProperty('role', 'user')
|
|
364
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
365
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
364
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
365
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
366
366
|
|
|
367
367
|
expect(first.patch).toHaveLength(0)
|
|
368
368
|
|
|
@@ -377,8 +377,8 @@ describe('plugin - global', () => {
|
|
|
377
377
|
expect(second.doc).toHaveProperty('_id', alice._id)
|
|
378
378
|
expect(second.doc).toHaveProperty('name', 'Alice')
|
|
379
379
|
expect(second.doc).toHaveProperty('role', 'user')
|
|
380
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
381
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
380
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
381
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
382
382
|
|
|
383
383
|
expect(second.patch).toHaveLength(0)
|
|
384
384
|
|
|
@@ -392,8 +392,8 @@ describe('plugin - global', () => {
|
|
|
392
392
|
expect(third.doc).toHaveProperty('_id', product._id)
|
|
393
393
|
expect(third.doc).toHaveProperty('name', 'paper')
|
|
394
394
|
expect(third.doc).toHaveProperty('addedBy', john._id)
|
|
395
|
-
expect(third.doc).toHaveProperty('createdAt')
|
|
396
|
-
expect(third.doc).toHaveProperty('updatedAt')
|
|
395
|
+
expect(third.doc).not.toHaveProperty('createdAt')
|
|
396
|
+
expect(third.doc).not.toHaveProperty('updatedAt')
|
|
397
397
|
|
|
398
398
|
expect(third.patch).toHaveLength(0)
|
|
399
399
|
|
|
@@ -454,8 +454,8 @@ describe('plugin - global', () => {
|
|
|
454
454
|
expect(first.doc).toHaveProperty('_id', john._id)
|
|
455
455
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
456
456
|
expect(first.doc).toHaveProperty('role', 'user')
|
|
457
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
458
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
457
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
458
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
459
459
|
|
|
460
460
|
expect(first.patch).toHaveLength(0)
|
|
461
461
|
|
|
@@ -470,8 +470,8 @@ describe('plugin - global', () => {
|
|
|
470
470
|
expect(second.doc).toHaveProperty('_id', alice._id)
|
|
471
471
|
expect(second.doc).toHaveProperty('name', 'Alice')
|
|
472
472
|
expect(second.doc).toHaveProperty('role', 'user')
|
|
473
|
-
expect(
|
|
474
|
-
expect(
|
|
473
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
474
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
475
475
|
|
|
476
476
|
expect(second.patch).toHaveLength(0)
|
|
477
477
|
|
|
@@ -485,8 +485,8 @@ describe('plugin - global', () => {
|
|
|
485
485
|
expect(third.doc).toHaveProperty('_id', product._id)
|
|
486
486
|
expect(third.doc).toHaveProperty('name', 'paper')
|
|
487
487
|
expect(third.doc).toHaveProperty('addedBy', john._id)
|
|
488
|
-
expect(
|
|
489
|
-
expect(
|
|
488
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
489
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
490
490
|
|
|
491
491
|
expect(third.patch).toHaveLength(0)
|
|
492
492
|
|
|
@@ -58,10 +58,10 @@ describe('plugin - omit all', () => {
|
|
|
58
58
|
expect(first.version).toBe(0)
|
|
59
59
|
expect(first.patch).toHaveLength(0)
|
|
60
60
|
|
|
61
|
-
expect(first.doc).toHaveProperty('name'
|
|
62
|
-
expect(first.doc).toHaveProperty('role'
|
|
63
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
64
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
61
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
62
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
63
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
64
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
65
65
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
66
66
|
|
|
67
67
|
expect(second.op).toBe('deleteMany')
|
|
@@ -71,10 +71,10 @@ describe('plugin - omit all', () => {
|
|
|
71
71
|
expect(second.version).toBe(0)
|
|
72
72
|
expect(second.patch).toHaveLength(0)
|
|
73
73
|
|
|
74
|
-
expect(second.doc).toHaveProperty('name'
|
|
75
|
-
expect(second.doc).toHaveProperty('role'
|
|
76
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
77
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
74
|
+
expect(second.doc).not.toHaveProperty('name')
|
|
75
|
+
expect(second.doc).not.toHaveProperty('role')
|
|
76
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
77
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
78
78
|
expect(second.doc).toHaveProperty('_id', user._id)
|
|
79
79
|
|
|
80
80
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -99,10 +99,10 @@ describe('plugin - omit all', () => {
|
|
|
99
99
|
expect(first.version).toBe(0)
|
|
100
100
|
expect(first.patch).toHaveLength(0)
|
|
101
101
|
|
|
102
|
-
expect(first.doc).toHaveProperty('name'
|
|
103
|
-
expect(first.doc).toHaveProperty('role'
|
|
104
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
105
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
102
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
103
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
104
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
105
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
106
106
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
107
107
|
|
|
108
108
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -126,10 +126,10 @@ describe('plugin - omit all', () => {
|
|
|
126
126
|
expect(first.version).toBe(0)
|
|
127
127
|
expect(first.patch).toHaveLength(0)
|
|
128
128
|
|
|
129
|
-
expect(first.doc).toHaveProperty('name'
|
|
130
|
-
expect(first.doc).toHaveProperty('role'
|
|
131
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
132
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
129
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
130
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
131
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
132
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
133
133
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
134
134
|
|
|
135
135
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -153,10 +153,10 @@ describe('plugin - omit all', () => {
|
|
|
153
153
|
expect(first.version).toBe(0)
|
|
154
154
|
expect(first.patch).toHaveLength(0)
|
|
155
155
|
|
|
156
|
-
expect(first.doc).toHaveProperty('name'
|
|
157
|
-
expect(first.doc).toHaveProperty('role'
|
|
158
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
159
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
156
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
157
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
158
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
159
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
160
160
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
161
161
|
|
|
162
162
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -184,10 +184,10 @@ describe('plugin - omit all', () => {
|
|
|
184
184
|
expect(first.version).toBe(0)
|
|
185
185
|
expect(first.patch).toHaveLength(0)
|
|
186
186
|
|
|
187
|
-
expect(first.doc).toHaveProperty('name'
|
|
188
|
-
expect(first.doc).toHaveProperty('role'
|
|
189
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
190
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
187
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
188
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
189
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
190
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
191
191
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
192
192
|
|
|
193
193
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -217,10 +217,10 @@ describe('plugin - omit all', () => {
|
|
|
217
217
|
expect(first.version).toBe(0)
|
|
218
218
|
expect(first.patch).toHaveLength(0)
|
|
219
219
|
|
|
220
|
-
expect(first.doc).toHaveProperty('name'
|
|
221
|
-
expect(first.doc).toHaveProperty('role'
|
|
222
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
223
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
220
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
221
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
222
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
223
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
224
224
|
expect(first.doc).toHaveProperty('_id', john._id)
|
|
225
225
|
|
|
226
226
|
expect(second.op).toBe('create')
|
|
@@ -230,10 +230,10 @@ describe('plugin - omit all', () => {
|
|
|
230
230
|
expect(second.version).toBe(0)
|
|
231
231
|
expect(second.patch).toHaveLength(0)
|
|
232
232
|
|
|
233
|
-
expect(second.doc).toHaveProperty('name'
|
|
234
|
-
expect(second.doc).toHaveProperty('role'
|
|
235
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
236
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
233
|
+
expect(second.doc).not.toHaveProperty('name')
|
|
234
|
+
expect(second.doc).not.toHaveProperty('role')
|
|
235
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
236
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
237
237
|
expect(second.doc).toHaveProperty('_id', alice._id)
|
|
238
238
|
|
|
239
239
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -255,10 +255,10 @@ describe('plugin - omit all', () => {
|
|
|
255
255
|
expect(first.version).toBe(0)
|
|
256
256
|
expect(first.patch).toHaveLength(0)
|
|
257
257
|
|
|
258
|
-
expect(first.doc).toHaveProperty('name'
|
|
259
|
-
expect(first.doc).toHaveProperty('role'
|
|
260
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
261
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
258
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
259
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
260
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
261
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
262
262
|
expect(first.doc).toHaveProperty('_id')
|
|
263
263
|
|
|
264
264
|
expect(second.op).toBe('create')
|
|
@@ -268,10 +268,10 @@ describe('plugin - omit all', () => {
|
|
|
268
268
|
expect(second.version).toBe(0)
|
|
269
269
|
expect(second.patch).toHaveLength(0)
|
|
270
270
|
|
|
271
|
-
expect(second.doc).toHaveProperty('name'
|
|
272
|
-
expect(second.doc).toHaveProperty('role'
|
|
273
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
274
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
271
|
+
expect(second.doc).not.toHaveProperty('name')
|
|
272
|
+
expect(second.doc).not.toHaveProperty('role')
|
|
273
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
274
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
275
275
|
expect(second.doc).toHaveProperty('_id')
|
|
276
276
|
|
|
277
277
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -294,8 +294,8 @@ describe('plugin - omit all', () => {
|
|
|
294
294
|
expect(first.version).toBe(0)
|
|
295
295
|
expect(first.patch).toHaveLength(0)
|
|
296
296
|
|
|
297
|
-
expect(first.doc).toHaveProperty('name'
|
|
298
|
-
expect(first.doc).toHaveProperty('role'
|
|
297
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
298
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
299
299
|
expect(first.doc).toHaveProperty('_id')
|
|
300
300
|
|
|
301
301
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -321,10 +321,10 @@ describe('plugin - omit all', () => {
|
|
|
321
321
|
expect(first.version).toBe(0)
|
|
322
322
|
expect(first.patch).toHaveLength(0)
|
|
323
323
|
|
|
324
|
-
expect(first.doc).toHaveProperty('name'
|
|
325
|
-
expect(first.doc).toHaveProperty('role'
|
|
326
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
327
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
324
|
+
expect(first.doc).not.toHaveProperty('name')
|
|
325
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
326
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
327
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
328
328
|
expect(first.doc).toHaveProperty('_id', john._id)
|
|
329
329
|
|
|
330
330
|
expect(second.op).toBe('create')
|
|
@@ -334,10 +334,10 @@ describe('plugin - omit all', () => {
|
|
|
334
334
|
expect(second.version).toBe(0)
|
|
335
335
|
expect(second.patch).toHaveLength(0)
|
|
336
336
|
|
|
337
|
-
expect(second.doc).toHaveProperty('name'
|
|
338
|
-
expect(second.doc).toHaveProperty('role'
|
|
339
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
340
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
337
|
+
expect(second.doc).not.toHaveProperty('name')
|
|
338
|
+
expect(second.doc).not.toHaveProperty('role')
|
|
339
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
340
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
341
341
|
expect(second.doc).toHaveProperty('_id', alice._id)
|
|
342
342
|
|
|
343
343
|
expect(em.emit).toHaveBeenCalledTimes(0)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import mongoose, { model } from 'mongoose'
|
|
3
|
+
|
|
4
|
+
import UserSchema from './schemas/UserSchema'
|
|
5
|
+
import { patchHistoryPlugin } from '../src/plugin'
|
|
6
|
+
|
|
7
|
+
import { USER_CREATED } from './constants/events'
|
|
8
|
+
|
|
9
|
+
import em from '../src/em'
|
|
10
|
+
|
|
11
|
+
jest.mock('../src/em', () => {
|
|
12
|
+
return { emit: jest.fn() }
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
describe('plugin - preSave test', () => {
|
|
16
|
+
const uri = `${globalThis.__MONGO_URI__}${globalThis.__MONGO_DB_NAME__}`
|
|
17
|
+
|
|
18
|
+
UserSchema.plugin(patchHistoryPlugin, {
|
|
19
|
+
eventCreated: USER_CREATED,
|
|
20
|
+
omit: ['__v', 'role'],
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
const User = model('User', UserSchema)
|
|
24
|
+
|
|
25
|
+
beforeAll(async () => {
|
|
26
|
+
await mongoose.connect(uri)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
afterAll(async () => {
|
|
30
|
+
await mongoose.connection.close()
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
beforeEach(async () => {
|
|
34
|
+
await mongoose.connection.collection('users').deleteMany({})
|
|
35
|
+
await mongoose.connection.collection('history').deleteMany({})
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('should create a User and execute save, and omit User role in history', async () => {
|
|
39
|
+
const john = await User.create({ name: 'John', role: 'user' })
|
|
40
|
+
const { __v, role, ...doc } = john.toJSON()
|
|
41
|
+
|
|
42
|
+
expect(em.emit).toHaveBeenCalledTimes(1)
|
|
43
|
+
expect(em.emit).toHaveBeenCalledWith(USER_CREATED, { doc })
|
|
44
|
+
|
|
45
|
+
expect(john).toMatchObject({ name: 'John', role: 'user' })
|
|
46
|
+
|
|
47
|
+
const entry = await mongoose.connection.collection('history').findOne({ collectionId: john._id })
|
|
48
|
+
expect(entry).not.toBeNull()
|
|
49
|
+
expect(entry?.doc).toMatchObject({ name: 'John' })
|
|
50
|
+
expect(entry?.doc.role).toBeUndefined()
|
|
51
|
+
expect(entry?.patch).toEqual([])
|
|
52
|
+
})
|
|
53
|
+
})
|
package/tests/plugin.test.ts
CHANGED
|
@@ -64,9 +64,9 @@ describe('plugin', () => {
|
|
|
64
64
|
|
|
65
65
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
66
66
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
67
|
-
expect(first.doc).toHaveProperty('role'
|
|
68
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
69
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
67
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
68
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
69
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
70
70
|
|
|
71
71
|
expect(first.patch).toHaveLength(0)
|
|
72
72
|
|
|
@@ -109,26 +109,26 @@ describe('plugin', () => {
|
|
|
109
109
|
|
|
110
110
|
expect(fourth.doc).toHaveProperty('_id', user._id)
|
|
111
111
|
expect(fourth.doc).toHaveProperty('name', 'Bob')
|
|
112
|
-
expect(fourth.doc).toHaveProperty('role'
|
|
113
|
-
expect(fourth.doc).toHaveProperty('createdAt')
|
|
114
|
-
expect(fourth.doc).toHaveProperty('updatedAt')
|
|
112
|
+
expect(fourth.doc).not.toHaveProperty('role')
|
|
113
|
+
expect(fourth.doc).not.toHaveProperty('createdAt')
|
|
114
|
+
expect(fourth.doc).not.toHaveProperty('updatedAt')
|
|
115
115
|
|
|
116
116
|
expect(fourth.patch).toHaveLength(0)
|
|
117
117
|
|
|
118
118
|
expect(em.emit).toHaveBeenCalledTimes(4)
|
|
119
119
|
expect(em.emit).toHaveBeenCalledWith(USER_CREATED, { doc: first.doc })
|
|
120
120
|
expect(em.emit).toHaveBeenCalledWith(USER_UPDATED, {
|
|
121
|
-
oldDoc: expect.objectContaining({ _id: user._id, name: 'John'
|
|
122
|
-
doc: expect.objectContaining({ _id: user._id, name: 'Alice'
|
|
121
|
+
oldDoc: expect.objectContaining({ _id: user._id, name: 'John' }),
|
|
122
|
+
doc: expect.objectContaining({ _id: user._id, name: 'Alice' }),
|
|
123
123
|
patch: second.patch,
|
|
124
124
|
})
|
|
125
125
|
expect(em.emit).toHaveBeenCalledWith(USER_UPDATED, {
|
|
126
|
-
oldDoc: expect.objectContaining({ _id: user._id, name: 'Alice'
|
|
127
|
-
doc: expect.objectContaining({ _id: user._id, name: 'Bob'
|
|
126
|
+
oldDoc: expect.objectContaining({ _id: user._id, name: 'Alice' }),
|
|
127
|
+
doc: expect.objectContaining({ _id: user._id, name: 'Bob' }),
|
|
128
128
|
patch: third.patch,
|
|
129
129
|
})
|
|
130
130
|
expect(em.emit).toHaveBeenCalledWith(USER_DELETED, {
|
|
131
|
-
oldDoc: expect.objectContaining({ _id: user._id, name: 'Bob'
|
|
131
|
+
oldDoc: expect.objectContaining({ _id: user._id, name: 'Bob' }),
|
|
132
132
|
})
|
|
133
133
|
})
|
|
134
134
|
|
|
@@ -153,9 +153,9 @@ describe('plugin', () => {
|
|
|
153
153
|
|
|
154
154
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
155
155
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
156
|
-
expect(first.doc).toHaveProperty('role'
|
|
157
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
158
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
156
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
157
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
158
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
159
159
|
|
|
160
160
|
expect(first.patch).toHaveLength(0)
|
|
161
161
|
|
|
@@ -184,9 +184,9 @@ describe('plugin', () => {
|
|
|
184
184
|
|
|
185
185
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
186
186
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
187
|
-
expect(first.doc).toHaveProperty('role'
|
|
188
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
189
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
187
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
188
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
189
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
190
190
|
|
|
191
191
|
expect(first.patch).toHaveLength(0)
|
|
192
192
|
|
|
@@ -234,9 +234,9 @@ describe('plugin', () => {
|
|
|
234
234
|
|
|
235
235
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
236
236
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
237
|
-
expect(first.doc).toHaveProperty('role'
|
|
238
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
239
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
237
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
238
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
239
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
240
240
|
|
|
241
241
|
expect(first.patch).toHaveLength(0)
|
|
242
242
|
|
|
@@ -288,9 +288,9 @@ describe('plugin', () => {
|
|
|
288
288
|
|
|
289
289
|
expect(first.doc).toHaveProperty('_id', user._id)
|
|
290
290
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
291
|
-
expect(first.doc).toHaveProperty('role'
|
|
292
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
293
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
291
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
292
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
293
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
294
294
|
|
|
295
295
|
expect(first.patch).toHaveLength(0)
|
|
296
296
|
|
|
@@ -343,9 +343,9 @@ describe('plugin', () => {
|
|
|
343
343
|
|
|
344
344
|
expect(first.doc).toHaveProperty('_id', john._id)
|
|
345
345
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
346
|
-
expect(first.doc).toHaveProperty('role'
|
|
347
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
348
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
346
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
347
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
348
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
349
349
|
|
|
350
350
|
expect(first.patch).toHaveLength(0)
|
|
351
351
|
|
|
@@ -358,9 +358,9 @@ describe('plugin', () => {
|
|
|
358
358
|
|
|
359
359
|
expect(second.doc).toHaveProperty('_id', alice._id)
|
|
360
360
|
expect(second.doc).toHaveProperty('name', 'Alice')
|
|
361
|
-
expect(second.doc).toHaveProperty('role'
|
|
362
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
363
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
361
|
+
expect(second.doc).not.toHaveProperty('role')
|
|
362
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
363
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
364
364
|
|
|
365
365
|
expect(second.patch).toHaveLength(0)
|
|
366
366
|
|
|
@@ -424,9 +424,9 @@ describe('plugin', () => {
|
|
|
424
424
|
|
|
425
425
|
expect(first.doc).toHaveProperty('_id')
|
|
426
426
|
expect(first.doc).toHaveProperty('name', 'Alice')
|
|
427
|
-
expect(first.doc).toHaveProperty('role'
|
|
428
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
429
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
427
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
428
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
429
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
430
430
|
|
|
431
431
|
expect(first.patch).toHaveLength(0)
|
|
432
432
|
|
|
@@ -438,9 +438,9 @@ describe('plugin', () => {
|
|
|
438
438
|
|
|
439
439
|
expect(second.doc).toHaveProperty('_id')
|
|
440
440
|
expect(second.doc).toHaveProperty('name', 'John')
|
|
441
|
-
expect(second.doc).toHaveProperty('role'
|
|
442
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
443
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
441
|
+
expect(second.doc).not.toHaveProperty('role')
|
|
442
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
443
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
444
444
|
|
|
445
445
|
expect(second.patch).toHaveLength(0)
|
|
446
446
|
|
|
@@ -467,12 +467,12 @@ describe('plugin', () => {
|
|
|
467
467
|
|
|
468
468
|
expect(first.doc).toHaveProperty('_id')
|
|
469
469
|
expect(first.doc).toHaveProperty('name', 'Bob')
|
|
470
|
-
expect(first.doc).toHaveProperty('role'
|
|
470
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
471
471
|
|
|
472
472
|
// Upsert don't have createdAt and updatedAt and validation errors
|
|
473
473
|
// Investigate this case later
|
|
474
|
-
// expect(first.doc).toHaveProperty('createdAt')
|
|
475
|
-
// expect(first.doc).toHaveProperty('updatedAt')
|
|
474
|
+
// expect(first.doc).not.toHaveProperty('createdAt')
|
|
475
|
+
// expect(first.doc).not.toHaveProperty('updatedAt')
|
|
476
476
|
|
|
477
477
|
expect(first.patch).toHaveLength(0)
|
|
478
478
|
|
|
@@ -503,9 +503,9 @@ describe('plugin', () => {
|
|
|
503
503
|
|
|
504
504
|
expect(first.doc).toHaveProperty('_id', john._id)
|
|
505
505
|
expect(first.doc).toHaveProperty('name', 'John')
|
|
506
|
-
expect(first.doc).toHaveProperty('role'
|
|
507
|
-
expect(first.doc).toHaveProperty('createdAt')
|
|
508
|
-
expect(first.doc).toHaveProperty('updatedAt')
|
|
506
|
+
expect(first.doc).not.toHaveProperty('role')
|
|
507
|
+
expect(first.doc).not.toHaveProperty('createdAt')
|
|
508
|
+
expect(first.doc).not.toHaveProperty('updatedAt')
|
|
509
509
|
|
|
510
510
|
expect(first.patch).toHaveLength(0)
|
|
511
511
|
|
|
@@ -519,9 +519,9 @@ describe('plugin', () => {
|
|
|
519
519
|
|
|
520
520
|
expect(second.doc).toHaveProperty('_id', alice._id)
|
|
521
521
|
expect(second.doc).toHaveProperty('name', 'Alice')
|
|
522
|
-
expect(second.doc).toHaveProperty('role'
|
|
523
|
-
expect(second.doc).toHaveProperty('createdAt')
|
|
524
|
-
expect(second.doc).toHaveProperty('updatedAt')
|
|
522
|
+
expect(second.doc).not.toHaveProperty('role')
|
|
523
|
+
expect(second.doc).not.toHaveProperty('createdAt')
|
|
524
|
+
expect(second.doc).not.toHaveProperty('updatedAt')
|
|
525
525
|
|
|
526
526
|
expect(second.patch).toHaveLength(0)
|
|
527
527
|
|