ts-patch-mongoose 1.1.4 → 1.1.6
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/.eslintrc +8 -3
- package/dist/cjs/patch.js +88 -0
- package/dist/cjs/patch.js.map +1 -0
- package/dist/cjs/plugin.js +50 -146
- package/dist/cjs/plugin.js.map +1 -1
- package/dist/cjs/types/interfaces/IPluginOptions.d.ts +1 -1
- package/dist/cjs/types/interfaces/IPluginOptions.d.ts.map +1 -1
- package/dist/cjs/types/patch.d.ts +12 -0
- package/dist/cjs/types/patch.d.ts.map +1 -0
- package/dist/cjs/types/plugin.d.ts.map +1 -1
- package/dist/esm/patch.js +79 -0
- package/dist/esm/patch.js.map +1 -0
- package/dist/esm/plugin.js.map +1 -1
- package/dist/esm/plugin.mjs +47 -143
- package/dist/esm/types/interfaces/IPluginOptions.d.ts +1 -1
- package/dist/esm/types/interfaces/IPluginOptions.d.ts.map +1 -1
- package/dist/esm/types/patch.d.ts +12 -0
- package/dist/esm/types/patch.d.ts.map +1 -0
- package/dist/esm/types/plugin.d.ts.map +1 -1
- package/package.json +8 -7
- package/src/interfaces/IPluginOptions.ts +1 -1
- package/src/patch.ts +101 -0
- package/src/plugin.ts +55 -155
- package/tests/em.test.ts +5 -5
- package/tests/patch.test.ts +141 -0
- package/tests/plugin-callback.test.ts +50 -0
- package/tests/plugin-event-deleted.test.ts +20 -13
package/.eslintrc
CHANGED
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
"plugins": [
|
|
11
11
|
"@typescript-eslint",
|
|
12
12
|
"jest",
|
|
13
|
-
"jest-formatting"
|
|
13
|
+
"jest-formatting",
|
|
14
|
+
"sonarjs"
|
|
14
15
|
],
|
|
15
16
|
"extends": [
|
|
16
17
|
"standard",
|
|
17
18
|
"eslint:recommended",
|
|
18
19
|
"plugin:@typescript-eslint/eslint-recommended",
|
|
19
|
-
"plugin:@typescript-eslint/recommended"
|
|
20
|
+
"plugin:@typescript-eslint/recommended",
|
|
21
|
+
"plugin:sonarjs/recommended"
|
|
20
22
|
],
|
|
21
23
|
"globals": {
|
|
22
24
|
"Atomics": "readonly",
|
|
@@ -61,7 +63,10 @@
|
|
|
61
63
|
"plugin:jest/style",
|
|
62
64
|
"plugin:jest/recommended",
|
|
63
65
|
"plugin:jest-formatting/recommended"
|
|
64
|
-
]
|
|
66
|
+
],
|
|
67
|
+
"rules": {
|
|
68
|
+
"sonarjs/no-duplicate-string": "off"
|
|
69
|
+
}
|
|
65
70
|
},
|
|
66
71
|
{
|
|
67
72
|
"parserOptions": {
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deletePatch = exports.updatePatch = exports.createPatch = exports.bulkPatch = exports.getObjects = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
6
|
+
const omit_deep_1 = tslib_1.__importDefault(require("omit-deep"));
|
|
7
|
+
const fast_json_patch_1 = tslib_1.__importDefault(require("fast-json-patch"));
|
|
8
|
+
const History_1 = tslib_1.__importDefault(require("./models/History"));
|
|
9
|
+
const em_1 = tslib_1.__importDefault(require("./em"));
|
|
10
|
+
function getObjects(opts, current, original) {
|
|
11
|
+
let currentObject = JSON.parse(JSON.stringify(current));
|
|
12
|
+
let originalObject = JSON.parse(JSON.stringify(original));
|
|
13
|
+
if (opts.omit) {
|
|
14
|
+
currentObject = (0, omit_deep_1.default)(currentObject, opts.omit);
|
|
15
|
+
originalObject = (0, omit_deep_1.default)(originalObject, opts.omit);
|
|
16
|
+
}
|
|
17
|
+
return { currentObject, originalObject };
|
|
18
|
+
}
|
|
19
|
+
exports.getObjects = getObjects;
|
|
20
|
+
async function bulkPatch(opts, context, eventKey, docsKey) {
|
|
21
|
+
const event = opts[eventKey];
|
|
22
|
+
const docs = context[docsKey];
|
|
23
|
+
const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc';
|
|
24
|
+
if (lodash_1.default.isEmpty(docs) || (!event && opts.patchHistoryDisabled))
|
|
25
|
+
return;
|
|
26
|
+
const chunks = lodash_1.default.chunk(docs, 1000);
|
|
27
|
+
for await (const chunk of chunks) {
|
|
28
|
+
const bulk = [];
|
|
29
|
+
for (const doc of chunk) {
|
|
30
|
+
if (event)
|
|
31
|
+
em_1.default.emit(event, { [key]: doc });
|
|
32
|
+
if (!opts.patchHistoryDisabled) {
|
|
33
|
+
bulk.push({
|
|
34
|
+
insertOne: {
|
|
35
|
+
document: {
|
|
36
|
+
op: context.op,
|
|
37
|
+
modelName: context.modelName,
|
|
38
|
+
collectionName: context.collectionName,
|
|
39
|
+
collectionId: doc._id,
|
|
40
|
+
doc,
|
|
41
|
+
version: 0
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (!opts.patchHistoryDisabled) {
|
|
48
|
+
await History_1.default.bulkWrite(bulk, { ordered: false });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.bulkPatch = bulkPatch;
|
|
53
|
+
async function createPatch(opts, context) {
|
|
54
|
+
await bulkPatch(opts, context, 'eventCreated', 'createdDocs');
|
|
55
|
+
}
|
|
56
|
+
exports.createPatch = createPatch;
|
|
57
|
+
async function updatePatch(opts, context, current, original) {
|
|
58
|
+
const { currentObject, originalObject } = getObjects(opts, current, original);
|
|
59
|
+
if (lodash_1.default.isEmpty(originalObject) || lodash_1.default.isEmpty(currentObject))
|
|
60
|
+
return;
|
|
61
|
+
const patch = fast_json_patch_1.default.compare(originalObject, currentObject, true);
|
|
62
|
+
if (lodash_1.default.isEmpty(patch))
|
|
63
|
+
return;
|
|
64
|
+
if (opts.eventUpdated) {
|
|
65
|
+
em_1.default.emit(opts.eventUpdated, { oldDoc: original, doc: current, patch });
|
|
66
|
+
}
|
|
67
|
+
if (opts.patchHistoryDisabled)
|
|
68
|
+
return;
|
|
69
|
+
let version = 0;
|
|
70
|
+
const lastHistory = await History_1.default.findOne({ collectionId: original._id }).sort('-version').exec();
|
|
71
|
+
if (lastHistory && lastHistory.version >= 0) {
|
|
72
|
+
version = lastHistory.version + 1;
|
|
73
|
+
}
|
|
74
|
+
await History_1.default.create({
|
|
75
|
+
op: context.op,
|
|
76
|
+
modelName: context.modelName,
|
|
77
|
+
collectionName: context.collectionName,
|
|
78
|
+
collectionId: original._id,
|
|
79
|
+
patch,
|
|
80
|
+
version
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
exports.updatePatch = updatePatch;
|
|
84
|
+
async function deletePatch(opts, context) {
|
|
85
|
+
await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs');
|
|
86
|
+
}
|
|
87
|
+
exports.deletePatch = deletePatch;
|
|
88
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/plugin.js
CHANGED
|
@@ -3,15 +3,17 @@ 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 omit_deep_1 = tslib_1.__importDefault(require("omit-deep"));
|
|
7
|
-
const fast_json_patch_1 = tslib_1.__importDefault(require("fast-json-patch"));
|
|
8
6
|
const power_assign_1 = require("power-assign");
|
|
7
|
+
const patch_1 = require("./patch");
|
|
9
8
|
const em_1 = tslib_1.__importDefault(require("./em"));
|
|
10
|
-
const History_1 = tslib_1.__importDefault(require("./models/History"));
|
|
11
9
|
const options = {
|
|
12
10
|
document: false,
|
|
13
11
|
query: true
|
|
14
12
|
};
|
|
13
|
+
const toObjectOptions = {
|
|
14
|
+
depopulate: true,
|
|
15
|
+
virtuals: false
|
|
16
|
+
};
|
|
15
17
|
const updateMethods = [
|
|
16
18
|
'update',
|
|
17
19
|
'updateOne',
|
|
@@ -30,87 +32,10 @@ const deleteMethods = [
|
|
|
30
32
|
'deleteOne',
|
|
31
33
|
'deleteMany'
|
|
32
34
|
];
|
|
33
|
-
function getObjects(opts, current, original) {
|
|
34
|
-
let currentObject = JSON.parse(JSON.stringify(current));
|
|
35
|
-
let originalObject = JSON.parse(JSON.stringify(original));
|
|
36
|
-
if (opts.omit) {
|
|
37
|
-
currentObject = (0, omit_deep_1.default)(currentObject, opts.omit);
|
|
38
|
-
originalObject = (0, omit_deep_1.default)(originalObject, opts.omit);
|
|
39
|
-
}
|
|
40
|
-
return { currentObject, originalObject };
|
|
41
|
-
}
|
|
42
|
-
async function updatePatch(opts, context, current, original) {
|
|
43
|
-
const { currentObject, originalObject } = getObjects(opts, current, original);
|
|
44
|
-
if (lodash_1.default.isEmpty(originalObject) || lodash_1.default.isEmpty(currentObject))
|
|
45
|
-
return;
|
|
46
|
-
const patch = fast_json_patch_1.default.compare(originalObject, currentObject, true);
|
|
47
|
-
if (lodash_1.default.isEmpty(patch))
|
|
48
|
-
return;
|
|
49
|
-
if (opts.eventUpdated) {
|
|
50
|
-
em_1.default.emit(opts.eventUpdated, { oldDoc: original, doc: current, patch });
|
|
51
|
-
}
|
|
52
|
-
if (opts.patchHistoryDisabled)
|
|
53
|
-
return;
|
|
54
|
-
let version = 0;
|
|
55
|
-
const lastHistory = await History_1.default.findOne({ collectionId: original._id }).sort('-version').exec();
|
|
56
|
-
if (lastHistory && lastHistory.version >= 0) {
|
|
57
|
-
version = lastHistory.version + 1;
|
|
58
|
-
}
|
|
59
|
-
await History_1.default.create({
|
|
60
|
-
op: context.op,
|
|
61
|
-
modelName: context.modelName,
|
|
62
|
-
collectionName: context.collectionName,
|
|
63
|
-
collectionId: original._id,
|
|
64
|
-
patch,
|
|
65
|
-
version
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
async function bulkPatch(opts, context, eventKey, docsKey) {
|
|
69
|
-
const event = opts[eventKey];
|
|
70
|
-
const docs = context[docsKey];
|
|
71
|
-
const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc';
|
|
72
|
-
if (lodash_1.default.isEmpty(docs) || (!event && opts.patchHistoryDisabled))
|
|
73
|
-
return;
|
|
74
|
-
const chunks = lodash_1.default.chunk(docs, 1000);
|
|
75
|
-
for await (const chunk of chunks) {
|
|
76
|
-
const bulk = [];
|
|
77
|
-
for (const doc of chunk) {
|
|
78
|
-
if (event)
|
|
79
|
-
em_1.default.emit(event, { [key]: doc });
|
|
80
|
-
if (!opts.patchHistoryDisabled) {
|
|
81
|
-
bulk.push({
|
|
82
|
-
insertOne: {
|
|
83
|
-
document: {
|
|
84
|
-
op: context.op,
|
|
85
|
-
modelName: context.modelName,
|
|
86
|
-
collectionName: context.collectionName,
|
|
87
|
-
collectionId: doc._id,
|
|
88
|
-
doc,
|
|
89
|
-
version: 0
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (!opts.patchHistoryDisabled) {
|
|
96
|
-
await History_1.default
|
|
97
|
-
.bulkWrite(bulk, { ordered: false })
|
|
98
|
-
.catch((err) => {
|
|
99
|
-
console.error(err);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
async function createPatch(opts, context) {
|
|
105
|
-
await bulkPatch(opts, context, 'eventCreated', 'createdDocs');
|
|
106
|
-
}
|
|
107
|
-
async function deletePatch(opts, context) {
|
|
108
|
-
await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs');
|
|
109
|
-
}
|
|
110
35
|
exports.patchEventEmitter = em_1.default;
|
|
111
36
|
const patchHistoryPlugin = function plugin(schema, opts) {
|
|
112
37
|
schema.pre('save', async function (next) {
|
|
113
|
-
const current = this.toObject(
|
|
38
|
+
const current = this.toObject(toObjectOptions);
|
|
114
39
|
const model = this.constructor;
|
|
115
40
|
const context = {
|
|
116
41
|
op: this.isNew ? 'create' : 'update',
|
|
@@ -118,21 +43,16 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
118
43
|
collectionName: opts.collectionName ?? model.collection.collectionName,
|
|
119
44
|
createdDocs: [current]
|
|
120
45
|
};
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
await createPatch(opts, context);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
const original = await model.findById(current._id).exec();
|
|
127
|
-
if (original) {
|
|
128
|
-
await updatePatch(opts, context, current, original);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
next();
|
|
46
|
+
if (this.isNew) {
|
|
47
|
+
await (0, patch_1.createPatch)(opts, context);
|
|
132
48
|
}
|
|
133
|
-
|
|
134
|
-
|
|
49
|
+
else {
|
|
50
|
+
const original = await model.findById(current._id).exec();
|
|
51
|
+
if (original) {
|
|
52
|
+
await (0, patch_1.updatePatch)(opts, context, current, original);
|
|
53
|
+
}
|
|
135
54
|
}
|
|
55
|
+
next();
|
|
136
56
|
});
|
|
137
57
|
schema.post('insertMany', async function (docs) {
|
|
138
58
|
const context = {
|
|
@@ -141,7 +61,7 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
141
61
|
collectionName: opts.collectionName ?? this.collection.collectionName,
|
|
142
62
|
createdDocs: docs
|
|
143
63
|
};
|
|
144
|
-
await createPatch(opts, context);
|
|
64
|
+
await (0, patch_1.createPatch)(opts, context);
|
|
145
65
|
});
|
|
146
66
|
schema.pre(updateMethods, async function (next) {
|
|
147
67
|
const filter = this.getFilter();
|
|
@@ -155,68 +75,52 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
155
75
|
collectionName: opts.collectionName ?? this.model.collection.collectionName,
|
|
156
76
|
isNew: options.upsert && count === 0
|
|
157
77
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
delete update[key];
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
const cursor = this.model.find(filter).cursor();
|
|
167
|
-
await cursor.eachAsync(async (doc) => {
|
|
168
|
-
let current = doc.toObject({ depopulate: true });
|
|
169
|
-
const original = doc.toObject({ depopulate: true });
|
|
170
|
-
current = (0, power_assign_1.assign)(current, update);
|
|
171
|
-
lodash_1.default.forEach(commands, (command) => {
|
|
172
|
-
try {
|
|
173
|
-
current = (0, power_assign_1.assign)(current, command);
|
|
174
|
-
}
|
|
175
|
-
catch (error) {
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
await updatePatch(opts, this._context, current, original);
|
|
78
|
+
const keys = lodash_1.default.keys(update).filter((key) => key.startsWith('$'));
|
|
79
|
+
if (update && !lodash_1.default.isEmpty(keys)) {
|
|
80
|
+
lodash_1.default.forEach(keys, (key) => {
|
|
81
|
+
commands.push({ [key]: update[key] });
|
|
82
|
+
delete update[key];
|
|
179
83
|
});
|
|
180
|
-
next();
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
next(error);
|
|
184
84
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
this._context.createdDocs.push(current);
|
|
85
|
+
const cursor = this.model.find(filter).cursor();
|
|
86
|
+
await cursor.eachAsync(async (doc) => {
|
|
87
|
+
let current = doc.toObject(toObjectOptions);
|
|
88
|
+
const original = doc.toObject(toObjectOptions);
|
|
89
|
+
current = (0, power_assign_1.assign)(current, update);
|
|
90
|
+
lodash_1.default.forEach(commands, (command) => {
|
|
91
|
+
try {
|
|
92
|
+
current = (0, power_assign_1.assign)(current, command);
|
|
194
93
|
}
|
|
195
|
-
|
|
196
|
-
this._context.createdDocs = [current];
|
|
94
|
+
catch (error) {
|
|
197
95
|
}
|
|
198
96
|
});
|
|
199
|
-
await
|
|
97
|
+
await (0, patch_1.updatePatch)(opts, this._context, current, original);
|
|
98
|
+
});
|
|
99
|
+
next();
|
|
100
|
+
});
|
|
101
|
+
schema.post(updateMethods, async function () {
|
|
102
|
+
const update = this.getUpdate();
|
|
103
|
+
if (!update || !this._context.isNew)
|
|
104
|
+
return;
|
|
105
|
+
const found = await this.model.findOne(update).exec();
|
|
106
|
+
if (found) {
|
|
107
|
+
const current = found.toObject(toObjectOptions);
|
|
108
|
+
this._context.createdDocs = [current];
|
|
109
|
+
await (0, patch_1.createPatch)(opts, this._context);
|
|
200
110
|
}
|
|
201
111
|
});
|
|
202
|
-
schema.
|
|
203
|
-
const original = this.toObject(
|
|
112
|
+
schema.post('remove', async function () {
|
|
113
|
+
const original = this.toObject(toObjectOptions);
|
|
204
114
|
const model = this.constructor;
|
|
205
115
|
const context = {
|
|
206
116
|
op: 'delete',
|
|
207
117
|
modelName: opts.modelName ?? model.modelName,
|
|
208
118
|
collectionName: opts.collectionName ?? model.collection.collectionName
|
|
209
119
|
};
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
em_1.default.emit(opts.eventDeleted, { oldDoc: original });
|
|
213
|
-
}
|
|
214
|
-
await deletePatch(opts, context);
|
|
215
|
-
next();
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
next(error);
|
|
120
|
+
if (opts.eventDeleted) {
|
|
121
|
+
em_1.default.emit(opts.eventDeleted, { oldDoc: original });
|
|
219
122
|
}
|
|
123
|
+
await (0, patch_1.deletePatch)(opts, context);
|
|
220
124
|
});
|
|
221
125
|
schema.pre(deleteMethods, options, async function (next) {
|
|
222
126
|
const filter = this.getFilter();
|
|
@@ -241,13 +145,13 @@ const patchHistoryPlugin = function plugin(schema, opts) {
|
|
|
241
145
|
this._context.deletedDocs = [doc];
|
|
242
146
|
}
|
|
243
147
|
}
|
|
244
|
-
if (opts.
|
|
245
|
-
await opts.
|
|
148
|
+
if (opts.preDeleteCallback && lodash_1.default.isArray(this._context.deletedDocs) && !lodash_1.default.isEmpty(this._context.deletedDocs)) {
|
|
149
|
+
await opts.preDeleteCallback(this._context.deletedDocs);
|
|
246
150
|
}
|
|
247
151
|
next();
|
|
248
152
|
});
|
|
249
153
|
schema.post(deleteMethods, options, async function () {
|
|
250
|
-
await deletePatch(opts, this._context);
|
|
154
|
+
await (0, patch_1.deletePatch)(opts, this._context);
|
|
251
155
|
});
|
|
252
156
|
};
|
|
253
157
|
exports.patchHistoryPlugin = patchHistoryPlugin;
|
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
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ interface IPluginOptions<T> {
|
|
|
6
6
|
eventCreated?: string;
|
|
7
7
|
eventDeleted?: string;
|
|
8
8
|
patchHistoryDisabled?: boolean;
|
|
9
|
-
|
|
9
|
+
preDeleteCallback?: (docs: HydratedDocument<T>[]) => Promise<void>;
|
|
10
10
|
omit?: string[];
|
|
11
11
|
}
|
|
12
12
|
export default IPluginOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IPluginOptions.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/IPluginOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,UAAU,cAAc,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,
|
|
1
|
+
{"version":3,"file":"IPluginOptions.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/IPluginOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,UAAU,cAAc,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HydratedDocument } from 'mongoose';
|
|
2
|
+
import type IPluginOptions from './interfaces/IPluginOptions';
|
|
3
|
+
import type IContext from './interfaces/IContext';
|
|
4
|
+
export declare function getObjects<T>(opts: IPluginOptions<T>, current: HydratedDocument<T>, original: HydratedDocument<T>): {
|
|
5
|
+
currentObject: Partial<T>;
|
|
6
|
+
originalObject: Partial<T>;
|
|
7
|
+
};
|
|
8
|
+
export declare function bulkPatch<T>(opts: IPluginOptions<T>, context: IContext<T>, eventKey: 'eventCreated' | 'eventDeleted', docsKey: 'createdDocs' | 'deletedDocs'): Promise<void>;
|
|
9
|
+
export declare function createPatch<T>(opts: IPluginOptions<T>, context: IContext<T>): Promise<void>;
|
|
10
|
+
export declare function updatePatch<T>(opts: IPluginOptions<T>, context: IContext<T>, current: HydratedDocument<T>, original: HydratedDocument<T>): Promise<void>;
|
|
11
|
+
export declare function deletePatch<T>(opts: IPluginOptions<T>, context: IContext<T>): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=patch.d.ts.map
|
|
@@ -0,0 +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,cAAc,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AAKjD,wBAAgB,UAAU,CAAC,CAAC,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,CAU9K;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAG,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,CAmCnL;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAElG;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAG,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,CA+B/J;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAElG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,KAAK,EAAoB,KAAK,EAA2B,MAAM,EAAmB,MAAM,UAAU,CAAA;AAEzG,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAwC7D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAAK,CAAA;AAQnC,eAAO,MAAM,kBAAkB,oOAAoE,IAgJlG,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import omit from 'omit-deep';
|
|
3
|
+
import jsonpatch from 'fast-json-patch';
|
|
4
|
+
import History from './models/History';
|
|
5
|
+
import em from './em';
|
|
6
|
+
export function getObjects(opts, current, original) {
|
|
7
|
+
let currentObject = JSON.parse(JSON.stringify(current));
|
|
8
|
+
let originalObject = JSON.parse(JSON.stringify(original));
|
|
9
|
+
if (opts.omit) {
|
|
10
|
+
currentObject = omit(currentObject, opts.omit);
|
|
11
|
+
originalObject = omit(originalObject, opts.omit);
|
|
12
|
+
}
|
|
13
|
+
return { currentObject, originalObject };
|
|
14
|
+
}
|
|
15
|
+
export async function bulkPatch(opts, context, eventKey, docsKey) {
|
|
16
|
+
const event = opts[eventKey];
|
|
17
|
+
const docs = context[docsKey];
|
|
18
|
+
const key = eventKey === 'eventCreated' ? 'doc' : 'oldDoc';
|
|
19
|
+
if (_.isEmpty(docs) || (!event && opts.patchHistoryDisabled))
|
|
20
|
+
return;
|
|
21
|
+
const chunks = _.chunk(docs, 1000);
|
|
22
|
+
for await (const chunk of chunks) {
|
|
23
|
+
const bulk = [];
|
|
24
|
+
for (const doc of chunk) {
|
|
25
|
+
if (event)
|
|
26
|
+
em.emit(event, { [key]: doc });
|
|
27
|
+
if (!opts.patchHistoryDisabled) {
|
|
28
|
+
bulk.push({
|
|
29
|
+
insertOne: {
|
|
30
|
+
document: {
|
|
31
|
+
op: context.op,
|
|
32
|
+
modelName: context.modelName,
|
|
33
|
+
collectionName: context.collectionName,
|
|
34
|
+
collectionId: doc._id,
|
|
35
|
+
doc,
|
|
36
|
+
version: 0
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!opts.patchHistoryDisabled) {
|
|
43
|
+
await History.bulkWrite(bulk, { ordered: false });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function createPatch(opts, context) {
|
|
48
|
+
await bulkPatch(opts, context, 'eventCreated', 'createdDocs');
|
|
49
|
+
}
|
|
50
|
+
export async function updatePatch(opts, context, current, original) {
|
|
51
|
+
const { currentObject, originalObject } = getObjects(opts, current, original);
|
|
52
|
+
if (_.isEmpty(originalObject) || _.isEmpty(currentObject))
|
|
53
|
+
return;
|
|
54
|
+
const patch = jsonpatch.compare(originalObject, currentObject, true);
|
|
55
|
+
if (_.isEmpty(patch))
|
|
56
|
+
return;
|
|
57
|
+
if (opts.eventUpdated) {
|
|
58
|
+
em.emit(opts.eventUpdated, { oldDoc: original, doc: current, patch });
|
|
59
|
+
}
|
|
60
|
+
if (opts.patchHistoryDisabled)
|
|
61
|
+
return;
|
|
62
|
+
let version = 0;
|
|
63
|
+
const lastHistory = await History.findOne({ collectionId: original._id }).sort('-version').exec();
|
|
64
|
+
if (lastHistory && lastHistory.version >= 0) {
|
|
65
|
+
version = lastHistory.version + 1;
|
|
66
|
+
}
|
|
67
|
+
await History.create({
|
|
68
|
+
op: context.op,
|
|
69
|
+
modelName: context.modelName,
|
|
70
|
+
collectionName: context.collectionName,
|
|
71
|
+
collectionId: original._id,
|
|
72
|
+
patch,
|
|
73
|
+
version
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export async function deletePatch(opts, context) {
|
|
77
|
+
await bulkPatch(opts, context, 'eventDeleted', 'deletedDocs');
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"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"}
|
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,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
|