diff --git a/app/routes/$.tsx b/app/routes/$.tsx index 51cf30c..3c42921 100644 --- a/app/routes/$.tsx +++ b/app/routes/$.tsx @@ -31,13 +31,22 @@ export const loader = async ({ request }: { request: Request }) => { const url = new URL(request.url); const host = url.host; const pathname = url.pathname; + const protocol = url.protocol; const { urlType, owner, repo } = getRepoData({ requestHost: host, requestUrl: pathname, }); - return { urlType, owner, repo, url: url.toString() }; + let urlString = url.toString(); + + if (urlType == "github") { + urlString = `${protocol}//${host}/${owner}/${repo}`; + } else if (urlType == "subdomain") { + urlString = `${protocol}//${host}/${repo}`; + } + + return { urlType, owner, repo, url: urlString }; }; export function HydrateFallback() { diff --git a/src/shared/repoData.test.ts b/src/shared/repoData.test.ts index 1e994b4..eb04c80 100644 --- a/src/shared/repoData.test.ts +++ b/src/shared/repoData.test.ts @@ -36,6 +36,22 @@ const testCases: { host: "gitmcp.io", }, }, + { + title: "long gitmcp.io", + input: { + requestHost: "gitmcp.io", + requestUrls: [ + "https://gitmcp.io/mrdoob/three.js/test", + "/mrdoob/three.js/test", + ], + }, + expected: { + owner: "mrdoob", + repo: "three.js", + urlType: "github", + host: "gitmcp.io", + }, + }, { title: "myOwner.gitmcp.io", input: { @@ -49,6 +65,22 @@ const testCases: { host: "ownerName.gitmcp.io", }, }, + { + title: "long myOwner.gitmcp.io", + input: { + requestHost: "keyboardkit.gitmcp.io", + requestUrls: [ + "https://keyboardkit.gitmcp.io/KeyboardKit/documentation/keyboardkit", + "/KeyboardKit/documentation/keyboardkit", + ], + }, + expected: { + owner: "keyboardkit", + repo: "KeyboardKit", + urlType: "subdomain", + host: "keyboardkit.gitmcp.io", + }, + }, { title: "generic (docs)", input: { diff --git a/src/shared/repoData.ts b/src/shared/repoData.ts index 08d0b3f..60e31bd 100644 --- a/src/shared/repoData.ts +++ b/src/shared/repoData.ts @@ -42,8 +42,9 @@ export function getRepoData(requestData: RequestData): RepoData { // Check for subdomain pattern: {subdomain}.gitmcp.io/{path} if (requestHost.includes(".gitmcp.io")) { const subdomain = requestHost.split(".")[0]; + const repo = path.split("/")?.at(0) ?? null; logData.owner = subdomain; - logData.repo = path; + logData.repo = repo; logData.urlType = "subdomain"; log("getRepoDataLog", JSON.stringify(logData, null, 2)); @@ -56,7 +57,7 @@ export function getRepoData(requestData: RequestData): RepoData { return { owner: subdomain, - repo: path || null, + repo: repo || null, host: requestHost, urlType: "subdomain", };