You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
'use strict';
|
|
|
|
/*!
|
|
* ignore
|
|
*/
|
|
|
|
module.exports = applyHooks;
|
|
|
|
/*!
|
|
* Register hooks for this model
|
|
*
|
|
* @param {Model} model
|
|
* @param {Schema} schema
|
|
*/
|
|
|
|
function applyHooks(model, schema, options) {
|
|
options = options || {};
|
|
|
|
const kareemOptions = {
|
|
useErrorHandlers: true,
|
|
numCallbackParams: 1,
|
|
nullResultByDefault: true,
|
|
contextParameter: true
|
|
};
|
|
const objToDecorate = options.decorateDoc ? model : model.prototype;
|
|
|
|
model.$appliedHooks = true;
|
|
for (let i = 0; i < schema.childSchemas.length; ++i) {
|
|
const childModel = schema.childSchemas[i].model;
|
|
if (childModel.$appliedHooks) {
|
|
continue;
|
|
}
|
|
applyHooks(childModel, schema.childSchemas[i].schema, options);
|
|
if (childModel.discriminators != null) {
|
|
let keys = Object.keys(childModel.discriminators);
|
|
for (let j = 0; j < keys.length; ++j) {
|
|
applyHooks(childModel.discriminators[keys[j]],
|
|
childModel.discriminators[keys[j]].schema, options);
|
|
}
|
|
}
|
|
}
|
|
|
|
objToDecorate.$__save = schema.s.hooks.
|
|
createWrapper('save', objToDecorate.$__save, null, kareemOptions);
|
|
objToDecorate.$__validate = schema.s.hooks.
|
|
createWrapper('validate', objToDecorate.$__validate, null, kareemOptions);
|
|
objToDecorate.$__remove = schema.s.hooks.
|
|
createWrapper('remove', objToDecorate.$__remove, null, kareemOptions);
|
|
objToDecorate.$__init = schema.s.hooks.
|
|
createWrapperSync('init', objToDecorate.$__init, null, kareemOptions);
|
|
}
|