53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import * as plugins from './smartstring.plugins'
|
|
|
|
/* ---------------------------------------------- *
|
|
* ------------------ 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 ------------------- *
|
|
* ---------------------------------------------- */
|
|
let gitRegex = function (stringArg: string) {
|
|
let regexString = /([a-zA-Z0-9\-\.]*)(?:\/|\:)([a-zA-Z0-9\-\.]*)(?:\/)([a-zA-Z0-9\-\.]*)(?:\.git)/
|
|
let regexMatches = regexString.exec(stringArg)
|
|
return regexMatches
|
|
}
|
|
|
|
let 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
|
|
}
|