webserv
Version:
a quick, flexible, fully typed development server
75 lines • 2.97 kB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "../upgrades/realtime.upgrade"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const realtime_upgrade_1 = require("../upgrades/realtime.upgrade");
function isAction(value) {
return value && typeof value === 'object' && typeof value.type === 'string';
}
/**
* Helper function to send an error response to an action request
*/
function sendError(con, source, payload) {
sendResponse(con, {
type: `${source.type}-error`,
payload: Object.assign(Object.assign({}, payload), { source })
});
}
exports.sendError = sendError;
/**
* Helper function to send a serialized action to a connection
*/
function sendResponse(con, action) {
const data = JSON.stringify(action);
if (Array.isArray(con)) {
for (let connection of con) {
connection.client.send(data);
}
}
else {
con.client.send(data);
}
}
exports.sendResponse = sendResponse;
/**
* This is a realtime message-passing service using Websockets built on top of realtime.upgrade.
*/
function actionService(_a) {
var { handlers, defaultHandler } = _a, rest = __rest(_a, ["handlers", "defaultHandler"]);
const handlerMap = new Map(handlers.map((handler) => [handler.type, handler.handler]));
const upgrade = realtime_upgrade_1.realtimeUpgrade(Object.assign({ onMessage(data, con, methods) {
const action = typeof data === 'string' ? JSON.parse(data) : data;
if (isAction(action)) {
const handler = handlerMap.get(action.type) || defaultHandler;
if (handler) {
handler(action, con, methods);
}
}
} }, rest));
return {
upgrade: {
upgrade
}
};
}
exports.actionService = actionService;
});
//# sourceMappingURL=action.service.js.map