UNPKG

@symanticreative/vendure-admin-client

Version:

A TypeScript GraphQL client for Vendure Admin API to create custom dashboards

82 lines 2.19 kB
/** * 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