UNPKG

f2e-server3

Version:

f2e-server 3.0

93 lines (92 loc) 3.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.server_all = void 0; const _ = __importStar(require("./utils/misc")); const resp_1 = require("./utils/resp"); const server_engine_1 = __importDefault(require("./server-engine")); const logger_1 = __importDefault(require("./utils/logger")); const server_all = (conf, events, memory) => { const { onRoute, beforeRoute } = events; const { handleDirectory, handleNotFound, handleSuccess, handleError } = (0, resp_1.createResponseHelper)(conf); const execute = async (pathname, ctx) => { const { req, resp } = ctx; const routeResult = await onRoute(pathname, ctx); if (routeResult === false) { return; } else if (typeof routeResult === 'string') { pathname = routeResult || pathname; } pathname = _.pathname_fixer(pathname); const data = await memory.store.load(pathname); if (conf.page_dir != false && _.isPlainObject(data)) { handleDirectory(resp, pathname, data); } else if (typeof data === 'undefined') { handleNotFound(resp, pathname); } else if (typeof data === 'string' || Buffer.isBuffer(data)) { handleSuccess(ctx, pathname, data); } else { handleError(resp, 'Unknown Error!\n Wrong Data in memory'); } }; return async (resp, req) => { const location = new URL(req.getUrl() + '?' + (req.getQuery() || ''), `http://${req.getHeader('host') || `localhost:${conf.port}`}`); if (conf.host != '0.0.0.0') { if (location.hostname != conf.host) { handleError(resp, 'Wrong Host!'); return; } } let pathname = _.pathname_fixer(_.decode(location.pathname)); const headers = (0, resp_1.getHttpHeaders)('request' in req ? req.request : req); const ctx = { req, resp, location, pathname, store: memory.store, method: req.getMethod() || 'get', headers, responseHeaders: conf.headers || {}, }; let pathnameTemp = await beforeRoute(pathname, ctx); if (pathnameTemp === false) { return; } else if (typeof pathnameTemp === 'string') { pathname = pathnameTemp; } const method = req.getMethod().toUpperCase(); const body = method === 'POST' ? await server_engine_1.default.parseBody(req, resp) : undefined; if (body) { logger_1.default.debug(location.pathname, body.toString()); } await execute(pathname, { ...ctx, body }); }; }; exports.server_all = server_all;