2019-11-15 13:26:34 +01:00
|
|
|
import log from './../log.js';
|
|
|
|
|
|
2019-11-13 21:02:14 +01:00
|
|
|
export default class ServicesManager {
|
|
|
|
|
constructor() {
|
|
|
|
|
this.services = {};
|
2019-11-15 13:26:34 +01:00
|
|
|
this.registeredServiceNames = [];
|
2019-11-13 21:02:14 +01:00
|
|
|
}
|
|
|
|
|
|
2019-11-15 13:26:34 +01:00
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param {Object} service
|
|
|
|
|
*/
|
|
|
|
|
registerService(service) {
|
|
|
|
|
if (!service) {
|
|
|
|
|
log.warn(
|
|
|
|
|
'Attempting to register a null/undefined service. Exiting early.'
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let serviceName = service.name;
|
|
|
|
|
|
|
|
|
|
if (!serviceName) {
|
|
|
|
|
log.warn(`Service name not set. Exiting early.`);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (this.registeredServiceNames.includes(serviceName)) {
|
|
|
|
|
log.warn(
|
|
|
|
|
`Extension name ${serviceName} has already been registered. Exiting before duplicating services.`
|
|
|
|
|
);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-13 21:02:14 +01:00
|
|
|
this.services[service.name] = service;
|
2019-11-15 13:26:34 +01:00
|
|
|
|
|
|
|
|
// Track service registration
|
|
|
|
|
this.registeredServiceNames.push(serviceName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* An array of services.
|
|
|
|
|
*
|
|
|
|
|
* @param {Object[]} services - Array of services
|
|
|
|
|
*/
|
|
|
|
|
registerServices(services) {
|
|
|
|
|
services.forEach(service => this.registerService(service));
|
2019-11-13 21:02:14 +01:00
|
|
|
}
|
|
|
|
|
}
|