okta-mcp-server
Version:
Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching
86 lines • 2.48 kB
JavaScript
/**
* Simple dependency injection container for service management
*/
export class Container {
services = new Map();
factories = new Map();
singletons = new Map();
/**
* Register a service factory
*/
register(token, factory, options = { singleton: true }) {
this.factories.set(token, factory);
this.singletons.set(token, options.singleton ?? true);
}
/**
* Register a value directly
*/
registerValue(token, value) {
this.services.set(token, value);
}
/**
* Resolve a service
*/
resolve(token) {
// Check if we have a direct value
if (this.services.has(token)) {
return this.services.get(token);
}
// Check if we have a factory
const factory = this.factories.get(token);
if (!factory) {
throw new Error(`No factory registered for token: ${String(token)}`);
}
// If it's a singleton and already created, return it
const isSingleton = this.singletons.get(token) ?? true;
if (isSingleton && this.services.has(token)) {
return this.services.get(token);
}
// Create the service
const service = factory();
// Store if singleton
if (isSingleton) {
this.services.set(token, service);
}
return service;
}
/**
* Check if a service is registered
*/
has(token) {
return this.services.has(token) || this.factories.has(token);
}
/**
* Clear all services (useful for testing)
*/
clear() {
this.services.clear();
this.factories.clear();
this.singletons.clear();
}
/**
* Create a child container
*/
createChild() {
const child = new Container();
// Copy factories and singleton settings
for (const [token, factory] of this.factories) {
child.factories.set(token, factory);
child.singletons.set(token, this.singletons.get(token) ?? true);
}
// Copy existing singleton instances
for (const [token, service] of this.services) {
if (this.singletons.get(token)) {
child.services.set(token, service);
}
}
return child;
}
/**
* Alias for resolve (used by audit handlers)
*/
get(token) {
return this.resolve(token);
}
}
//# sourceMappingURL=container.js.map