diff --git a/lib/app.js b/lib/app.js deleted file mode 100644 index 720da7f71..000000000 --- a/lib/app.js +++ /dev/null @@ -1,94 +0,0 @@ -const moduleAlias = require('module-alias'); -moduleAlias.addAlias('@', () => __dirname); - -require('./utils/request-wrapper'); - -const Koa = require('koa'); -const logger = require('./utils/logger'); - -const onerror = require('./middleware/onerror'); -const header = require('./middleware/header'); -const utf8 = require('./middleware/utf8'); -const cache = require('./middleware/cache'); -const parameter = require('./middleware/parameter'); -const template = require('./middleware/template'); -const favicon = require('koa-favicon'); -const serve = require('koa-static'); -const debug = require('./middleware/debug'); -const accessControl = require('./middleware/access-control'); -const antiHotlink = require('./middleware/anti-hotlink'); -const loadOnDemand = require('./middleware/load-on-demand'); - -const router = require('./router'); -const core_router = require('./core-router'); -const protected_router = require('./protected-router'); -const mount = require('koa-mount'); - -// API related -const apiTemplate = require('./middleware/api-template'); -const api_router = require('./api-router'); -const apiResponseHandler = require('./middleware/api-response-handler'); - -process.on('uncaughtException', (e) => { - logger.error('uncaughtException: ' + e); -}); - -const app = new Koa(); -app.proxy = true; - -// favicon -app.use(favicon(__dirname + '/favicon.png', { maxAge: 31_536_000_000 })); -app.use(serve(__dirname + '/static', { maxage: 31_536_000_000 })); - -// global error handing -app.use(onerror); - -app.use(accessControl); - -// 7 debug -app.context.debug = { - hitCache: 0, - request: 0, - etag: 0, - paths: [], - routes: [], - errorPaths: [], - errorRoutes: [], -}; -app.use(debug); - -// 6 set header -app.use(header); - -// 5 fix incorrect `utf-8` characters -app.use(utf8); - -app.use(apiTemplate); -app.use(apiResponseHandler()); - -// 4 generate body -app.use(template); -// anti-hotlink -app.use(antiHotlink); - -// 3 filter content -app.use(parameter); - -// No Cache routes -app.use(mount('/', core_router.routes())).use(core_router.allowedMethods()); -// API router -app.use(mount('/api', api_router.routes())).use(api_router.allowedMethods()); - -// 2 cache -app.use(cache(app)); - -// 1 load on demand -app.use(loadOnDemand(app)); - -// router -app.use(mount('/', router.routes())).use(router.allowedMethods()); - -// routes the require authentication -app.use(mount('/protected', protected_router.routes())).use(protected_router.allowedMethods()); - -module.exports = app; diff --git a/lib/app.ts b/lib/app.ts new file mode 100644 index 000000000..c4a66907f --- /dev/null +++ b/lib/app.ts @@ -0,0 +1,52 @@ +import '@/utils/request-wrapper' + +import { Handler, Hono } from 'hono' + +import cache from '@/middleware/cache' +import template from '@/middleware/template' +import onerror from '@/middleware/onerror' +import accessControl from '@/middleware/access-control' +import debug from '@/middleware/debug' +import header from '@/middleware/header' +import antiHotlink from '@/middleware/anti-hotlink' +import parameter from '@/middleware/parameter' +import logger from '@/utils/logger' + +import routes from '@/routes' +import index from '@/v3/index' +import { errorHandler } from '@/errors' + +process.on('uncaughtException', (e) => { + logger.error('uncaughtException: ' + e); +}); + +const app = new Hono() + +app.use('*', onerror); +app.use('*', accessControl); +app.use('*', debug); +app.use('*', template); +app.use('*', header); +app.use('*', antiHotlink); +app.use('*', parameter); +app.use('*', cache); + +for (const name in routes) { + const subApp = app.basePath(`/${name}`) + routes[name]({ + get: (path, handler) => { + const wrapedHandler: Handler = async (ctx, ...args) => { + if (!ctx.get('data')) { + await handler(ctx, ...args) + } + } + subApp.get(path, wrapedHandler) + }, + }) +} + +app.get('/', index) + +app.onError(errorHandler) + +export default app diff --git a/lib/index.ts b/lib/index.ts index 633baddf2..e846fd95f 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,55 +1,7 @@ -import '@/utils/request-wrapper' - import { serve } from '@hono/node-server' -import { Handler, Hono } from 'hono' - -import cache from '@/middleware/cache' -import template from '@/middleware/template' -import onerror from '@/middleware/onerror' -import accessControl from '@/middleware/access-control' -import debug from '@/middleware/debug' -import header from '@/middleware/header' -import antiHotlink from '@/middleware/anti-hotlink' -import parameter from '@/middleware/parameter' import logger from '@/utils/logger' - -import routes from '@/routes' -import index from '@/v3/index' import { config } from '@/config' -import { errorHandler } from '@/errors' - -process.on('uncaughtException', (e) => { - logger.error('uncaughtException: ' + e); -}); - -const app = new Hono() - -app.use('*', onerror); -app.use('*', accessControl); -app.use('*', debug); -app.use('*', template); -app.use('*', header); -app.use('*', antiHotlink); -app.use('*', parameter); -app.use('*', cache); - -for (const name in routes) { - const subApp = app.basePath(`/${name}`) - routes[name]({ - get: (path, handler) => { - const wrapedHandler: Handler = async (ctx, ...args) => { - if (!ctx.get('data')) { - await handler(ctx, ...args) - } - } - subApp.get(path, wrapedHandler) - }, - }) -} - -app.get('/', index) - -app.onError(errorHandler) +import app from '@/app' const port = config.connect.port @@ -60,3 +12,5 @@ serve({ fetch: app.fetch, port }) + +export default app