2026-03-09 15:18:46 +03:00

58 lines
1.4 KiB
JavaScript

import http from "node:http";
import { createRequest } from "./request.js";
import { createResponse } from "./response.js";
import { createRouter } from "./route.js";
/**
* @typedef {import('./types/http-server.js').HttpServer} HttpServer
* @typedef {import('./types/http-server.js').HttpServerOptions} HttpServerOptions
* @typedef {import('./types/http-server.js').HttpContext} HttpContext
*/
/**
* @param {HttpServerOptions} options
* @returns {HttpServer}
*/
export function createServer(options) {
const router = createRouter();
const server = http.createServer((req, res) => {
try {
const request = createRequest(req);
const response = createResponse(res);
/** @type {HttpContext} */
const ctx = {
data: null,
req: request,
res: response,
searchParams: request.url.searchParams,
params: {},
local: {}
};
if (options.cors) {
res.setHeaders(
new Headers({
"Access-Control-Allow-Origin": options.cors.allow,
"Access-Control-Allow-Methods": options.cors.methods,
"Access-Control-Allow-Headers": options.cors.headers
})
);
}
console.log(`${new Date().toISOString()} Request: ${ctx.req.url}`);
router.handle(ctx);
} catch (error) {
console.error(error);
}
});
return {
listen(port = 3000, cb) {
server.listen(port, cb);
return { router };
}
};
}