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.ts 1.4KB

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