@symanticreative/vendure-admin-client
Version:
A TypeScript GraphQL client for Vendure Admin API to create custom dashboards
82 lines • 2.19 kB
JavaScript
/**
* Simple dependency injection container
* Manages service instances and dependencies
*/
export class Container {
constructor() {
this.services = new Map();
this.factories = new Map();
}
/**
* Get the singleton instance of the container
*/
static getInstance() {
if (!Container.instance) {
Container.instance = new Container();
}
return Container.instance;
}
/**
* Register a service instance
* @param token - Service identifier/token
* @param instance - Service instance
*/
register(token, instance) {
this.services.set(token, instance);
}
/**
* Register a factory function to create a service
* @param token - Service identifier/token
* @param factory - Factory function to create the service
*/
registerFactory(token, factory) {
this.factories.set(token, factory);
}
/**
* Get a service instance
* If not found, attempts to create it using registered factory
* @param token - Service identifier/token
*/
get(token) {
if (this.services.has(token)) {
return this.services.get(token);
}
if (this.factories.has(token)) {
const factory = this.factories.get(token);
const instance = factory();
this.services.set(token, instance);
return instance;
}
throw new Error(`Service not found: ${token}`);
}
/**
* Check if a service is registered
* @param token - Service identifier/token
*/
has(token) {
return this.services.has(token) || this.factories.has(token);
}
/**
* Remove a service instance
* @param token - Service identifier/token
*/
remove(token) {
this.services.delete(token);
this.factories.delete(token);
}
/**
* Clear all registered services
*/
clear() {
this.services.clear();
this.factories.clear();
}
}
/**
* Create a typed service token
* @param name - Token name
*/
export function createServiceToken(name) {
return name;
}
//# sourceMappingURL=container.js.map