UNPKG

unmock-core

Version:

[![npm](https://img.shields.io/npm/v/unmock-core.svg)][npmjs] [![CircleCI](https://circleci.com/gh/unmock/unmock-js.svg?style=svg)](https://circleci.com/gh/unmock/unmock-js) [![codecov](https://codecov.io/gh/unmock/unmock-js/branch/dev/graph/badge.svg)](h

91 lines (88 loc) 3.27 kB
"use strict"; 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