surrogate
Version:
Object method hooks made easy
98 lines (89 loc) • 4.05 kB
JavaScript
import {SurrogateHandlerContainer as $bccRj$SurrogateHandlerContainer} from "./surrogate.b769cedc.js";
import {OptionsHandler as $cd88bf3e08824493$export$8bcac92dafadbaee} from "./surrogate.cafd13cf.js";
import {HookType as $96586206eab52612$export$b3a402ce9f993bc7} from "./surrogate.5d082a84.js";
import {wrapDefaults as $bccRj$wrapDefaults} from "@status/defaults";
import {asArray as $bccRj$asArray} from "@jfrazx/asarray";
class $6ff15ac1913fdb95$export$cc74486daaaef499 {
constructor(globalOptions = {}){
this.globalOptions = globalOptions;
this.events = (0, $bccRj$wrapDefaults)({
defaultValue: {
[(0, $96586206eab52612$export$b3a402ce9f993bc7).POST]: [],
[(0, $96586206eab52612$export$b3a402ce9f993bc7).PRE]: []
},
setUndefined: true,
shallowCopy: false
});
}
getEventMap() {
return this.events;
}
getEventHandlers(event) {
return this.events[event];
}
getPreEventHandlers(event) {
return this.getEventHandlersFor(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).PRE);
}
getPostEventHandlers(event) {
return this.getEventHandlersFor(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).POST);
}
eventIsHandled(event) {
const { pre: pre, post: post } = this.getEventHandlers(event);
return Boolean(pre?.length + post?.length);
}
registerHook(event, type, handler, options) {
return this.setEventHandlers(event, type, (0, $bccRj$asArray)(handler), options);
}
registerPreHook(event, handler, options) {
return this.setEventHandlers(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).PRE, (0, $bccRj$asArray)(handler), options);
}
registerPostHook(event, handler, options) {
return this.setEventHandlers(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).POST, (0, $bccRj$asArray)(handler), options);
}
setEventHandlers(event, type, handlers, options = {}) {
const currentContainers = this.getEventHandlersFor(event, type);
const optionsHandler = new (0, $cd88bf3e08824493$export$8bcac92dafadbaee)({
handler: options,
global: this.globalOptions
});
const containers = handlers.map((handler)=>new (0, $bccRj$SurrogateHandlerContainer)(handler, type, optionsHandler));
const combinedContainers = [
...currentContainers,
...containers
];
this.setEventHandlersFor(event, type, combinedContainers);
return this;
}
getEventHandlersFor(event, which) {
return this.getEventHandlers(event)[which];
}
setEventHandlersFor(event, type, containers = []) {
this.getEventHandlers(event)[type] = containers;
return this;
}
deregisterHooks() {
Object.keys(this.events).forEach((event)=>this.deregisterHooksFor(event));
return this;
}
deregisterHooksFor(event) {
return this.deregisterPreHooks(event).deregisterPostHooks(event);
}
deregisterPreHook(event, handler) {
return this.deregisterHookType(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).PRE, handler);
}
deregisterPostHook(event, handler) {
return this.deregisterHookType(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).POST, handler);
}
deregisterHookType(event, which, handlerToRemove) {
const containers = this.getEventHandlersFor(event, which);
return this.setEventHandlersFor(event, which, containers.filter(({ handler: handler })=>handler !== handlerToRemove));
}
deregisterPostHooks(event) {
return this.setEventHandlersFor(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).POST);
}
deregisterPreHooks(event) {
return this.setEventHandlersFor(event, (0, $96586206eab52612$export$b3a402ce9f993bc7).PRE);
}
}
export {$6ff15ac1913fdb95$export$cc74486daaaef499 as EventManager};
//# sourceMappingURL=surrogate.1b0659b6.js.map