diff --git a/apps/server/src/projectFaviconRoute.test.ts b/apps/server/src/projectFaviconRoute.test.ts index a346e513eb..03d9893fff 100644 --- a/apps/server/src/projectFaviconRoute.test.ts +++ b/apps/server/src/projectFaviconRoute.test.ts @@ -117,6 +117,25 @@ describe("tryHandleProjectFaviconRequest", () => { }); }); + it("serves jpeg icons discovered from source metadata with the correct content type", async () => { + const projectDir = makeTempDir("t3code-favicon-route-jpeg-"); + const iconPath = path.join(projectDir, "public", "brand", "logo.jpeg"); + fs.mkdirSync(path.dirname(iconPath), { recursive: true }); + fs.writeFileSync( + path.join(projectDir, "index.html"), + '', + ); + fs.writeFileSync(iconPath, "jpeg-favicon", "utf8"); + + await withRouteServer(async (baseUrl) => { + const pathname = `/api/project-favicon?cwd=${encodeURIComponent(projectDir)}`; + const response = await request(baseUrl, pathname); + expect(response.statusCode).toBe(200); + expect(response.contentType).toContain("image/jpeg"); + expect(response.body).toBe("jpeg-favicon"); + }); + }); + it("resolves icon link when href appears before rel in HTML", async () => { const projectDir = makeTempDir("t3code-favicon-route-html-order-"); const iconPath = path.join(projectDir, "public", "brand", "logo.svg"); diff --git a/apps/server/src/projectFaviconRoute.ts b/apps/server/src/projectFaviconRoute.ts index cf234ad894..895693e962 100644 --- a/apps/server/src/projectFaviconRoute.ts +++ b/apps/server/src/projectFaviconRoute.ts @@ -5,6 +5,7 @@ import path from "node:path"; const FAVICON_MIME_TYPES: Record = { ".png": "image/png", ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", ".svg": "image/svg+xml", ".ico": "image/x-icon", };