repository-registry.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import {Repository} from './repository.js';
  2. import {Service} from '../service/index.js';
  3. import {InvalidArgumentError} from '../errors/index.js';
  4. /**
  5. * Repository registry.
  6. */
  7. export class RepositoryRegistry extends Service {
  8. /**
  9. * Repositories.
  10. */
  11. _repositories = {};
  12. /**
  13. * Repository ctor.
  14. *
  15. * @type {typeof Repository}
  16. * @private
  17. */
  18. _repositoryCtor = Repository;
  19. /**
  20. * Set repository ctor.
  21. *
  22. * @param ctor
  23. */
  24. setRepositoryCtor(ctor) {
  25. if (
  26. !ctor ||
  27. typeof ctor !== 'function' ||
  28. !(ctor.prototype instanceof Repository)
  29. ) {
  30. throw new InvalidArgumentError(
  31. 'The first argument of RepositoryRegistry.setRepositoryCtor ' +
  32. 'must inherit from Repository class, but %s given.',
  33. ctor,
  34. );
  35. }
  36. this._repositoryCtor = ctor;
  37. }
  38. /**
  39. * Get repository.
  40. *
  41. * @param modelName
  42. */
  43. getRepository(modelName) {
  44. let repository = this._repositories[modelName];
  45. if (repository) return repository;
  46. repository = new this._repositoryCtor(this._services, modelName);
  47. this._repositories[modelName] = repository;
  48. return repository;
  49. }
  50. }