@n1k1t/mock-server
Version:
The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations
68 lines • 3.1 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpTransport = exports.buildHttpListener = void 0;
const models_1 = require("../../models");
const context_1 = require("./context");
const executor_1 = require("./executor");
const meta_1 = require("../../../meta");
const logger_1 = require("../../../logger");
__exportStar(require("./executor"), exports);
__exportStar(require("./context"), exports);
const logger = logger_1.Logger.build('Transports.Http');
const buildHttpListener = (router) => async (request, response) => {
for (const { provider, transport } of router.match('http', request.url ?? '')) {
const context = await transport
.compileContext(provider, request, response)
.catch((error) => logger.error('Got error while context compilation', error?.stack ?? error));
if (!context) {
return response.destroy();
}
if (!context.is(['registered', 'handling'])) {
return null;
}
const expectation = await meta_1.metaStorage
.wrap(context.meta, () => transport.executor.match(context))
.catch((error) => logger.error('Got error while expectation matching', error?.stack ?? error));
if (!context.is(['registered', 'handling'])) {
return null;
}
if (!expectation) {
context.cancel();
continue;
}
return meta_1.metaStorage
.wrap(context.meta, () => transport.executor.exec(context.handle(), { expectation }))
.catch((error) => logger.error('Got error while execution', error?.stack ?? error));
}
const { transport, provider } = router.default('http');
const context = await transport.compileContext(provider, request, response);
await meta_1.metaStorage
.wrap(context.meta, () => transport.executor.exec(context.handle()))
.catch((error) => logger.error('Got error while execution', error?.stack ?? error));
};
exports.buildHttpListener = buildHttpListener;
class HttpTransport extends models_1.Transport {
constructor() {
super(...arguments);
this.executor = new executor_1.HttpExecutor();
}
compileContext(provider, request, response) {
return context_1.HttpRequestContext.build(provider, request, response);
}
}
exports.HttpTransport = HttpTransport;
//# sourceMappingURL=index.js.map