UNPKG

midnight

Version:

Web framework for building modern web applications

103 lines (85 loc) 2.38 kB
const path = require("path"); const request = require("./lib/request.js"); const response = require("./lib/response.js"); const loggerMiddleware = require("./lib/middleware/logger"); const queryMiddleware = require("./lib/middleware/query"); const VERSION = "0.2.1"; /** * @typedef {import("midnight").Request} Request * @typedef {import("midnight").Response} Response * @typedef {import("midnight").Next} Next * @typedef {import("midnight").Middleware} Middleware * @typedef {import("midnight").Route} Route * @typedef {import("midnight").Plugin} Plugin * @typedef {import("midnight").Logger} Logger * @typedef {import("midnight").App} App * @typedef {import("midnight").Config} Config */ /** * @type {() => import("midnight").App} */ module.exports = () => { /** @type {import("midnight").App} */ const app = { stack: [], routes: [], plugins: [], cache: {}, config: {}, globals: { title: `Midnight ${VERSION}`, }, log: require("./lib/log.js")(2), // Configuration configure: function (object) { return require("./lib/config.js")(this, object); }, // Start the server start: function (config) { return require("./lib/server.js")(this, config); }, // Router route: function (pattern, handler) { return require("./lib/route.js")(this, pattern, handler); }, // Utils utils: require("./lib/utils.js"), // Middleware use: function (fn) { return require("./lib/middleware.js").use(this, fn); }, // Plugins plugin: function (plugin, options) { return require("./lib/plugin.js").attach(this, plugin, options); }, }; // Built-in middleware to extend request and response objects app.use((req, res, next) => { // Extend request app.utils.merge(req, { app, originalUrl: req.url, ...request, }); // Extend response app.utils.merge(res, { app, ...response, }); next(); }); // Request logger middleware app.use(loggerMiddleware); // Query parameter middleware app.use(queryMiddleware); // Default configuration app.configure({ host: "127.0.0.1", port: 8080, views: "/views", root: path.dirname(require.main.filename), // Application root path env: "development", // Development mode version: VERSION, }); return app; };