80 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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://codeload.{domain}/{user}/{project}/tar.gz/{committish}'
 | |
|   },
 | |
|   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',
 | |
|     'bugstemplate': 'https://{domain}/{user}/{project}/issues',
 | |
|     'httpstemplate': 'git+https://{auth@}{domain}/{user}/{projectPath}.git{#committish}',
 | |
|     'tarballtemplate': 'https://{domain}/{user}/{project}/repository/archive.tar.gz?ref={committish}',
 | |
|     'pathmatch': /^[/]([^/]+)[/]((?!.*(\/-\/|\/repository\/archive\.tar\.gz\?=.*|\/repository\/[^/]+\/archive.tar.gz$)).*?)(?:[.]git|[/])?$/
 | |
|   },
 | |
|   gist: {
 | |
|     'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ],
 | |
|     'domain': 'gist.github.com',
 | |
|     'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]{32,})(?:[.]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}',
 | |
|     'browsefiletemplate': 'https://{domain}/{project}{/committish}{#path}',
 | |
|     'docstemplate': 'https://{domain}/{project}{/committish}',
 | |
|     'httpstemplate': 'git+https://{domain}/{project}.git{#committish}',
 | |
|     'shortcuttemplate': '{type}:{project}{#committish}',
 | |
|     'pathtemplate': '{project}{#committish}',
 | |
|     'tarballtemplate': 'https://codeload.github.com/gist/{project}/tar.gz/{committish}',
 | |
|     'hashformat': function (fragment) {
 | |
|       return 'file-' + formatHashFragment(fragment)
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| 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}',
 | |
|   'browsefiletemplate': 'https://{domain}/{user}/{project}/{treepath}/{committish}/{path}{#fragment}',
 | |
|   '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|[/])?$/,
 | |
|   'hashformat': formatHashFragment
 | |
| }
 | |
| 
 | |
| 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('|') + '):$')
 | |
| })
 | |
| 
 | |
| function formatHashFragment (fragment) {
 | |
|   return fragment.toLowerCase().replace(/^\W+|\/|\W+$/g, '').replace(/\W+/g, '-')
 | |
| }
 |