b69ee61987e2fd255aa05f07c0fe255bdfacd684196aacb76495eab9b016e59cf06028f70f132f1829fcafae2a36c9e408b2d8c500a43bb750e6b28423bd42 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import {arrayEach} from './../helpers/array';
  2. import {defineGetter} from './../helpers/object';
  3. const MIXIN_NAME = 'localHooks';
  4. /**
  5. * Mixin object to extend objects functionality for local hooks.
  6. *
  7. * @type {Object}
  8. */
  9. const localHooks = {
  10. /**
  11. * Internal hooks storage.
  12. */
  13. _localHooks: Object.create(null),
  14. /**
  15. * Add hook to the collection.
  16. *
  17. * @param {String} key Hook name.
  18. * @param {Function} callback Hook callback
  19. */
  20. addLocalHook(key, callback) {
  21. if (!this._localHooks[key]) {
  22. this._localHooks[key] = [];
  23. }
  24. this._localHooks[key].push(callback);
  25. },
  26. /**
  27. * Run hooks.
  28. *
  29. * @param {String} key Hook name.
  30. * @param {*} params
  31. */
  32. runLocalHooks(key, ...params) {
  33. if (this._localHooks[key]) {
  34. arrayEach(this._localHooks[key], (callback) => callback.apply(this, params));
  35. }
  36. },
  37. /**
  38. * Clear all added hooks.
  39. */
  40. clearLocalHooks() {
  41. this._localHooks = {};
  42. },
  43. };
  44. defineGetter(localHooks, 'MIXIN_NAME', MIXIN_NAME, {
  45. writable: false,
  46. enumerable: false,
  47. });
  48. export default localHooks;