diff --git a/app/utils/public-profile-url.test.ts b/app/utils/public-profile-url.test.ts new file mode 100644 index 0000000..6a46d35 --- /dev/null +++ b/app/utils/public-profile-url.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, test } from "bun:test"; +import { buildPublicProfileAbsoluteUrl } from "./public-profile-url"; + +describe("buildPublicProfileAbsoluteUrl", () => { + test("joins origin with /@slug path", () => { + expect(buildPublicProfileAbsoluteUrl("https://example.com", "my-slug")).toBe( + "https://example.com/@my-slug", + ); + }); + + test("normalizes origin without trailing slash", () => { + expect(buildPublicProfileAbsoluteUrl("https://example.com/", "ab")).toBe("https://example.com/@ab"); + }); +}); diff --git a/app/utils/public-profile-url.ts b/app/utils/public-profile-url.ts new file mode 100644 index 0000000..7e961e9 --- /dev/null +++ b/app/utils/public-profile-url.ts @@ -0,0 +1,7 @@ +/** + * 与站内路由 `/@${publicSlug}` 对应的绝对 URL(用于复制到剪贴板)。 + */ +export function buildPublicProfileAbsoluteUrl(origin: string, publicSlug: string): string { + const base = origin.replace(/\/+$/, ""); + return new URL(`/@${publicSlug}`, `${base}/`).href; +}