You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.4 KiB
110 lines
2.4 KiB
'use strict' |
|
const gitHosts = require('./git-host-info.js') |
|
|
|
class GitHost { |
|
constructor (type, user, auth, project, committish, defaultRepresentation, opts = {}) { |
|
Object.assign(this, gitHosts[type]) |
|
this.type = type |
|
this.user = user |
|
this.auth = auth |
|
this.project = project |
|
this.committish = committish |
|
this.default = defaultRepresentation |
|
this.opts = opts |
|
} |
|
|
|
hash () { |
|
return this.committish ? `#${this.committish}` : '' |
|
} |
|
|
|
ssh (opts) { |
|
return this._fill(this.sshtemplate, opts) |
|
} |
|
|
|
_fill (template, opts) { |
|
if (typeof template === 'function') { |
|
const options = { ...this, ...this.opts, ...opts } |
|
|
|
// the path should always be set so we don't end up with 'undefined' in urls |
|
if (!options.path) { |
|
options.path = '' |
|
} |
|
|
|
// template functions will insert the leading slash themselves |
|
if (options.path.startsWith('/')) { |
|
options.path = options.path.slice(1) |
|
} |
|
|
|
if (options.noCommittish) { |
|
options.committish = null |
|
} |
|
|
|
const result = template(options) |
|
return options.noGitPlus && result.startsWith('git+') ? result.slice(4) : result |
|
} |
|
|
|
return null |
|
} |
|
|
|
sshurl (opts) { |
|
return this._fill(this.sshurltemplate, opts) |
|
} |
|
|
|
browse (path, fragment, opts) { |
|
// not a string, treat path as opts |
|
if (typeof path !== 'string') { |
|
return this._fill(this.browsetemplate, path) |
|
} |
|
|
|
if (typeof fragment !== 'string') { |
|
opts = fragment |
|
fragment = null |
|
} |
|
return this._fill(this.browsefiletemplate, { ...opts, fragment, path }) |
|
} |
|
|
|
docs (opts) { |
|
return this._fill(this.docstemplate, opts) |
|
} |
|
|
|
bugs (opts) { |
|
return this._fill(this.bugstemplate, opts) |
|
} |
|
|
|
https (opts) { |
|
return this._fill(this.httpstemplate, opts) |
|
} |
|
|
|
git (opts) { |
|
return this._fill(this.gittemplate, opts) |
|
} |
|
|
|
shortcut (opts) { |
|
return this._fill(this.shortcuttemplate, opts) |
|
} |
|
|
|
path (opts) { |
|
return this._fill(this.pathtemplate, opts) |
|
} |
|
|
|
tarball (opts) { |
|
return this._fill(this.tarballtemplate, { ...opts, noCommittish: false }) |
|
} |
|
|
|
file (path, opts) { |
|
return this._fill(this.filetemplate, { ...opts, path }) |
|
} |
|
|
|
getDefaultRepresentation () { |
|
return this.default |
|
} |
|
|
|
toString (opts) { |
|
if (this.default && typeof this[this.default] === 'function') { |
|
return this[this.default](opts) |
|
} |
|
|
|
return this.sshurl(opts) |
|
} |
|
} |
|
module.exports = GitHost
|
|
|