@overlook/framework
Version:
Overlook framework
123 lines (109 loc) • 2.91 kB
JavaScript
/* --------------------
* @overlook/framework module
* Entry point
* ------------------*/
;
// Modules
const pathJoin = require('path').join,
Route = require('@overlook/route'),
loadRoutes = require('@overlook/load-routes'),
buildPlugin = require('@overlook/plugin-build'),
loadPlugin = require('@overlook/plugin-load'),
pathPlugin = require('@overlook/plugin-path'),
staticPlugin = require('@overlook/plugin-static'),
staticDirPlugin = require('@overlook/plugin-static-dir'),
matchPlugin = require('@overlook/plugin-match'),
httpServerPlugin = require('@overlook/plugin-serve-http'),
{PATH} = require('@overlook/plugin-request');
const {INIT_ROUTE} = Route,
{BUILD, PRE_BUILD, BUILD_FILE, BUILD_FILES, FS_ROOT_PATH, deleteRouteProperties} = buildPlugin,
{
FILES, PARENT_PATH, GET_PARENT_PATH,
DIR_INDEX, ROUTE_EXTS,
GET_DIR_INDEX, GET_ROUTE_EXTS, IDENTIFY_ROUTE_FILE,
SRC_DIR_PATH
} = loadPlugin,
{PATH_PART, GET_PATH_PART, PARAMS, HANDLE_ROUTE, MATCH, IS_BEFORE} = pathPlugin,
{
STATIC_FILE, GET_STATIC_FILE,
STATIC_FILE_HEADERS, GET_STATIC_FILE_HEADERS, RESPOND_WITH_FILE,
GET_FILE_PATH, READ_FILE, WRITE_FILE, CREATE_VIRTUAL_PATH, FS_FILES,
File
} = staticPlugin,
{PORT, REQ, RES, METHOD, URL, URL_STR, URL_OBJ, QUERY, QUERY_STR, START, STOP} = httpServerPlugin,
{STATIC_DIR_PATH, STATIC_BUILD_PATH} = staticDirPlugin;
// Exports
const MainRoute = Route.extend(buildPlugin)
.extend(loadPlugin)
.extend(pathPlugin)
.extend(staticPlugin);
const ServerRoute = MainRoute.extend(httpServerPlugin);
class RootRoute extends ServerRoute {
[IDENTIFY_ROUTE_FILE](exts, isIndex, name) {
if (name !== 'public' || !isIndex) return super[IDENTIFY_ROUTE_FILE](exts, isIndex, name);
// Create static dir route for public dir
const publicPath = pathJoin(this[SRC_DIR_PATH], 'public');
const StaticDirRoute = Route.extend(buildPlugin)
.extend(matchPlugin)
.extend(staticDirPlugin);
return new StaticDirRoute({
[STATIC_DIR_PATH]: publicPath,
[STATIC_BUILD_PATH]: 'public',
[IS_BEFORE]() { return true; },
[MATCH]() { return {exact: true}; }
});
}
}
async function load(path, options) {
let {Loader} = options || {};
if (!Loader) Loader = RootRoute;
const router = await loadRoutes(path, {Loader});
return router;
}
module.exports = {
load,
RootRoute,
Route: MainRoute,
File,
deleteRouteProperties,
INIT_ROUTE,
BUILD,
PRE_BUILD,
BUILD_FILE,
BUILD_FILES,
FS_ROOT_PATH,
FILES,
PARENT_PATH,
GET_PARENT_PATH,
DIR_INDEX,
ROUTE_EXTS,
GET_DIR_INDEX,
GET_ROUTE_EXTS,
IDENTIFY_ROUTE_FILE,
HANDLE_ROUTE,
PATH_PART,
GET_PATH_PART,
REQ,
RES,
METHOD,
URL,
URL_STR,
URL_OBJ,
PATH,
QUERY,
QUERY_STR,
PARAMS,
START,
STOP,
PORT,
STATIC_FILE,
GET_STATIC_FILE,
STATIC_FILE_HEADERS,
GET_STATIC_FILE_HEADERS,
RESPOND_WITH_FILE,
GET_FILE_PATH,
READ_FILE,
WRITE_FILE,
CREATE_VIRTUAL_PATH,
FS_FILES
};