CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | import { Hono } from "hono";
import { logger } from "hono/logger";
import { cors } from "hono/cors";
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 webRoutes from "./routes/web";
const app = new Hono();
// Middleware
app.use("*", logger());
app.use("/api/*", cors());
// Git Smart HTTP protocol routes (must be before web routes)
app.route("/", gitRoutes);
// REST API
app.route("/", apiRoutes);
// Auth routes (register, login, logout)
app.route("/", authRoutes);
// Settings routes (profile, SSH keys)
app.route("/", settingsRoutes);
// API tokens
app.route("/", tokenRoutes);
// Repo settings (description, visibility, delete)
app.route("/", repoSettings);
// Webhooks management
app.route("/", webhookRoutes);
// Compare view (branch diffs)
app.route("/", compareRoutes);
// Issue tracker
app.route("/", issueRoutes);
// Pull requests
app.route("/", pullRoutes);
// Fork
app.route("/", forkRoutes);
// Web file editor
app.route("/", editorRoutes);
// Explore page
app.route("/", exploreRoutes);
// Web UI (catch-all, must be last)
app.route("/", webRoutes);
// Global 404
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
);
});
// Global error handler
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;
|