adapter-registry.js 883 B

123456789101112131415161718192021222324252627282930313233343536
  1. import {Adapter} from './adapter.js';
  2. import {Service} from '@e22m4u/js-service';
  3. import {AdapterLoader} from './adapter-loader.js';
  4. import {DefinitionRegistry} from '../definition/index.js';
  5. /**
  6. * Adapter registry.
  7. */
  8. export class AdapterRegistry extends Service {
  9. /**
  10. * Adapters.
  11. *
  12. * @type {object}
  13. */
  14. _adapters = {};
  15. /**
  16. * Get adapter.
  17. *
  18. * @param {string} datasourceName
  19. * @returns {Promise<Adapter>}
  20. */
  21. async getAdapter(datasourceName) {
  22. let adapter = this._adapters[datasourceName];
  23. if (adapter) return adapter;
  24. const datasource =
  25. this.getService(DefinitionRegistry).getDatasource(datasourceName);
  26. const adapterName = datasource.adapter;
  27. adapter = await this.getService(AdapterLoader).loadByName(
  28. adapterName,
  29. datasource,
  30. );
  31. this._adapters[datasourceName] = adapter;
  32. return adapter;
  33. }
  34. }