@n1k1t/mock-server
Version:
Powerful util to setup mocks over HTTP APIs
54 lines • 2.24 kB
JavaScript
;
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