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.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /* @flow */
  2. import { applyMiddleware } from 'redux';
  3. type Middleware = Function;
  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: Middleware[];
  10. /**
  11. * Creates a MiddlewareRegistry instance.
  12. */
  13. constructor() {
  14. /**
  15. * The set of registered middleware.
  16. *
  17. * @private
  18. * @type {Route[]}
  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: Middleware[]) {
  31. return applyMiddleware(
  32. ...this._elements,
  33. ...additional
  34. );
  35. }
  36. /**
  37. * Adds a middleware to the registry.
  38. *
  39. * The method is to be invoked only before {@link #applyMiddleware()}.
  40. *
  41. * @param {Middleware} middleware - A Redux middleware.
  42. * @returns {void}
  43. */
  44. register(middleware: Middleware) {
  45. this._elements.push(middleware);
  46. }
  47. }
  48. /**
  49. * The public singleton instance of the MiddlewareRegistry class.
  50. */
  51. export default new MiddlewareRegistry();