deno.land / x / mongoose@6.7.5 / lib / helpers / model / applyStaticHooks.js

applyStaticHooks.js
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'use strict';
const middlewareFunctions = require('../query/applyQueryMiddleware').middlewareFunctions;const promiseOrCallback = require('../promiseOrCallback');
module.exports = function applyStaticHooks(model, hooks, statics) { const kareemOptions = { useErrorHandlers: true, numCallbackParams: 1 };
hooks = hooks.filter(hook => { // If the custom static overwrites an existing query middleware, don't apply // middleware to it by default. This avoids a potential backwards breaking // change with plugins like `mongoose-delete` that use statics to overwrite // built-in Mongoose functions. if (middlewareFunctions.indexOf(hook.name) !== -1) { return !!hook.model; } return hook.model !== false; });
model.$__insertMany = hooks.createWrapper('insertMany', model.$__insertMany, model, kareemOptions);
for (const key of Object.keys(statics)) { if (hooks.hasHooks(key)) { const original = model[key];
model[key] = function() { const numArgs = arguments.length; const lastArg = numArgs > 0 ? arguments[numArgs - 1] : null; const cb = typeof lastArg === 'function' ? lastArg : null; const args = Array.prototype.slice. call(arguments, 0, cb == null ? numArgs : numArgs - 1); // Special case: can't use `Kareem#wrap()` because it doesn't currently // support wrapped functions that return a promise. return promiseOrCallback(cb, callback => { hooks.execPre(key, model, args, function(err) { if (err != null) { return callback(err); }
let postCalled = 0; const ret = original.apply(model, args.concat(post)); if (ret != null && typeof ret.then === 'function') { ret.then(res => post(null, res), err => post(err)); }
function post(error, res) { if (postCalled++ > 0) { return; }
if (error != null) { return callback(error); }
hooks.execPost(key, model, [res], function(error) { if (error != null) { return callback(error); } callback(null, res); }); } }); }, model.events); }; } }};
mongoose

Version Info

Tagged at
a year ago