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.

MiddlewareRegistry.js 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* @flow */
  2. import { applyMiddleware } from 'redux';
  3. import type { Middleware } from 'redux';
  4. /**
  5. * A registry for Redux middleware, allowing features to register their
  6. * middleware without needing to create additional inter-feature dependencies.
  7. */
  8. class MiddlewareRegistry {
  9. _elements: Array<Middleware<*, *>>;
  10. /**
  11. * Creates a MiddlewareRegistry instance.
  12. */
  13. constructor() {
  14. /**
  15. * The set of registered middleware.
  16. *
  17. * @private
  18. * @type {Middleware[]}
  19. */
  20. this._elements = [];
  21. }
  22. /**
  23. * Applies all registered middleware into a store enhancer.
  24. * (@link http://redux.js.org/docs/api/applyMiddleware.html).
  25. *
  26. * @param {Middleware[]} additional - Any additional middleware that need to
  27. * be included (such as middleware from third-party modules).
  28. * @returns {Middleware}
  29. */
  30. applyMiddleware(...additional: Array<Middleware<*, *>>) {
  31. // $FlowExpectedError
  32. return applyMiddleware(...this._elements, ...additional);
  33. }
  34. /**
  35. * Adds a middleware to the registry.
  36. *
  37. * The method is to be invoked only before {@link #applyMiddleware()}.
  38. *
  39. * @param {Middleware} middleware - A Redux middleware.
  40. * @returns {void}
  41. */
  42. register(middleware: Middleware<*, *>) {
  43. this._elements.push(middleware);
  44. }
  45. }
  46. /**
  47. * The public singleton instance of the MiddlewareRegistry class.
  48. */
  49. export default new MiddlewareRegistry();