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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. // XXX The explicit definition of the local variable middlewares is to
  32. // satisfy flow.
  33. const middlewares = [
  34. ...this._elements,
  35. ...additional
  36. ];
  37. return applyMiddleware(...middlewares);
  38. }
  39. /**
  40. * Adds a middleware to the registry.
  41. *
  42. * The method is to be invoked only before {@link #applyMiddleware()}.
  43. *
  44. * @param {Middleware} middleware - A Redux middleware.
  45. * @returns {void}
  46. */
  47. register(middleware: Middleware<*, *>) {
  48. this._elements.push(middleware);
  49. }
  50. }
  51. /**
  52. * The public singleton instance of the MiddlewareRegistry class.
  53. */
  54. export default new MiddlewareRegistry();