| |
| |
| |
|
|
| import type { KVNamespace } from '@cloudflare/workers-types'; |
| import { Hono } from 'hono'; |
| import { jsxRenderer } from 'hono/jsx-renderer'; |
| import { trimTrailingSlash } from 'hono/trailing-slash'; |
|
|
| import { errorHandler, notFoundHandler } from '@/errors'; |
| import accessControl from '@/middleware/access-control'; |
| import cache from '@/middleware/cache'; |
| import debug from '@/middleware/debug'; |
| import header from '@/middleware/header'; |
| import mLogger from '@/middleware/logger'; |
| import template from '@/middleware/template'; |
| import trace from '@/middleware/trace'; |
| import registry from '@/registry'; |
| import { setKVNamespace } from '@/utils/cache/index.worker'; |
| import { setBrowserBinding } from '@/utils/puppeteer'; |
|
|
| |
| type Bindings = { |
| BROWSER?: any; |
| CACHE?: KVNamespace; |
| }; |
|
|
| const app = new Hono<{ Bindings: Bindings }>(); |
|
|
| |
| app.use(async (c, next) => { |
| if (c.env?.BROWSER) { |
| setBrowserBinding(c.env.BROWSER); |
| } |
| if (c.env?.CACHE) { |
| setKVNamespace(c.env.CACHE); |
| } |
| await next(); |
| }); |
|
|
| app.use(trimTrailingSlash()); |
|
|
| |
|
|
| app.use( |
| jsxRenderer(({ children }) => <>{children}</>, { |
| docType: '<?xml version="1.0" encoding="UTF-8"?>', |
| stream: {}, |
| }) |
| ); |
| app.use(mLogger); |
| app.use(trace); |
|
|
| |
| |
| |
| |
|
|
| app.use(cache); |
| app.use(accessControl); |
| app.use(debug); |
| app.use(template); |
| app.use(header); |
|
|
| app.route('/', registry); |
|
|
| |
|
|
| app.notFound(notFoundHandler); |
| app.onError(errorHandler); |
|
|
| export default app; |
|
|