import { Hono } from "hono";
import { logger } from "hono/logger";
import { cors } from "hono/cors";
import { compress } from "hono/compress";
import { Layout } from "./views/layout";
import gitRoutes from "./routes/git";
import apiRoutes from "./routes/api";
import authRoutes from "./routes/auth";
import settingsRoutes from "./routes/settings";
import issueRoutes from "./routes/issues";
import repoSettings from "./routes/repo-settings";
import compareRoutes from "./routes/compare";
import pullRoutes from "./routes/pulls";
import editorRoutes from "./routes/editor";
import forkRoutes from "./routes/fork";
import webhookRoutes from "./routes/webhooks";
import exploreRoutes from "./routes/explore";
import tokenRoutes from "./routes/tokens";
import contributorRoutes from "./routes/contributors";
import webRoutes from "./routes/web";
const app = new Hono();
app.use("*", compress());
app.use("*", async (c, next) => {
if (c.req.path.includes(".git/")) return next();
return logger()(c, next);
});
app.use("/api/*", cors());
app.route("/", gitRoutes);
app.route("/", apiRoutes);
app.route("/", authRoutes);
app.route("/", settingsRoutes);
app.route("/", tokenRoutes);
app.route("/", repoSettings);
app.route("/", webhookRoutes);
app.route("/", compareRoutes);
app.route("/", issueRoutes);
app.route("/", pullRoutes);
app.route("/", forkRoutes);
app.route("/", editorRoutes);
app.route("/", contributorRoutes);
app.route("/", exploreRoutes);
app.route("/", webRoutes);
app.notFound((c) => {
return c.html(
<Layout title="Not Found">
<div class="empty-state">
<h2>404</h2>
<p>Page not found.</p>
<a href="/" style="margin-top: 12px; display: inline-block">
Go home
</a>
</div>
</Layout>,
404
);
});
app.onError((err, c) => {
console.error("[error]", err);
return c.html(
<Layout title="Error">
<div class="empty-state">
<h2>Something went wrong</h2>
<p>An unexpected error occurred.</p>
{process.env.NODE_ENV !== "production" && (
<pre style="margin-top: 16px; text-align: left; font-size: 12px; color: var(--red)">
{err.message}
</pre>
)}
</div>
</Layout>,
500
);
});
export default app;
|