@joist/di
Version:
Dependency Injection for Vanilla JS classes
32 lines • 1.22 kB
JavaScript
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