UNPKG

@tsclean/core

Version:

Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.

73 lines 10.3 kB
"use strict"; 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