UNPKG

@joist/di

Version:

Dependency Injection for Vanilla JS classes

32 lines 1.22 kB
import { injectableEl } from "./dom/injectable-el.js"; import { INJECTOR, Injector } from "./injector.js"; export function injectable(opts) { return function injectableDecorator(Base, ctx) { const def = { [Base.name]: class extends Base { [INJECTOR]; constructor(...args) { super(...args); this[INJECTOR] = new Injector(opts); this[INJECTOR].providers.set(Injector, { factory: () => this[INJECTOR], }); if (opts?.provideSelfAs) { for (const token of opts.provideSelfAs) { this[INJECTOR].providers.set(token, { factory: () => this, }); } } } }, }; if ("HTMLElement" in globalThis) { if (Object.prototype.isPrototypeOf.call(HTMLElement.prototype, Base.prototype)) { return injectableEl(def[Base.name], ctx); } } return def[Base.name]; }; } //# sourceMappingURL=injectable.js.map