/node_modules/mongoose/lib/services/model/applyHooks.js

https://bitbucket.org/coleman333/smartsite · JavaScript · 51 lines · 35 code · 7 blank · 9 comment · 6 complexity · 6355e816606fbe3c890840ea16b94970 MD5 · raw file

  1. 'use strict';
  2. /*!
  3. * ignore
  4. */
  5. module.exports = applyHooks;
  6. /*!
  7. * Register hooks for this model
  8. *
  9. * @param {Model} model
  10. * @param {Schema} schema
  11. */
  12. function applyHooks(model, schema, options) {
  13. options = options || {};
  14. const kareemOptions = {
  15. useErrorHandlers: true,
  16. numCallbackParams: 1,
  17. nullResultByDefault: true,
  18. contextParameter: true
  19. };
  20. const objToDecorate = options.decorateDoc ? model : model.prototype;
  21. model.$appliedHooks = true;
  22. for (let i = 0; i < schema.childSchemas.length; ++i) {
  23. const childModel = schema.childSchemas[i].model;
  24. if (childModel.$appliedHooks) {
  25. continue;
  26. }
  27. applyHooks(childModel, schema.childSchemas[i].schema, options);
  28. if (childModel.discriminators != null) {
  29. let keys = Object.keys(childModel.discriminators);
  30. for (let j = 0; j < keys.length; ++j) {
  31. applyHooks(childModel.discriminators[keys[j]],
  32. childModel.discriminators[keys[j]].schema, options);
  33. }
  34. }
  35. }
  36. objToDecorate.$__save = schema.s.hooks.
  37. createWrapper('save', objToDecorate.$__save, null, kareemOptions);
  38. objToDecorate.$__validate = schema.s.hooks.
  39. createWrapper('validate', objToDecorate.$__validate, null, kareemOptions);
  40. objToDecorate.$__remove = schema.s.hooks.
  41. createWrapper('remove', objToDecorate.$__remove, null, kareemOptions);
  42. objToDecorate.$__init = schema.s.hooks.
  43. createWrapperSync('init', objToDecorate.$__init, null, kareemOptions);
  44. }