/********************************************************************************* Type Definitions *********************************************************************************/ import { ServerDefinition } from './types' /********************************************************************************* Internal Definitions *********************************************************************************/ import * as http from "http" import * as preRequest from './prerequest' import * as preResponse from './preresponse' import * as utils from './utils' export const internal = {} /********************************************************************************* Method Definitions *********************************************************************************/ export default (server: ServerDefinition) => http.createServer(async ( httpRequest: http.IncomingMessage, httpResponse: http.ServerResponse ) => { const request = await utils.pipe([ preRequest.parseRequest, preRequest.findResource, preRequest.getResource, preRequest.checkAccess, preRequest.checkValidity, preRequest.getParams ].concat(server.preRequest || []))({ httpRequest, server }) const response = await utils.pipe([ preResponse.getResponse, preResponse.addDefaultHeaders, preResponse.serializeResponse, ].concat(server.preResponse || []))(request) // Send response to the client httpResponse.writeHead(response.status, response.headers) httpResponse.end(response.payload) }).listen(server.port || 3000, () => console.log(`Server listening on port ${server.port || 3000}`))