@rnaga/wp-node
Version:
👉 **[View Full Documentation at rnaga.github.io/wp-node →](https://rnaga.github.io/wp-node/)**
45 lines (44 loc) • 1.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Action = void 0;
const events_1 = require("events");
const eventPrefix = "__action_hook_";
class Action extends events_1.EventEmitter {
constructor() {
super();
}
getEventName(name) {
return `${eventPrefix}${String(name)}`;
}
addCommand(command, listener) {
return this.add(command.id, listener);
}
add(name, listener, options) {
const { once = false } = options ?? {};
if (once) {
this.once(this.getEventName(name), listener);
}
else {
this.on(this.getEventName(name), listener);
}
return () => {
this.remove(name, listener);
};
}
addCommandOnce(command, listener) {
return this.addOnce(command.id, listener);
}
addOnce(name, listener) {
this.once(this.getEventName(name), listener);
}
doCommand(command, ...args) {
return this.do(command.id, ...args);
}
do(name, ...args) {
this.emit(this.getEventName(name), ...args);
}
remove(name, listener) {
this.removeListener(this.getEventName(name), listener);
}
}
exports.Action = Action;