unmock-core
Version:
[][npmjs] [](https://circleci.com/gh/unmock/unmock-js) [](h
91 lines (88 loc) • 3.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const debug_1 = require("debug");
const faker_1 = require("../faker");
const parser_1 = require("../parser");
const random_number_generator_1 = require("../random-number-generator");
const serviceStore_1 = require("../service/serviceStore");
const debugLog = debug_1.default("unmock:node");
exports.errorForMissingTemplate = (sreq) => {
const serverUrl = `${sreq.protocol}://${sreq.host}`;
return `No matching template found for intercepted request. Please ensure that
1. You have defined a service for host ${serverUrl}
2. The service has a path matching "${sreq.method} ${sreq.pathname}"
For example, add the following to your service:
servers:
- url: ${sreq.protocol}://${sreq.host}
paths:
${sreq.pathname}:
${sreq.method.toLowerCase()}:
// OpenAPI operation object
responses:
200:
...
`;
};
exports.buildRequestHandler = (createResponse) => (serializedRequest, sendResponse, emitError) => {
try {
debugLog("Serialized request", JSON.stringify(serializedRequest));
const serializedResponse = createResponse(serializedRequest);
debugLog("Responding with response", JSON.stringify(serializedResponse));
sendResponse(serializedResponse);
}
catch (err) {
emitError(Error(`unmock error: ${err.message}`));
}
};
const NoopServiceDefLoader = {
loadSync() {
return [];
},
};
class Backend {
constructor({ interceptorFactory, listeners, randomNumberGenerator: rng, serviceDefLoader, }) {
this.serviceStore = new serviceStore_1.ServiceStore([]);
this.interceptorFactory = interceptorFactory;
this.requestResponseListeners = listeners || [];
this.serviceDefLoader = serviceDefLoader || NoopServiceDefLoader;
this.loadServices();
this.faker = new faker_1.default({
serviceStore: this.serviceStore,
randomNumberGenerator: rng || random_number_generator_1.randomNumberGenerator({}),
});
}
get services() {
return this.serviceStore.services;
}
initialize(options) {
if (this.interceptor) {
this.interceptor.disable();
this.interceptor = undefined;
}
this.faker.setOptions(options);
this.handleRequest = exports.buildRequestHandler((req) => this.faker.createResponse(req));
this.interceptor = this.interceptorFactory({
onSerializedRequest: this.handleRequest,
shouldBypassHost: options.isWhitelisted,
});
}
reset() {
if (this.interceptor) {
this.interceptor.disable();
this.interceptor = undefined;
}
this.handleRequest = undefined;
this.serviceStore.resetServices();
}
loadServices() {
const serviceDefs = this.serviceDefLoader.loadSync();
this.updateServiceDefs(serviceDefs);
}
updateServiceDefs(serviceDefs) {
const coreServices = serviceDefs.map(serviceDef => parser_1.ServiceParser.parse(serviceDef));
this.serviceStore.update(coreServices);
}
}
exports.Backend = Backend;
exports.default = Backend;
//# sourceMappingURL=index.js.map