@signiant/media-shuttle-sdk-base
Version:
The base parent sdk behind other media shuttle sdks (e.g. media-shuttle-sdk)
114 lines (113 loc) • 4.53 kB
JavaScript
/* eslint-disable import/first */
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { isUndefined, isString, get as getIn } from 'lodash';
var EventNotifier = /** @class */ (function () {
function EventNotifier() {
this.REGEXP_KEY = 'REGEXP';
this.eventHandlerMap = {};
}
EventNotifier.prototype.setEventHandler = function (originatorId, event, handler) {
var eventMap = this.eventHandlerMap[originatorId];
if (isUndefined(eventMap)) {
eventMap = {};
this.eventHandlerMap[originatorId] = eventMap;
}
if (event instanceof RegExp) {
var regExpEventMap = eventMap[this.REGEXP_KEY];
if (isUndefined(regExpEventMap)) {
regExpEventMap = {};
eventMap[this.REGEXP_KEY] = regExpEventMap;
}
regExpEventMap[EventNotifier.getStringRepOfRegx(event)] = handler;
}
else {
eventMap[event] = handler;
}
};
EventNotifier.getStringRepOfRegx = function (regEx) {
return JSON.stringify({ source: regEx.source, flags: regEx.flags });
};
EventNotifier.getRegExOfStringRep = function (jsonString) {
try {
var _a = JSON.parse(jsonString), flags = _a.flags, source = _a.source;
return new RegExp(source, flags);
}
catch (e) {
return null;
}
};
EventNotifier.prototype.setSessionActiveEventHandler = function (handler) {
this.setEventHandler('signiant-app', 'session-active', handler);
};
EventNotifier.prototype.removeEventHandlers = function (originatorId) {
if (this.eventHandlerMap[originatorId]) {
var deleteResult = delete this.eventHandlerMap[originatorId];
return deleteResult;
}
return false;
};
EventNotifier.prototype.removeEventHandler = function (originatorId, event) {
if (event instanceof RegExp) {
var eventString = EventNotifier.getStringRepOfRegx(event);
if (getIn(this.eventHandlerMap, [originatorId, this.REGEXP_KEY, eventString])) {
var deleteResult = delete this.eventHandlerMap[originatorId][this.REGEXP_KEY][eventString];
return deleteResult;
}
}
else if (getIn(this.eventHandlerMap, [originatorId, event])) {
var deleteResult = delete this.eventHandlerMap[originatorId][event];
return deleteResult;
}
return false;
};
EventNotifier.prototype.notifyMessage = function (message) {
if (message.type === 'response' || message.type === 'event') {
var eventsMap = this.eventHandlerMap[message.originator];
if (!isUndefined(eventsMap)) {
var handler = eventsMap[message.context];
var content_1 = message.content;
if (isString(content_1)) {
content_1 = this.tryToConvertStringToJSONObjectSafely(content_1);
}
if (!isUndefined(handler)) {
handler(content_1);
}
var regExpEventHandlers_1 = eventsMap[this.REGEXP_KEY];
if (regExpEventHandlers_1) {
Object.keys(regExpEventHandlers_1).forEach(function (key) {
var regExpHandler = regExpEventHandlers_1[key];
var regExp = EventNotifier.getRegExOfStringRep(key);
if (regExpHandler && regExp && message.context.match(regExp)) {
regExpHandler(__assign(__assign({}, message), { content: content_1 }));
}
});
}
}
}
};
EventNotifier.prototype.removeAllEventHandlers = function () {
this.eventHandlerMap = {};
};
EventNotifier.prototype.tryToConvertStringToJSONObjectSafely = function (input) {
var output;
try {
output = JSON.parse(input);
}
catch (e) {
output = input;
}
return output;
};
return EventNotifier;
}());
export default EventNotifier;