123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- '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
|