@joist/di
Version:
Dependency Injection for Vanilla JS classes
39 lines • 1.5 kB
JavaScript
import { INJECTOR_CTX } from "../context/injector.js";
import { ContextRequestEvent } from "../context/protocol.js";
import { INJECTOR } from "../injector.js";
import { callLifecycle } from "../lifecycle.js";
export function injectableEl(Base, ctx) {
const metadata = ctx.metadata;
const def = {
[Base.name]: class extends Base {
constructor(..._) {
super();
const injector = this[INJECTOR];
this.addEventListener("context-request", (e) => {
if (e.target !== this && e.context === INJECTOR_CTX) {
e.stopPropagation();
e.callback(injector);
}
});
callLifecycle(this, injector, metadata?.onCreated);
}
connectedCallback() {
this.dispatchEvent(new ContextRequestEvent(INJECTOR_CTX, (ctx) => {
this[INJECTOR].parent = ctx;
}));
callLifecycle(this, this[INJECTOR], metadata?.onInjected);
if (super.connectedCallback) {
super.connectedCallback();
}
}
disconnectedCallback() {
if (super.disconnectedCallback) {
super.disconnectedCallback();
}
this[INJECTOR].parent = undefined;
}
},
};
return def[Base.name];
}
//# sourceMappingURL=injectable-el.js.map