diff --git a/.gitignore b/.gitignore index 2b75632..b5141ca 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ node_modules bun.lock yarn.lock + +.vercel +.env*.local diff --git a/app/assets/css/main.css b/app/assets/css/main.css index ce5d025..d3d9236 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -1,5 +1,4 @@ /* @import url("https://cdn.jsdelivr.net/npm/@chinese-fonts/maple-mono-cn@2.0.0/dist/MapleMono-CN-Regular/result.css"); */ -@import url("https://fontsapi.zeoseven.com/521/main/result.css"); /* @import url("https://fontsapi.zeoseven.com/292/main/result.css"); */ @import "tailwindcss"; @import "@nuxt/ui"; diff --git a/nuxt.config.ts b/nuxt.config.ts index 25787d7..e5ea996 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -58,6 +58,7 @@ export default defineNuxtConfig({ { rel: "alternate", hreflang: siteConfig.siteMeta.lang, href: siteConfig.siteMeta.url }, { rel: "dns-prefetch", href: siteConfig.siteMeta.url }, { rel: "preconnect", href: siteConfig.siteMeta.url }, + { rel: "stylesheet", href: "/fonts/521/main/result.css" }, ], }, pageTransition: { name: "page", mode: "out-in" }, diff --git a/server/routes/fonts/[...all].get.ts b/server/routes/fonts/[...all].get.ts new file mode 100644 index 0000000..74e054b --- /dev/null +++ b/server/routes/fonts/[...all].get.ts @@ -0,0 +1,26 @@ +import { defineEventHandler } from "h3"; + +export default defineEventHandler(async (event) => { + const { req, res } = event.node; + // Preserve the path after /fonts + const forwardPath = req.url?.replace(/^\/fonts/, "") || ""; + const target = `https://fontsapi.zeoseven.com${forwardPath}`; + + const upstream = await fetch(target); + if (!upstream.ok) { + res.statusCode = upstream.status; + const text = await upstream.text(); + res.setHeader("Content-Type", "text/plain; charset=utf-8"); + res.end(text); + return; + } + + const contentType = upstream.headers.get("content-type") || "application/octet-stream"; + const arrayBuffer = await upstream.arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); + + // Long cache: 1 year + immutable + res.setHeader("Cache-Control", "public, max-age=31536000, immutable"); + res.setHeader("Content-Type", contentType); + res.end(buffer); +});