ts-patch-mongoose 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/interfaces/IContext.d.ts +2 -3
- package/dist/cjs/interfaces/IContext.d.ts.map +1 -1
- package/dist/cjs/plugin.d.ts.map +1 -1
- package/dist/cjs/plugin.js +40 -32
- package/dist/cjs/plugin.js.map +1 -1
- package/dist/esm/interfaces/IContext.d.ts +2 -3
- package/dist/esm/interfaces/IContext.d.ts.map +1 -1
- package/dist/esm/plugin.d.ts.map +1 -1
- package/dist/esm/plugin.js +40 -32
- package/dist/esm/plugin.js.map +1 -1
- package/dist/types/interfaces/IContext.d.ts +2 -3
- package/dist/types/interfaces/IContext.d.ts.map +1 -1
- package/dist/types/plugin.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/interfaces/IContext.ts +2 -3
- package/src/plugin.ts +43 -32
- package/tests/plugin-event-created..test.ts +135 -0
- package/tests/plugin-event-deleted.test.ts +1 -2
- package/tests/utils/filesystem.ts +0 -13
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import type { HydratedDocument
|
|
1
|
+
import type { HydratedDocument } from 'mongoose';
|
|
2
2
|
interface IContext<T> {
|
|
3
3
|
op: string;
|
|
4
4
|
modelName: string;
|
|
5
5
|
collectionName: string;
|
|
6
6
|
isNew?: boolean;
|
|
7
|
-
|
|
7
|
+
createdDocs?: HydratedDocument<T>[];
|
|
8
8
|
deletedDocs?: HydratedDocument<T>[];
|
|
9
|
-
updatedIds?: Types.ObjectId[];
|
|
10
9
|
}
|
|
11
10
|
export default IContext;
|
|
12
11
|
//# sourceMappingURL=IContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,UAAU,QAAQ,CAAC,CAAC;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;CACpC;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/cjs/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AA2G7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IA2JlG,CAAA"}
|
package/dist/cjs/plugin.js
CHANGED
|
@@ -47,27 +47,18 @@ async function updatePatch(opts, context, current, original) {
|
|
|
47
47
|
version
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
-
async function
|
|
51
|
-
|
|
50
|
+
async function bulkPatch(opts, context, eventKey, docsKey) {
|
|
51
|
+
const event = opts[eventKey];
|
|
52
|
+
const docs = context[docsKey];
|
|
53
|
+
const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc';
|
|
54
|
+
if (lodash_1.default.isEmpty(docs) || (!event && opts.patchHistoryDisabled))
|
|
52
55
|
return;
|
|
53
|
-
|
|
54
|
-
op: context.op,
|
|
55
|
-
modelName: context.modelName,
|
|
56
|
-
collectionName: context.collectionName,
|
|
57
|
-
collectionId: current._id,
|
|
58
|
-
doc: current
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
async function deletePatch(opts, context) {
|
|
62
|
-
if (lodash_1.default.isEmpty(context.deletedDocs) || (!opts.eventDeleted && opts.patchHistoryDisabled))
|
|
63
|
-
return;
|
|
64
|
-
const chunks = lodash_1.default.chunk(context.deletedDocs, 1000);
|
|
56
|
+
const chunks = lodash_1.default.chunk(docs, 1000);
|
|
65
57
|
for await (const chunk of chunks) {
|
|
66
58
|
const bulk = [];
|
|
67
|
-
for (const
|
|
68
|
-
if (
|
|
69
|
-
em_1.default.emit(
|
|
70
|
-
}
|
|
59
|
+
for (const doc of chunk) {
|
|
60
|
+
if (event)
|
|
61
|
+
em_1.default.emit(event, { [key]: doc });
|
|
71
62
|
if (!opts.patchHistoryDisabled) {
|
|
72
63
|
bulk.push({
|
|
73
64
|
insertOne: {
|
|
@@ -75,8 +66,8 @@ async function deletePatch(opts, context) {
|
|
|
75
66
|
op: context.op,
|
|
76
67
|
modelName: context.modelName,
|
|
77
68
|
collectionName: context.collectionName,
|
|
78
|
-
collectionId:
|
|
79
|
-
doc
|
|
69
|
+
collectionId: doc._id,
|
|
70
|
+
doc,
|
|
80
71
|
version: 0
|
|
81
72
|
}
|
|
82
73
|
}
|
|
@@ -92,6 +83,12 @@ async function deletePatch(opts, context) {
|
|
|
92
83
|
}
|
|
93
84
|
}
|
|
94
85
|
}
|
|
86
|
+
async function createPatch(opts, context) {
|
|
87
|
+
await bulkPatch(opts, context, 'eventCreated', 'createdDocs');
|
|
88
|
+
}
|
|
89
|
+
async function deletePatch(opts, context) {
|
|
90
|
+
await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs');
|
|
91
|
+
}
|
|
95
92
|
exports.patchEventEmitter = em_1.default;
|
|
96
93
|
const patchHistoryPlugin = function plugin(schema, opts) {
|
|
97
94
|
schema.pre('save', async function (next) {
|
|
@@ -100,14 +97,12 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
100
97
|
const context = {
|
|
101
98
|
op: this.isNew ? 'create' : 'update',
|
|
102
99
|
modelName: opts.modelName ?? model.modelName,
|
|
103
|
-
collectionName: opts.collectionName ?? model.collection.collectionName
|
|
100
|
+
collectionName: opts.collectionName ?? model.collection.collectionName,
|
|
101
|
+
createdDocs: [current]
|
|
104
102
|
};
|
|
105
103
|
try {
|
|
106
104
|
if (this.isNew) {
|
|
107
|
-
|
|
108
|
-
em_1.default.emit(opts.eventCreated, { doc: current });
|
|
109
|
-
}
|
|
110
|
-
await createPatch(opts, context, current);
|
|
105
|
+
await createPatch(opts, context);
|
|
111
106
|
}
|
|
112
107
|
else {
|
|
113
108
|
const original = await model.findById(current._id).exec();
|
|
@@ -121,7 +116,16 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
121
116
|
next(error);
|
|
122
117
|
}
|
|
123
118
|
});
|
|
124
|
-
schema.
|
|
119
|
+
schema.post('insertMany', async function (docs) {
|
|
120
|
+
const context = {
|
|
121
|
+
op: 'create',
|
|
122
|
+
modelName: opts.modelName ?? this.modelName,
|
|
123
|
+
collectionName: opts.collectionName ?? this.collection.collectionName,
|
|
124
|
+
createdDocs: docs
|
|
125
|
+
};
|
|
126
|
+
await createPatch(opts, context);
|
|
127
|
+
});
|
|
128
|
+
schema.pre(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function (next) {
|
|
125
129
|
const filter = this.getFilter();
|
|
126
130
|
const update = this.getUpdate();
|
|
127
131
|
const options = this.getOptions();
|
|
@@ -144,6 +148,7 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
144
148
|
const cursor = this.model.find(filter).cursor();
|
|
145
149
|
await cursor.eachAsync(async (doc) => {
|
|
146
150
|
let current = doc.toObject({ depopulate: true });
|
|
151
|
+
const original = doc.toObject({ depopulate: true });
|
|
147
152
|
current = (0, power_assign_1.assign)(current, update);
|
|
148
153
|
lodash_1.default.forEach(commands, (command) => {
|
|
149
154
|
try {
|
|
@@ -152,7 +157,7 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
152
157
|
catch (error) {
|
|
153
158
|
}
|
|
154
159
|
});
|
|
155
|
-
await updatePatch(opts, this._context, current,
|
|
160
|
+
await updatePatch(opts, this._context, current, original);
|
|
156
161
|
});
|
|
157
162
|
next();
|
|
158
163
|
}
|
|
@@ -160,17 +165,20 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
160
165
|
next(error);
|
|
161
166
|
}
|
|
162
167
|
});
|
|
163
|
-
schema.post(['
|
|
168
|
+
schema.post(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function () {
|
|
164
169
|
const update = this.getUpdate();
|
|
165
170
|
if (update && this._context.isNew) {
|
|
166
171
|
const cursor = this.model.findOne(update).cursor();
|
|
167
|
-
await cursor.eachAsync(
|
|
172
|
+
await cursor.eachAsync((doc) => {
|
|
168
173
|
const current = doc.toObject({ depopulate: true });
|
|
169
|
-
if (
|
|
170
|
-
|
|
174
|
+
if (this._context.createdDocs) {
|
|
175
|
+
this._context.createdDocs.push(current);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this._context.createdDocs = [current];
|
|
171
179
|
}
|
|
172
|
-
await createPatch(opts, this._context, current);
|
|
173
180
|
});
|
|
181
|
+
await createPatch(opts, this._context);
|
|
174
182
|
}
|
|
175
183
|
});
|
|
176
184
|
schema.pre('remove', async function (next) {
|
package/dist/cjs/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;AAAA,4DAAsB;AACtB,kEAA4B;AAC5B,8EAAuC;AACvC,+CAAqC;AAQrC,sDAAqB;AACrB,uEAAsC;AAEtC,MAAM,OAAO,GAAG;IACd,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,IAAI;CACZ,CAAA;AAED,SAAS,UAAU,CAAK,IAAuB,EAAE,OAA4B,EAAE,QAA6B;IAC1G,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAe,CAAA;IACrE,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAe,CAAA;IAEvE,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,aAAa,GAAG,IAAA,mBAAI,EAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,cAAc,GAAG,IAAA,mBAAI,EAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;KACjD;IAED,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,CAAA;AAC1C,CAAC;AAED,KAAK,UAAU,WAAW,CAAK,IAAuB,EAAE,OAAoB,EAAE,OAA4B,EAAE,QAA6B;IACvI,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAE7E,IAAI,gBAAC,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,gBAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAAE,OAAM;IAEjE,MAAM,KAAK,GAAG,yBAAS,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;IAEpE,IAAI,gBAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAM;IAE5B,IAAI,IAAI,CAAC,YAAY,EAAE;QACrB,YAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;KACtE;IAED,IAAI,IAAI,CAAC,oBAAoB;QAAE,OAAM;IAErC,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,MAAM,WAAW,GAAG,MAAM,iBAAO,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;IAEnH,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,EAAE;QAC3C,OAAO,GAAG,WAAW,CAAC,OAAO,GAAG,CAAC,CAAA;KAClC;IAED,MAAM,iBAAO,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,QAAQ,CAAC,GAAqB;QAC5C,KAAK;QACL,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import type { HydratedDocument
|
|
1
|
+
import type { HydratedDocument } from 'mongoose';
|
|
2
2
|
interface IContext<T> {
|
|
3
3
|
op: string;
|
|
4
4
|
modelName: string;
|
|
5
5
|
collectionName: string;
|
|
6
6
|
isNew?: boolean;
|
|
7
|
-
|
|
7
|
+
createdDocs?: HydratedDocument<T>[];
|
|
8
8
|
deletedDocs?: HydratedDocument<T>[];
|
|
9
|
-
updatedIds?: Types.ObjectId[];
|
|
10
9
|
}
|
|
11
10
|
export default IContext;
|
|
12
11
|
//# sourceMappingURL=IContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,UAAU,QAAQ,CAAC,CAAC;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;CACpC;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/esm/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AA2G7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IA2JlG,CAAA"}
|
package/dist/esm/plugin.js
CHANGED
|
@@ -43,27 +43,18 @@ async function updatePatch(opts, context, current, original) {
|
|
|
43
43
|
version
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
|
-
async function
|
|
47
|
-
|
|
46
|
+
async function bulkPatch(opts, context, eventKey, docsKey) {
|
|
47
|
+
const event = opts[eventKey];
|
|
48
|
+
const docs = context[docsKey];
|
|
49
|
+
const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc';
|
|
50
|
+
if (_.isEmpty(docs) || (!event && opts.patchHistoryDisabled))
|
|
48
51
|
return;
|
|
49
|
-
|
|
50
|
-
op: context.op,
|
|
51
|
-
modelName: context.modelName,
|
|
52
|
-
collectionName: context.collectionName,
|
|
53
|
-
collectionId: current._id,
|
|
54
|
-
doc: current
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
async function deletePatch(opts, context) {
|
|
58
|
-
if (_.isEmpty(context.deletedDocs) || (!opts.eventDeleted && opts.patchHistoryDisabled))
|
|
59
|
-
return;
|
|
60
|
-
const chunks = _.chunk(context.deletedDocs, 1000);
|
|
52
|
+
const chunks = _.chunk(docs, 1000);
|
|
61
53
|
for await (const chunk of chunks) {
|
|
62
54
|
const bulk = [];
|
|
63
|
-
for (const
|
|
64
|
-
if (
|
|
65
|
-
em.emit(
|
|
66
|
-
}
|
|
55
|
+
for (const doc of chunk) {
|
|
56
|
+
if (event)
|
|
57
|
+
em.emit(event, { [key]: doc });
|
|
67
58
|
if (!opts.patchHistoryDisabled) {
|
|
68
59
|
bulk.push({
|
|
69
60
|
insertOne: {
|
|
@@ -71,8 +62,8 @@ async function deletePatch(opts, context) {
|
|
|
71
62
|
op: context.op,
|
|
72
63
|
modelName: context.modelName,
|
|
73
64
|
collectionName: context.collectionName,
|
|
74
|
-
collectionId:
|
|
75
|
-
doc
|
|
65
|
+
collectionId: doc._id,
|
|
66
|
+
doc,
|
|
76
67
|
version: 0
|
|
77
68
|
}
|
|
78
69
|
}
|
|
@@ -88,6 +79,12 @@ async function deletePatch(opts, context) {
|
|
|
88
79
|
}
|
|
89
80
|
}
|
|
90
81
|
}
|
|
82
|
+
async function createPatch(opts, context) {
|
|
83
|
+
await bulkPatch(opts, context, 'eventCreated', 'createdDocs');
|
|
84
|
+
}
|
|
85
|
+
async function deletePatch(opts, context) {
|
|
86
|
+
await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs');
|
|
87
|
+
}
|
|
91
88
|
export const patchEventEmitter = em;
|
|
92
89
|
export const patchHistoryPlugin = function plugin(schema, opts) {
|
|
93
90
|
schema.pre('save', async function (next) {
|
|
@@ -96,14 +93,12 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
96
93
|
const context = {
|
|
97
94
|
op: this.isNew ? 'create' : 'update',
|
|
98
95
|
modelName: opts.modelName ?? model.modelName,
|
|
99
|
-
collectionName: opts.collectionName ?? model.collection.collectionName
|
|
96
|
+
collectionName: opts.collectionName ?? model.collection.collectionName,
|
|
97
|
+
createdDocs: [current]
|
|
100
98
|
};
|
|
101
99
|
try {
|
|
102
100
|
if (this.isNew) {
|
|
103
|
-
|
|
104
|
-
em.emit(opts.eventCreated, { doc: current });
|
|
105
|
-
}
|
|
106
|
-
await createPatch(opts, context, current);
|
|
101
|
+
await createPatch(opts, context);
|
|
107
102
|
}
|
|
108
103
|
else {
|
|
109
104
|
const original = await model.findById(current._id).exec();
|
|
@@ -117,7 +112,16 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
117
112
|
next(error);
|
|
118
113
|
}
|
|
119
114
|
});
|
|
120
|
-
schema.
|
|
115
|
+
schema.post('insertMany', async function (docs) {
|
|
116
|
+
const context = {
|
|
117
|
+
op: 'create',
|
|
118
|
+
modelName: opts.modelName ?? this.modelName,
|
|
119
|
+
collectionName: opts.collectionName ?? this.collection.collectionName,
|
|
120
|
+
createdDocs: docs
|
|
121
|
+
};
|
|
122
|
+
await createPatch(opts, context);
|
|
123
|
+
});
|
|
124
|
+
schema.pre(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function (next) {
|
|
121
125
|
const filter = this.getFilter();
|
|
122
126
|
const update = this.getUpdate();
|
|
123
127
|
const options = this.getOptions();
|
|
@@ -140,6 +144,7 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
140
144
|
const cursor = this.model.find(filter).cursor();
|
|
141
145
|
await cursor.eachAsync(async (doc) => {
|
|
142
146
|
let current = doc.toObject({ depopulate: true });
|
|
147
|
+
const original = doc.toObject({ depopulate: true });
|
|
143
148
|
current = assign(current, update);
|
|
144
149
|
_.forEach(commands, (command) => {
|
|
145
150
|
try {
|
|
@@ -148,7 +153,7 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
148
153
|
catch (error) {
|
|
149
154
|
}
|
|
150
155
|
});
|
|
151
|
-
await updatePatch(opts, this._context, current,
|
|
156
|
+
await updatePatch(opts, this._context, current, original);
|
|
152
157
|
});
|
|
153
158
|
next();
|
|
154
159
|
}
|
|
@@ -156,17 +161,20 @@ export const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
156
161
|
next(error);
|
|
157
162
|
}
|
|
158
163
|
});
|
|
159
|
-
schema.post(['
|
|
164
|
+
schema.post(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function () {
|
|
160
165
|
const update = this.getUpdate();
|
|
161
166
|
if (update && this._context.isNew) {
|
|
162
167
|
const cursor = this.model.findOne(update).cursor();
|
|
163
|
-
await cursor.eachAsync(
|
|
168
|
+
await cursor.eachAsync((doc) => {
|
|
164
169
|
const current = doc.toObject({ depopulate: true });
|
|
165
|
-
if (
|
|
166
|
-
|
|
170
|
+
if (this._context.createdDocs) {
|
|
171
|
+
this._context.createdDocs.push(current);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
this._context.createdDocs = [current];
|
|
167
175
|
}
|
|
168
|
-
await createPatch(opts, this._context, current);
|
|
169
176
|
});
|
|
177
|
+
await createPatch(opts, this._context);
|
|
170
178
|
}
|
|
171
179
|
});
|
|
172
180
|
schema.pre('remove', async function (next) {
|
package/dist/esm/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AACtB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAQrC,OAAO,EAAE,MAAM,MAAM,CAAA;AACrB,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAEtC,MAAM,OAAO,GAAG;IACd,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,IAAI;CACZ,CAAA;AAED,SAAS,UAAU,CAAK,IAAuB,EAAE,OAA4B,EAAE,QAA6B;IAC1G,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAe,CAAA;IACrE,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAe,CAAA;IAEvE,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;KACjD;IAED,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,CAAA;AAC1C,CAAC;AAED,KAAK,UAAU,WAAW,CAAK,IAAuB,EAAE,OAAoB,EAAE,OAA4B,EAAE,QAA6B;IACvI,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAE7E,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAAE,OAAM;IAEjE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;IAEpE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAM;IAE5B,IAAI,IAAI,CAAC,YAAY,EAAE;QACrB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;KACtE;IAED,IAAI,IAAI,CAAC,oBAAoB;QAAE,OAAM;IAErC,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;IAEnH,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,EAAE;QAC3C,OAAO,GAAG,WAAW,CAAC,OAAO,GAAG,CAAC,CAAA;KAClC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,QAAQ,CAAC,GAAqB;QAC5C,KAAK;QACL,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import type { HydratedDocument
|
|
1
|
+
import type { HydratedDocument } from 'mongoose';
|
|
2
2
|
interface IContext<T> {
|
|
3
3
|
op: string;
|
|
4
4
|
modelName: string;
|
|
5
5
|
collectionName: string;
|
|
6
6
|
isNew?: boolean;
|
|
7
|
-
|
|
7
|
+
createdDocs?: HydratedDocument<T>[];
|
|
8
8
|
deletedDocs?: HydratedDocument<T>[];
|
|
9
|
-
updatedIds?: Types.ObjectId[];
|
|
10
9
|
}
|
|
11
10
|
export default IContext;
|
|
12
11
|
//# sourceMappingURL=IContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"IContext.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,UAAU,QAAQ,CAAC,CAAC;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA;CACpC;AAED,eAAe,QAAQ,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,EAAmC,KAAK,EAAiB,MAAM,EAAS,MAAM,UAAU,CAAA;AAEpG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AA2G7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IA2JlG,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-patch-mongoose",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Patch history & events for mongoose models",
|
|
5
5
|
"author": "Alex Eagle",
|
|
6
6
|
"license": "MIT",
|
|
@@ -80,8 +80,8 @@
|
|
|
80
80
|
"@types/jest": "29.5.0",
|
|
81
81
|
"@types/lodash": "^4.14.192",
|
|
82
82
|
"@types/node": "18.15.11",
|
|
83
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
84
|
-
"@typescript-eslint/parser": "5.
|
|
83
|
+
"@typescript-eslint/eslint-plugin": "5.58.0",
|
|
84
|
+
"@typescript-eslint/parser": "5.58.0",
|
|
85
85
|
"eslint": "8.38.0",
|
|
86
86
|
"eslint-config-standard": "17.0.0",
|
|
87
87
|
"eslint-plugin-import": "2.27.5",
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import type { HydratedDocument
|
|
1
|
+
import type { HydratedDocument } from 'mongoose'
|
|
2
2
|
|
|
3
3
|
interface IContext<T> {
|
|
4
4
|
op: string
|
|
5
5
|
modelName: string
|
|
6
6
|
collectionName: string
|
|
7
7
|
isNew?: boolean
|
|
8
|
-
|
|
8
|
+
createdDocs?: HydratedDocument<T>[]
|
|
9
9
|
deletedDocs?: HydratedDocument<T>[]
|
|
10
|
-
updatedIds?: Types.ObjectId[]
|
|
11
10
|
}
|
|
12
11
|
|
|
13
12
|
export default IContext
|
package/src/plugin.ts
CHANGED
|
@@ -62,28 +62,19 @@ async function updatePatch<T> (opts: IPluginOptions<T>, context: IContext<T>, cu
|
|
|
62
62
|
})
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
async function
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
op: context.op,
|
|
70
|
-
modelName: context.modelName,
|
|
71
|
-
collectionName: context.collectionName,
|
|
72
|
-
collectionId: current._id as Types.ObjectId,
|
|
73
|
-
doc: current
|
|
74
|
-
})
|
|
75
|
-
}
|
|
65
|
+
async function bulkPatch<T> (opts: IPluginOptions<T>, context: IContext<T>, eventKey: 'eventCreated' | 'eventDeleted', docsKey: 'createdDocs' | 'deletedDocs'): Promise<void> {
|
|
66
|
+
const event = opts[eventKey]
|
|
67
|
+
const docs = context[docsKey]
|
|
68
|
+
const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc'
|
|
76
69
|
|
|
77
|
-
|
|
78
|
-
if (_.isEmpty(context.deletedDocs) || (!opts.eventDeleted && opts.patchHistoryDisabled)) return
|
|
70
|
+
if (_.isEmpty(docs) || (!event && opts.patchHistoryDisabled)) return
|
|
79
71
|
|
|
80
|
-
const chunks = _.chunk(
|
|
72
|
+
const chunks = _.chunk(docs, 1000)
|
|
81
73
|
for await (const chunk of chunks) {
|
|
82
74
|
const bulk = []
|
|
83
|
-
for (const
|
|
84
|
-
if (
|
|
85
|
-
|
|
86
|
-
}
|
|
75
|
+
for (const doc of chunk) {
|
|
76
|
+
if (event) em.emit(event, { [key]: doc })
|
|
77
|
+
|
|
87
78
|
if (!opts.patchHistoryDisabled) {
|
|
88
79
|
bulk.push({
|
|
89
80
|
insertOne: {
|
|
@@ -91,8 +82,8 @@ async function deletePatch<T> (opts: IPluginOptions<T>, context: IContext<T>): P
|
|
|
91
82
|
op: context.op,
|
|
92
83
|
modelName: context.modelName,
|
|
93
84
|
collectionName: context.collectionName,
|
|
94
|
-
collectionId:
|
|
95
|
-
doc
|
|
85
|
+
collectionId: doc._id as Types.ObjectId,
|
|
86
|
+
doc,
|
|
96
87
|
version: 0
|
|
97
88
|
}
|
|
98
89
|
}
|
|
@@ -110,6 +101,14 @@ async function deletePatch<T> (opts: IPluginOptions<T>, context: IContext<T>): P
|
|
|
110
101
|
}
|
|
111
102
|
}
|
|
112
103
|
|
|
104
|
+
async function createPatch<T> (opts: IPluginOptions<T>, context: IContext<T>): Promise<void> {
|
|
105
|
+
await bulkPatch(opts, context, 'eventCreated', 'createdDocs')
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async function deletePatch<T> (opts: IPluginOptions<T>, context: IContext<T>): Promise<void> {
|
|
109
|
+
await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs')
|
|
110
|
+
}
|
|
111
|
+
|
|
113
112
|
/**
|
|
114
113
|
* @description Patch patch event emitter
|
|
115
114
|
*/
|
|
@@ -129,15 +128,13 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
|
|
|
129
128
|
const context: IContext<T> = {
|
|
130
129
|
op: this.isNew ? 'create' : 'update',
|
|
131
130
|
modelName: opts.modelName ?? model.modelName,
|
|
132
|
-
collectionName: opts.collectionName ?? model.collection.collectionName
|
|
131
|
+
collectionName: opts.collectionName ?? model.collection.collectionName,
|
|
132
|
+
createdDocs: [current]
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
try {
|
|
136
136
|
if (this.isNew) {
|
|
137
|
-
|
|
138
|
-
em.emit(opts.eventCreated, { doc: current })
|
|
139
|
-
}
|
|
140
|
-
await createPatch(opts, context, current)
|
|
137
|
+
await createPatch(opts, context)
|
|
141
138
|
} else {
|
|
142
139
|
const original = await model.findById(current._id).exec()
|
|
143
140
|
if (original) {
|
|
@@ -150,7 +147,18 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
|
|
|
150
147
|
}
|
|
151
148
|
})
|
|
152
149
|
|
|
153
|
-
schema.
|
|
150
|
+
schema.post('insertMany', async function (docs) {
|
|
151
|
+
const context = {
|
|
152
|
+
op: 'create',
|
|
153
|
+
modelName: opts.modelName ?? this.modelName,
|
|
154
|
+
collectionName: opts.collectionName ?? this.collection.collectionName,
|
|
155
|
+
createdDocs: docs as unknown as HydratedDocument<T>[]
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
await createPatch(opts, context)
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
schema.pre(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function (this: IHookContext<T>, next) {
|
|
154
162
|
const filter = this.getFilter()
|
|
155
163
|
const update = this.getUpdate() as Record<string, Partial<T>> | null
|
|
156
164
|
const options = this.getOptions()
|
|
@@ -177,6 +185,7 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
|
|
|
177
185
|
const cursor = this.model.find<HydratedDocument<T>>(filter).cursor()
|
|
178
186
|
await cursor.eachAsync(async (doc) => {
|
|
179
187
|
let current = doc.toObject({ depopulate: true }) as HydratedDocument<T>
|
|
188
|
+
const original = doc.toObject({ depopulate: true }) as HydratedDocument<T>
|
|
180
189
|
current = assign(current, update)
|
|
181
190
|
_.forEach(commands, (command) => {
|
|
182
191
|
try {
|
|
@@ -185,7 +194,7 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
|
|
|
185
194
|
// we catch assign keys that are not implemented
|
|
186
195
|
}
|
|
187
196
|
})
|
|
188
|
-
await updatePatch(opts, this._context, current,
|
|
197
|
+
await updatePatch(opts, this._context, current, original)
|
|
189
198
|
})
|
|
190
199
|
next()
|
|
191
200
|
} catch (error) {
|
|
@@ -193,18 +202,20 @@ export const patchHistoryPlugin = function plugin<T> (schema: Schema<T>, opts: I
|
|
|
193
202
|
}
|
|
194
203
|
})
|
|
195
204
|
|
|
196
|
-
schema.post(['
|
|
205
|
+
schema.post(['update', 'updateOne', 'updateMany', 'findOneAndUpdate'], async function (this: IHookContext<T>) {
|
|
197
206
|
const update = this.getUpdate()
|
|
198
207
|
|
|
199
208
|
if (update && this._context.isNew) {
|
|
200
209
|
const cursor = this.model.findOne<HydratedDocument<T>>(update).cursor()
|
|
201
|
-
await cursor.eachAsync(
|
|
210
|
+
await cursor.eachAsync((doc) => {
|
|
202
211
|
const current = doc.toObject({ depopulate: true }) as HydratedDocument<T>
|
|
203
|
-
if (
|
|
204
|
-
|
|
212
|
+
if (this._context.createdDocs) {
|
|
213
|
+
this._context.createdDocs.push(current)
|
|
214
|
+
} else {
|
|
215
|
+
this._context.createdDocs = [current]
|
|
205
216
|
}
|
|
206
|
-
await createPatch(opts, this._context, current)
|
|
207
217
|
})
|
|
218
|
+
await createPatch(opts, this._context)
|
|
208
219
|
}
|
|
209
220
|
})
|
|
210
221
|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import mongoose, { model } from 'mongoose'
|
|
2
|
+
|
|
3
|
+
import UserSchema from './schemas/UserSchema'
|
|
4
|
+
import { patchHistoryPlugin } from '../src/plugin'
|
|
5
|
+
import History from '../src/models/History'
|
|
6
|
+
|
|
7
|
+
import em from '../src/em'
|
|
8
|
+
import { USER_CREATED } from './constants/events'
|
|
9
|
+
|
|
10
|
+
jest.mock('../src/em', () => {
|
|
11
|
+
return {
|
|
12
|
+
emit: jest.fn()
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
describe('plugin - event created & patch history disabled', () => {
|
|
17
|
+
const uri = `${globalThis.__MONGO_URI__}${globalThis.__MONGO_DB_NAME__}`
|
|
18
|
+
|
|
19
|
+
UserSchema.plugin(patchHistoryPlugin, {
|
|
20
|
+
eventCreated: USER_CREATED,
|
|
21
|
+
patchHistoryDisabled: true
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
const User = model('User', UserSchema)
|
|
25
|
+
|
|
26
|
+
beforeAll(async () => {
|
|
27
|
+
await mongoose.connect(uri)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
afterAll(async () => {
|
|
31
|
+
await mongoose.connection.close()
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
beforeEach(async () => {
|
|
35
|
+
await mongoose.connection.collection('users').deleteMany({})
|
|
36
|
+
await mongoose.connection.collection('history').deleteMany({})
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('should save and emit one create event', async () => {
|
|
40
|
+
const john = new User({ name: 'John', role: 'user' })
|
|
41
|
+
await john.save()
|
|
42
|
+
|
|
43
|
+
const history = await History.find({})
|
|
44
|
+
expect(history).toHaveLength(0)
|
|
45
|
+
|
|
46
|
+
expect(em.emit).toHaveBeenCalledTimes(1)
|
|
47
|
+
expect(em.emit).toHaveBeenCalledWith(USER_CREATED, {
|
|
48
|
+
doc: expect.objectContaining({
|
|
49
|
+
_id: john._id,
|
|
50
|
+
name: john.name,
|
|
51
|
+
role: john.role,
|
|
52
|
+
createdAt: john.createdAt,
|
|
53
|
+
updatedAt: john.updatedAt
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it('should create and emit one create event', async () => {
|
|
59
|
+
const user = await User.create({ name: 'John', role: 'user' })
|
|
60
|
+
|
|
61
|
+
const history = await History.find({})
|
|
62
|
+
expect(history).toHaveLength(0)
|
|
63
|
+
|
|
64
|
+
expect(em.emit).toHaveBeenCalledTimes(1)
|
|
65
|
+
expect(em.emit).toHaveBeenCalledWith(USER_CREATED, {
|
|
66
|
+
doc: expect.objectContaining({
|
|
67
|
+
_id: user._id,
|
|
68
|
+
name: user.name,
|
|
69
|
+
role: user.role,
|
|
70
|
+
createdAt: user.createdAt,
|
|
71
|
+
updatedAt: user.updatedAt
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('should insertMany and emit one create event', async () => {
|
|
77
|
+
const [user] = await User.insertMany([{ name: 'John', role: 'user' }])
|
|
78
|
+
|
|
79
|
+
const history = await History.find({})
|
|
80
|
+
expect(history).toHaveLength(0)
|
|
81
|
+
|
|
82
|
+
expect(em.emit).toHaveBeenCalledTimes(1)
|
|
83
|
+
expect(em.emit).toHaveBeenCalledWith(USER_CREATED, {
|
|
84
|
+
doc: expect.objectContaining({
|
|
85
|
+
_id: user._id,
|
|
86
|
+
name: user.name,
|
|
87
|
+
role: user.role,
|
|
88
|
+
createdAt: user.createdAt,
|
|
89
|
+
updatedAt: user.updatedAt
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
it('should insertMany and emit three create events', async () => {
|
|
95
|
+
const users = await User.insertMany([
|
|
96
|
+
{ name: 'John', role: 'user' },
|
|
97
|
+
{ name: 'Alice', role: 'user' },
|
|
98
|
+
{ name: 'Bob', role: 'user' }
|
|
99
|
+
])
|
|
100
|
+
|
|
101
|
+
const [john, alice, bob] = users
|
|
102
|
+
|
|
103
|
+
const history = await History.find({})
|
|
104
|
+
expect(history).toHaveLength(0)
|
|
105
|
+
|
|
106
|
+
expect(em.emit).toHaveBeenCalledTimes(3)
|
|
107
|
+
expect(em.emit).toHaveBeenNthCalledWith(1, USER_CREATED, {
|
|
108
|
+
doc: expect.objectContaining({
|
|
109
|
+
_id: john._id,
|
|
110
|
+
name: john.name,
|
|
111
|
+
role: john.role,
|
|
112
|
+
createdAt: john.createdAt,
|
|
113
|
+
updatedAt: john.updatedAt
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
expect(em.emit).toHaveBeenNthCalledWith(2, USER_CREATED, {
|
|
117
|
+
doc: expect.objectContaining({
|
|
118
|
+
_id: alice._id,
|
|
119
|
+
name: alice.name,
|
|
120
|
+
role: alice.role,
|
|
121
|
+
createdAt: alice.createdAt,
|
|
122
|
+
updatedAt: alice.updatedAt
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
expect(em.emit).toHaveBeenNthCalledWith(3, USER_CREATED, {
|
|
126
|
+
doc: expect.objectContaining({
|
|
127
|
+
_id: bob._id,
|
|
128
|
+
name: bob.name,
|
|
129
|
+
role: bob.role,
|
|
130
|
+
createdAt: bob.createdAt,
|
|
131
|
+
updatedAt: bob.updatedAt
|
|
132
|
+
})
|
|
133
|
+
})
|
|
134
|
+
})
|
|
135
|
+
})
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
import mongoose, { model } from 'mongoose'
|
|
3
2
|
|
|
4
3
|
import UserSchema from './schemas/UserSchema'
|
|
@@ -14,7 +13,7 @@ jest.mock('../src/em', () => {
|
|
|
14
13
|
}
|
|
15
14
|
})
|
|
16
15
|
|
|
17
|
-
describe('plugin - patch history disabled', () => {
|
|
16
|
+
describe('plugin - event delete & patch history disabled', () => {
|
|
18
17
|
const uri = `${globalThis.__MONGO_URI__}${globalThis.__MONGO_DB_NAME__}`
|
|
19
18
|
|
|
20
19
|
UserSchema.plugin(patchHistoryPlugin, {
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
|
|
4
|
-
export const clearDirectory = (dir: string) => {
|
|
5
|
-
if (!fs.existsSync(dir)) return
|
|
6
|
-
const files = fs.readdirSync(dir)
|
|
7
|
-
for (const file of files) {
|
|
8
|
-
const filePath = path.join(dir, file)
|
|
9
|
-
if (fs.statSync(filePath).isFile()) {
|
|
10
|
-
fs.unlinkSync(filePath)
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|