| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import {Service} from '@e22m4u/js-service';
- import {Repository} from './repository.js';
- import {modelNameToModelKey} from '../utils/index.js';
- import {InvalidArgumentError} from '../errors/index.js';
- /**
- * Repository registry.
- */
- export class RepositoryRegistry extends Service {
- /**
- * Repositories.
- *
- * @type {object}
- */
- _repositories = {};
- /**
- * Repository ctor.
- *
- * @type {typeof Repository}
- * @private
- */
- _repositoryCtor = Repository;
- /**
- * Set repository ctor.
- *
- * @param {typeof Repository} ctor
- */
- setRepositoryCtor(ctor) {
- if (
- !ctor ||
- typeof ctor !== 'function' ||
- !(ctor.prototype instanceof Repository)
- ) {
- throw new InvalidArgumentError(
- 'The first argument of RepositoryRegistry.setRepositoryCtor ' +
- 'must inherit from Repository class, but %v was given.',
- ctor,
- );
- }
- this._repositoryCtor = ctor;
- }
- /**
- * Get repository.
- *
- * @param {string} modelName
- * @returns {Repository}
- */
- getRepository(modelName) {
- const modelKey = modelNameToModelKey(modelName);
- let repository = this._repositories[modelKey];
- if (repository) return repository;
- repository = new this._repositoryCtor(this.container, modelName);
- this._repositories[modelKey] = repository;
- return repository;
- }
- }
|