UNPKG

@devexperts/utils

Version:
88 lines 2.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var string_1 = require("../string/string"); var disposable_1 = require("../function/disposable"); var Emitter_1 = require("../emitter/Emitter"); var id = string_1.uuid(); var EVENT_KEY = '__SESSION_EVENT__'; /** * @enum */ exports.E_SESSION = { REQUEST: 'E_SESSION:REQUEST', }; /** * @typedef {{}} TRequestData * @property {String} receiver_sid * @property {*} messageType * @property {*} payload */ /** * @emits {@link E_SESSION} */ var RawSession = /** @class */ (function (_super) { tslib_1.__extends(RawSession, _super); function RawSession() { var _this = _super.call(this) || this; /** * @param {Event} event * @private */ _this._onStorage = function (event) { if (event.key === EVENT_KEY) { /** * @type {TRequestData} */ var value = void 0; try { if (event.newValue) { value = JSON.parse(event.newValue); } } catch (e) { } if (value && value.receiver_sid === id) { _this._emit(exports.E_SESSION.REQUEST, value.messageType, value.payload); _this._emit(value.messageType, value.payload); } } }; if (typeof window !== 'undefined') { window.addEventListener('storage', _this._onStorage); _this['_using']([function () { return window.removeEventListener('storage', _this._onStorage); }]); } return _this; } Object.defineProperty(RawSession.prototype, "id", { /** * Current session id * @returns {String} */ get: function () { return id; }, enumerable: true, configurable: true }); /** * Sends message to another session by id * @param {String} sid * @param {*} messageType * @param {*} payload */ RawSession.prototype.send = function (sid, messageType, payload) { var data = JSON.stringify({ receiver_sid: sid, messageType: messageType, payload: payload, }); if (typeof window !== 'undefined') { window.localStorage.setItem(EVENT_KEY, data); } }; return RawSession; }(Emitter_1.default)); exports.RawSession = RawSession; var Session = disposable_1.disposable(RawSession); exports.default = new Session(); //# sourceMappingURL=Session.js.map