mirror of
https://github.com/sern-handler/handler
synced 2026-06-28 02:32:15 +00:00
* some wip code Co-authored-by: Jacob Nguyen <jacoobes@users.noreply.github.com> * general idea * style * making shrimple truly optional * got optional localizer working * proposing api notation? * prepare for localization map * add localsFor * merge some internals * boss call * add test for init functionality * add documentation * inline and cleanup * feat: logging for experimental json loading * loosen typings * dev workflow and cleaning up comments * cleaning up a bit more * rename Localizer -> Localization * more documentation, change dir for default localizer * some tests * " * move stuff, refactor, deprecate * yarnb * Update index.ts --------- Co-authored-by: Jacob Nguyen <jacoobes@users.noreply.github.com> Co-authored-by: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Co-authored-by: jacob <jacoobes@sern.dev>
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import type { CoreContainer } from "./container"
|
|
|
|
interface HookEvent {
|
|
key : PropertyKey
|
|
newContainer: any
|
|
}
|
|
type HookName = 'init';
|
|
|
|
export const createInitListener = (coreContainer : CoreContainer<any>) => {
|
|
const initCalled = new Set<PropertyKey>();
|
|
const hasCallableMethod = createPredicate(initCalled);
|
|
const unsubscribe = coreContainer.on('containerUpserted', async event => {
|
|
|
|
if(isNotHookable(event)) {
|
|
return;
|
|
}
|
|
|
|
if(hasCallableMethod('init', event)) {
|
|
await event.newContainer?.init();
|
|
initCalled.add(event.key);
|
|
}
|
|
|
|
});
|
|
|
|
return { unsubscribe };
|
|
}
|
|
|
|
const isNotHookable = (hk: HookEvent) => {
|
|
return typeof hk.newContainer !== 'object'
|
|
|| Array.isArray(hk.newContainer)
|
|
|| hk.newContainer === null;
|
|
}
|
|
|
|
const createPredicate = <T extends HookEvent>(called: Set<PropertyKey>) => {
|
|
return (hookName: HookName, event: T) => {
|
|
const hasMethod = Reflect.has(event.newContainer!, hookName);
|
|
const beenCalledOnce = !called.has(event.key)
|
|
|
|
return hasMethod && beenCalledOnce
|
|
}
|
|
}
|