mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { PluginManifest } from './types';
|
|
|
|
type ManifestSlice = Pick<PluginManifest, 'repository_url'|'homepage_url'>;
|
|
const getPluginIssueReportUrl = (pluginManifest: ManifestSlice): string|null => {
|
|
const githubUrlExp = /^https?:\/\/(?:www\.)?github\.com\/([^/]+)\/([^/?]+)/;
|
|
const gitlabUrlExp = /^https?:\/\/(?:www\.)?gitlab\.com\/([^/]+)\/([^/]+)/;
|
|
|
|
let githubUrlMatch = null;
|
|
let gitlabUrlMatch = null;
|
|
const urls = [pluginManifest.repository_url, pluginManifest.homepage_url].filter(url => !!url);
|
|
|
|
for (const url of urls) {
|
|
githubUrlMatch ??= githubUrlExp.exec(url);
|
|
gitlabUrlMatch ??= gitlabUrlExp.exec(url);
|
|
}
|
|
|
|
if (githubUrlMatch) {
|
|
const organization = githubUrlMatch[1];
|
|
// Some plugins include a trailing .git after the repository name
|
|
const project = githubUrlMatch[2].replace(/\.git$/, '');
|
|
return `https://github.com/${organization}/${project}/issues`;
|
|
} else if (gitlabUrlMatch) {
|
|
const organization = gitlabUrlMatch[1];
|
|
const project = gitlabUrlMatch[2];
|
|
return `https://gitlab.com/${organization}/${project}/-/issues`;
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
export default getPluginIssueReportUrl;
|