UNPKG

@n1k1t/mock-server

Version:

Powerful util to setup mocks over HTTP APIs

54 lines 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WsExecutor = void 0; const models_1 = require("../../models"); const utils_1 = require("../../../utils"); const logger_1 = require("../../../logger"); const logger = logger_1.Logger.build('Server.Transports.Ws.Executor'); class WsExecutor extends models_1.Executor { async exec(context, options) { context.socket.once('close', () => context.complete()); if (context.event === 'connection') { context.socket.on('message', (data) => { const serialized = data.toString(); context.streams.incoming.next((0, utils_1.parseJsonSafe)(serialized).result ?? serialized); }); } await super.exec(context, options).catch((error) => { if (error instanceof models_1.ExecutorManualError && error.is('ECONNABORTED')) { return context.socket.close(); } logger.error('Got unexpected error while execution', error?.stack ?? error); }); return context.event === 'connection' ? context : context.complete(); } async match(context) { const expectation = context.provider.storages.expectations.match(context.snapshot); if (!expectation) { context.event === 'connection' ? context.skip() : logger.warn('Expectation was not found'); return null; } return expectation; } async prepare(context) { if (context.snapshot.flags.wsCloseConnection) { context.socket.close(context.snapshot.outgoing.status || 1000); return context.complete(); } } async forward() { return null; } async reply(context, outgoing) { await outgoing.stream?.forEach((message) => { context.streams.outgoing.next(message); context.socket.send(typeof message === 'object' ? JSON.stringify(message) : String(message)); }); if (context.event === 'connection' || context.snapshot.flags.wsCloseConnection) { context.socket.close(outgoing.status || 1000); } return outgoing; } } exports.WsExecutor = WsExecutor; //# sourceMappingURL=executor.js.map