@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
73 lines • 10.3 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;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.IoAdapter = void 0;
const helpers_1 = require("../helpers");
const rxjs_1 = require("rxjs");
const socket_io_1 = require("socket.io");
const shared_utils_1 = require("../utils/shared.utils");
const websockets_1 = require("../websockets");
class IoAdapter extends websockets_1.AbstractWsAdapter {
create(port, options) {
if (!options) {
return this.createIOServer(port);
}
const { namespace, server } = options, opt = __rest(options, ["namespace", "server"]);
return server && (0, shared_utils_1.isFunction)(server.of)
? server.of(namespace)
: namespace
? this.createIOServer(port, opt).of(namespace)
: this.createIOServer(port, opt);
}
createIOServer(port, options) {
if (this.httpServer && port === 0) {
return new socket_io_1.Server(this.httpServer, options);
}
return new socket_io_1.Server(port, options);
}
bindMessageHandlers(socket, handlers, transform) {
const disconnect$ = (0, rxjs_1.fromEvent)(socket, helpers_1.DISCONNECT_EVENT).pipe((0, rxjs_1.share)(), (0, rxjs_1.first)());
handlers.forEach(({ message, callback }) => {
const source$ = (0, rxjs_1.fromEvent)(socket, message).pipe((0, rxjs_1.mergeMap)((payload) => {
const { data, ack } = this.mapPayload(payload);
return transform(callback(data, ack)).pipe((0, rxjs_1.filter)((response) => !(0, shared_utils_1.isNil)(response)), (0, rxjs_1.map)((response) => [response, ack]));
}), (0, rxjs_1.takeUntil)(disconnect$));
source$.subscribe(([response, ack]) => {
if (response.event) {
return socket.emit(response.event, response.data);
}
(0, shared_utils_1.isFunction)(ack) && ack(response);
});
});
}
mapPayload(payload) {
if (!Array.isArray(payload)) {
if ((0, shared_utils_1.isFunction)(payload)) {
return { data: undefined, ack: payload };
}
return { data: payload };
}
const lastElement = payload[payload.length - 1];
const isAck = (0, shared_utils_1.isFunction)(lastElement);
if (isAck) {
const size = payload.length - 1;
return {
data: size === 1 ? payload[0] : payload.slice(0, size),
ack: lastElement,
};
}
return { data: payload };
}
}
exports.IoAdapter = IoAdapter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIvaW8tYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUE4QztBQUM5QywrQkFBNkY7QUFDN0YseUNBQTBEO0FBQzFELHdEQUEwRDtBQUMxRCw4Q0FBNEU7QUFFNUUsTUFBYSxTQUFVLFNBQVEsOEJBQWlCO0lBQ3JDLE1BQU0sQ0FDWCxJQUFZLEVBQ1osT0FBOEQ7UUFFOUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sS0FBYSxPQUFPLEVBQWYsR0FBRyxVQUFLLE9BQU8sRUFBdkMsdUJBQTZCLENBQVUsQ0FBQztRQUM5QyxPQUFPLE1BQU0sSUFBSSxJQUFBLHlCQUFVLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdEIsQ0FBQyxDQUFDLFNBQVM7Z0JBQ1QsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVksRUFBRSxPQUFhO1FBQy9DLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLGtCQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLGtCQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxtQkFBbUIsQ0FDeEIsTUFBYyxFQUNkLFFBQW9DLEVBQ3BDLFNBQXlDO1FBRXpDLE1BQU0sV0FBVyxHQUFHLElBQUEsZ0JBQVMsRUFBQyxNQUFNLEVBQUUsMEJBQWdCLENBQUMsQ0FBQyxJQUFJLENBQzFELElBQUEsWUFBSyxHQUFFLEVBQ1AsSUFBQSxZQUFLLEdBQUUsQ0FDUixDQUFDO1FBRUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBQSxnQkFBUyxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzdDLElBQUEsZUFBUSxFQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEMsSUFBQSxhQUFNLEVBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBQSxvQkFBSyxFQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzNDLElBQUEsVUFBRyxFQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUN4QyxDQUFDO1lBQ0osQ0FBQyxDQUFDLEVBQ0YsSUFBQSxnQkFBUyxFQUFDLFdBQVcsQ0FBQyxDQUN2QixDQUFDO1lBQ0YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNuQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQ0QsSUFBQSx5QkFBVSxFQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFnQjtRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBQSx5QkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFtQixFQUFFLENBQUM7WUFDdkQsQ0FBQztZQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUEseUJBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEMsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQ3RELEdBQUcsRUFBRSxXQUFXO2FBQ2pCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUF2RUgsOEJBdUVHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRElTQ09OTkVDVF9FVkVOVCB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBmcm9tRXZlbnQsIG1hcCwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIHNoYXJlLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgU2VydmVyLCBTZXJ2ZXJPcHRpb25zLCBTb2NrZXQgfSBmcm9tIFwic29ja2V0LmlvXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCB9IGZyb20gXCIuLi91dGlscy9zaGFyZWQudXRpbHNcIjtcbmltcG9ydCB7IEFic3RyYWN0V3NBZGFwdGVyLCBNZXNzYWdlTWFwcGluZ1Byb3BlcnRpZXMgfSBmcm9tIFwiLi4vd2Vic29ja2V0c1wiO1xuXG5leHBvcnQgY2xhc3MgSW9BZGFwdGVyIGV4dGVuZHMgQWJzdHJhY3RXc0FkYXB0ZXIge1xuICAgIHB1YmxpYyBjcmVhdGUoXG4gICAgICBwb3J0OiBudW1iZXIsXG4gICAgICBvcHRpb25zPzogU2VydmVyT3B0aW9ucyAmIHsgbmFtZXNwYWNlPzogc3RyaW5nOyBzZXJ2ZXI/OiBhbnkgfSxcbiAgICApOiBTZXJ2ZXIge1xuICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUlPU2VydmVyKHBvcnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBuYW1lc3BhY2UsIHNlcnZlciwgLi4ub3B0IH0gPSBvcHRpb25zO1xuICAgICAgcmV0dXJuIHNlcnZlciAmJiBpc0Z1bmN0aW9uKHNlcnZlci5vZilcbiAgICAgICAgPyBzZXJ2ZXIub2YobmFtZXNwYWNlKVxuICAgICAgICA6IG5hbWVzcGFjZVxuICAgICAgICAgID8gdGhpcy5jcmVhdGVJT1NlcnZlcihwb3J0LCBvcHQpLm9mKG5hbWVzcGFjZSlcbiAgICAgICAgICA6IHRoaXMuY3JlYXRlSU9TZXJ2ZXIocG9ydCwgb3B0KTtcbiAgICB9XG4gIFxuICAgIHB1YmxpYyBjcmVhdGVJT1NlcnZlcihwb3J0OiBudW1iZXIsIG9wdGlvbnM/OiBhbnkpOiBhbnkge1xuICAgICAgaWYgKHRoaXMuaHR0cFNlcnZlciAmJiBwb3J0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VydmVyKHRoaXMuaHR0cFNlcnZlciwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFNlcnZlcihwb3J0LCBvcHRpb25zKTtcbiAgICB9XG4gIFxuICAgIHB1YmxpYyBiaW5kTWVzc2FnZUhhbmRsZXJzKFxuICAgICAgc29ja2V0OiBTb2NrZXQsXG4gICAgICBoYW5kbGVyczogTWVzc2FnZU1hcHBpbmdQcm9wZXJ0aWVzW10sXG4gICAgICB0cmFuc2Zvcm06IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8YW55PixcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpc2Nvbm5lY3QkID0gZnJvbUV2ZW50KHNvY2tldCwgRElTQ09OTkVDVF9FVkVOVCkucGlwZShcbiAgICAgICAgc2hhcmUoKSxcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICk7XG4gIFxuICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoeyBtZXNzYWdlLCBjYWxsYmFjayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSQgPSBmcm9tRXZlbnQoc29ja2V0LCBtZXNzYWdlKS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKChwYXlsb2FkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgYWNrIH0gPSB0aGlzLm1hcFBheWxvYWQocGF5bG9hZCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtKGNhbGxiYWNrKGRhdGEsIGFjaykpLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigocmVzcG9uc2U6IGFueSkgPT4gIWlzTmlsKHJlc3BvbnNlKSksXG4gICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gW3Jlc3BvbnNlLCBhY2tdKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKGRpc2Nvbm5lY3QkKSxcbiAgICAgICAgKTtcbiAgICAgICAgc291cmNlJC5zdWJzY3JpYmUoKFtyZXNwb25zZSwgYWNrXSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5ldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5lbWl0KHJlc3BvbnNlLmV2ZW50LCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXNGdW5jdGlvbihhY2spICYmIGFjayhyZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICBcbiAgICBwdWJsaWMgbWFwUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogeyBkYXRhOiBhbnk7IGFjaz86IEZ1bmN0aW9uIH0ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBheWxvYWQpKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHBheWxvYWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZGF0YTogdW5kZWZpbmVkLCBhY2s6IHBheWxvYWQgYXMgRnVuY3Rpb24gfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhOiBwYXlsb2FkIH07XG4gICAgICB9XG4gICAgICBjb25zdCBsYXN0RWxlbWVudCA9IHBheWxvYWRbcGF5bG9hZC5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IGlzQWNrID0gaXNGdW5jdGlvbihsYXN0RWxlbWVudCk7XG4gICAgICBpZiAoaXNBY2spIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHBheWxvYWQubGVuZ3RoIC0gMTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBzaXplID09PSAxID8gcGF5bG9hZFswXSA6IHBheWxvYWQuc2xpY2UoMCwgc2l6ZSksXG4gICAgICAgICAgYWNrOiBsYXN0RWxlbWVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRhdGE6IHBheWxvYWQgfTtcbiAgICB9XG4gIH1cbiAgIl19