cherry pick fix for file links

This commit is contained in:
msukkari 2025-02-27 16:25:21 -08:00
parent b9352345a3
commit 1bdb65c34e

View file

@ -43,12 +43,29 @@ export const CodePreviewPanel = ({
.then(({ source }) => {
const link = (() => {
const template = repoUrlTemplates[fileMatch.Repository];
if (!template) {
// This is a hacky parser for templates generated by
// the go text/template package. Example template:
// {{URLJoinPath "https://github.com/sourcebot-dev/sourcebot" "blob" .Version .Path}}
// @see: https://pkg.go.dev/text/template
if (!template || !template.match(/^{{URLJoinPath\s.*}}(\?.+)?$/)) {
return undefined;
}
return template
.replace("{{.Version}}", branch ?? "HEAD")
.replace("{{.Path}}", fileMatch.FileName);
const url =
template.substring("{{URLJoinPath ".length,template.indexOf("}}"))
.replace(".Version", branch ?? "HEAD")
.replace(".Path", fileMatch.FileName)
.split(" ")
.map((part) => {
// remove wrapping quotes
if (part.startsWith("\"")) part = part.substring(1);
if (part.endsWith("\"")) part = part.substring(0, part.length - 1);
return part;
})
.join("/");
const optionalQueryParams = template.substring(template.indexOf("}}") + 2);
return url + optionalQueryParams;
})();
const decodedSource = base64Decode(source);