text: 'use strict'
  
  var gitHosts = module.exports = {
    github: {
      // First two are insecure and generally shouldn't be used any more, but
      // they are still supported.
      'protocols': [ 'git', 'http', 'git+ssh', 'git+https', 'ssh', 'https' ],
      'domain': 'github.com',
      'treepath': 'tree',
      'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{committish}/{path}',
      'bugstemplate': 'https://{domain}/{user}/{project}/issues',
      'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#committish}',
      'tarballtemplate': 'https://{domain}/{user}/{project}/archive/{committish}.tar.gz'
    },
    bitbucket: {
      'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
      'domain': 'bitbucket.org',
      'treepath': 'src',
      'tarballtemplate': 'https://{domain}/{user}/{project}/get/{committish}.tar.gz'
    },
    gitlab: {
      'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
      'domain': 'gitlab.com',
      'treepath': 'tree',
      'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#README',
      'bugstemplate': 'https://{domain}/{user}/{project}/issues',
      'tarballtemplate': 'https://{domain}/{user}/{project}/repository/archive.tar.gz?ref={committish}'
    },
    gist: {
      'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ],
      'domain': 'gist.github.com',
      'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]+)(?:[.]git)?$/,
      'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/committish}/{path}',
      'bugstemplate': 'https://{domain}/{project}',
      'gittemplate': 'git://{domain}/{project}.git{#committish}',
      'sshtemplate': 'git@{domain}:/{project}.git{#committish}',
      'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#committish}',
      'browsetemplate': 'https://{domain}/{project}{/committish}',
      'docstemplate': 'https://{domain}/{project}{/committish}',
      'httpstemplate': 'git+https://{domain}/{project}.git{#committish}',
      'shortcuttemplate': '{type}:{project}{#committish}',
      'pathtemplate': '{project}{#committish}',
      'tarballtemplate': 'https://{domain}/{user}/{project}/archive/{committish}.tar.gz'
    }
  }
  
  var gitHostDefaults = {
    'sshtemplate': 'git@{domain}:{user}/{project}.git{#committish}',
    'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#committish}',
    'browsetemplate': 'https://{domain}/{user}/{project}{/tree/committish}',
    'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#readme',
    'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#committish}',
    'filetemplate': 'https://{domain}/{user}/{project}/raw/{committish}/{path}',
    'shortcuttemplate': '{type}:{user}/{project}{#committish}',
    'pathtemplate': '{user}/{project}{#committish}',
    'pathmatch': /^[/]([^/]+)[/]([^/]+?)(?:[.]git|[/])?$/
  }
  
  Object.keys(gitHosts).forEach(function (name) {
    Object.keys(gitHostDefaults).forEach(function (key) {
      if (gitHosts[name][key]) return
      gitHosts[name][key] = gitHostDefaults[key]
    })
    gitHosts[name].protocols_re = RegExp('^(' +
      gitHosts[name].protocols.map(function (protocol) {
        return protocol.replace(/([\\+*{}()[\]$^|])/g, '\\$1')
      }).join('|') + '):$')
  })
  