// https://github.com///tree/ // The url when users visit a repo/branch on github.com export const RepoUriPattern = /https:\/\/github.com\/([^/]*)\/([^/]*)\/tree\/([^?]*)/; // github:////?ref= // Custom scheme for github content export const ContentUriPattern = /github:\/\/([^/]*)\/([^/]*)\/([^?]*)\?ref=(.*)/; // https://github.com///blob// // We need to support this until we move to newer scheme for quickstarts export const LegacyContentUriPattern = /https:\/\/github.com\/([^/]*)\/([^/]*)\/blob\/([^/]*)\/([^?]*)/; export function toRepoFullName(owner: string, repo: string): string { return `${owner}/${repo}`; } export function fromRepoUri(repoUri: string): undefined | { owner: string; repo: string; branch: string } { const matches = repoUri.match(RepoUriPattern); if (matches && matches.length > 3) { return { owner: matches[1], repo: matches[2], branch: matches[3], }; } return undefined; } export function fromContentUri( contentUri: string ): undefined | { owner: string; repo: string; branch: string; path: string } { let matches = contentUri.match(ContentUriPattern); if (matches && matches.length > 4) { return { owner: matches[1], repo: matches[2], branch: matches[4], path: matches[3], }; } matches = contentUri.match(LegacyContentUriPattern); if (matches && matches.length > 4) { return { owner: matches[1], repo: matches[2], branch: matches[3], path: matches[4], }; } return undefined; } export function toContentUri(owner: string, repo: string, branch: string, path: string): string { return `github://${owner}/${repo}/${path}?ref=${branch}`; } export function toRawContentUri(owner: string, repo: string, branch: string, path: string): string { return `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${path}`; }