58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import * as plugins from './smartstring.plugins.js';
|
|
|
|
/* ---------------------------------------------- *
|
|
* ------------------ classes ------------------- *
|
|
* ---------------------------------------------- */
|
|
export class GitRepo {
|
|
host: string;
|
|
user: string;
|
|
repo: string;
|
|
accessToken: string;
|
|
sshUrl: string;
|
|
httpsUrl: string;
|
|
constructor(stringArg: string, tokenArg?: string) {
|
|
let regexMatches = gitRegex(stringArg);
|
|
this.host = regexMatches[1];
|
|
this.user = regexMatches[2];
|
|
this.repo = regexMatches[3];
|
|
this.accessToken = tokenArg;
|
|
this.sshUrl = gitLink(this.host, this.user, this.repo, this.accessToken, 'ssh');
|
|
this.httpsUrl = gitLink(this.host, this.user, this.repo, this.accessToken, 'https');
|
|
}
|
|
}
|
|
|
|
/* ---------------------------------------------- *
|
|
* ------------------ helpers ------------------- *
|
|
* ---------------------------------------------- */
|
|
const gitRegex = function (stringArg: string) {
|
|
const regexString =
|
|
/([a-zA-Z0-9\-_\.]*)(?:\/|\:)([a-zA-Z0-9\-_\.]*)(?:\/)([a-zA-Z0-9\-_\.]*)(?:\.git)/;
|
|
let regexMatches = regexString.exec(stringArg);
|
|
return regexMatches;
|
|
};
|
|
|
|
const gitLink = function (
|
|
hostArg: string,
|
|
userArg: string,
|
|
repoArg: string,
|
|
tokenArg: string = '',
|
|
linkTypeArg
|
|
): string {
|
|
let returnString;
|
|
if (tokenArg !== '') {
|
|
tokenArg = tokenArg + '@';
|
|
}
|
|
switch (linkTypeArg) {
|
|
case 'https':
|
|
returnString = 'https://' + tokenArg + hostArg + '/' + userArg + '/' + repoArg + '.git';
|
|
break;
|
|
case 'ssh':
|
|
returnString = 'git@' + hostArg + ':' + userArg + '/' + repoArg + '.git';
|
|
break;
|
|
default:
|
|
console.error('Link Type ' + linkTypeArg + ' not known');
|
|
break;
|
|
}
|
|
return returnString;
|
|
};
|