reserve
Version:
Lightweight http server statically configurable using regular expressions
35 lines (32 loc) • 1.19 kB
JavaScript
const { check } = require('./configuration')
const dispatcher = require('./dispatcher')
const EventEmitter = require('events')
const Request = require('./mock/Request')
const Response = require('./mock/Response')
const {
$configurationEventEmitter,
$configurationInterface
} = require('./symbols')
module.exports = (jsonConfiguration, mockedHandlers = {}) => {
const eventEmitter = new EventEmitter()
return check(jsonConfiguration)
.then(configuration => {
configuration[$configurationEventEmitter] = eventEmitter
Object.assign(configuration.handlers, mockedHandlers)
configuration.listeners.forEach(listener => listener(eventEmitter))
eventEmitter.emit('server-created', {
configuration: configuration[$configurationInterface],
server: null
})
const dispatch = dispatcher.bind(eventEmitter, configuration)
eventEmitter.request = function () {
const request = new Request(...arguments)
const response = new Response()
const finished = response.waitForFinish()
return dispatch(request, response)
.then(() => finished)
}
return eventEmitter
})
}