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