@xeito/injection
Version:
Dependency Injection for Xeito | Framework for building web applications
66 lines (64 loc) • 1.8 kB
JavaScript
// packages/injection/classes/registry.ts
var Registry = class {
/**
* Register a service instance in the registry
* @param name name of the service
* @param service service instance
*/
static registerService(name, service) {
if (this.serviceMap.has(name)) {
console.warn(`Service ${name} already exists, overwriting`);
}
this.serviceMap.set(name, service);
}
/**
* Get a service instance from the registry
* @param name name of the service
* @returns service instance
* @throws {Error} if the service is not found
*/
static getService(name) {
if (!this.serviceMap.has(name)) {
throw new Error(`Service ${name} not found. Did you forget to register it?`);
}
return this.serviceMap.get(name);
}
/**
* Checks if a service exists in the registry
* @param name name of the service
* @returns true if the service exists, false otherwise
*/
static serviceExists(name) {
return this.serviceMap.has(name);
}
};
/**
* Map with all the registered services
* @type {Map<string, any>}
*/
Registry.serviceMap = /* @__PURE__ */ new Map();
// packages/injection/decorators/injectable.ts
function Injectable(injectableMetadata) {
return function _InjectableDecorator(target) {
Registry.registerService(injectableMetadata.selector, new target());
};
}
// packages/injection/decorators/inject.ts
function Inject(serviceName) {
return function _InjectDecorator(target, propertyKey) {
Object.defineProperty(target, propertyKey, {
get() {
return Registry.getService(serviceName ?? propertyKey);
},
set(value) {
console.warn(`Cannot set value of ${serviceName} service`);
}
});
};
}
export {
Inject,
Injectable,
Registry
};
//# sourceMappingURL=index.js.map