streamdeck-typescript
Version:
This library will help you build elgato stream deck plugins in typescript
46 lines • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventManager = void 0;
const illegal_argument_error_1 = require("../errors/illegal-argument.error");
class EventManager {
constructor() {
this.registeredEvents = new Map();
}
static get INSTANCE() {
if (!this._INSTANCE)
this._INSTANCE = new EventManager();
return this._INSTANCE;
}
static DefaultDecoratorEventListener(event, target, propertyKey, descriptor) {
const eventListener = (actionName, instance) => {
if (typeof actionName !== 'string') {
throw new illegal_argument_error_1.IllegalArgumentError(`actionName needs to be of type string but ${typeof actionName} given.`);
}
EventManager.INSTANCE.registerEvent(event, (eventActionName, ...params) => {
if (!eventActionName ||
actionName === '*' ||
eventActionName === '*' ||
actionName === eventActionName)
descriptor.value.apply(instance, params);
});
};
if (!target._sd_events) {
target._sd_events = [];
}
target._sd_events.push(eventListener);
return descriptor;
}
registerEvent(eventName, callback) {
var _a;
if (!this.registeredEvents.has(eventName))
this.registeredEvents.set(eventName, []);
(_a = this.registeredEvents.get(eventName)) === null || _a === void 0 ? void 0 : _a.push(callback);
}
callEvents(eventName, actionName = '*', ...params) {
var _a;
(_a = this.registeredEvents
.get(eventName)) === null || _a === void 0 ? void 0 : _a.forEach((val) => val(actionName, ...params));
}
}
exports.EventManager = EventManager;
//# sourceMappingURL=event.manager.js.map