UNPKG

@xeito/injection

Version:

Dependency Injection for Xeito | Framework for building web applications

66 lines (64 loc) 1.8 kB
// 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