import { isLinkHttp, removeEndingSlash, removeLeadingSlash, } from 'vuepress/shared';
import { resolveRepoType } from './resolveRepoType.js';
export const editLinkPatterns = {
    GitHub: ':repo/edit/:branch/:path',
    GitLab: ':repo/-/edit/:branch/:path',
    Gitee: ':repo/edit/:branch/:path',
    Bitbucket: ':repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default',
};
const resolveEditLinkPatterns = ({ docsRepo, editLinkPattern, }) => {
    if (editLinkPattern) {
        return editLinkPattern;
    }
    const repoType = resolveRepoType(docsRepo);
    if (repoType !== null) {
        return editLinkPatterns[repoType];
    }
    return null;
};
export const resolveEditLink = ({ docsRepo, docsBranch, docsDir, filePathRelative, editLinkPattern, }) => {
    if (!filePathRelative)
        return null;
    const pattern = resolveEditLinkPatterns({ docsRepo, editLinkPattern });
    if (!pattern)
        return null;
    return pattern
        .replace(/:repo/, isLinkHttp(docsRepo) ? docsRepo : `https://github.com/${docsRepo}`)
        .replace(/:branch/, docsBranch)
        .replace(/:path/, removeLeadingSlash(`${removeEndingSlash(docsDir)}/${filePathRelative}`));
};
