1'use strict' 2 3var gitHosts = module.exports = { 4 github: { 5 // First two are insecure and generally shouldn't be used any more, but 6 // they are still supported. 7 'protocols': [ 'git', 'http', 'git+ssh', 'git+https', 'ssh', 'https' ], 8 'domain': 'github.com', 9 'treepath': 'tree', 10 'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{committish}/{path}', 11 'bugstemplate': 'https://{domain}/{user}/{project}/issues', 12 'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#committish}', 13 'tarballtemplate': 'https://codeload.{domain}/{user}/{project}/tar.gz/{committish}' 14 }, 15 bitbucket: { 16 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ], 17 'domain': 'bitbucket.org', 18 'treepath': 'src', 19 'tarballtemplate': 'https://{domain}/{user}/{project}/get/{committish}.tar.gz' 20 }, 21 gitlab: { 22 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ], 23 'domain': 'gitlab.com', 24 'treepath': 'tree', 25 'bugstemplate': 'https://{domain}/{user}/{project}/issues', 26 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{projectPath}.git{#committish}', 27 'tarballtemplate': 'https://{domain}/{user}/{project}/repository/archive.tar.gz?ref={committish}', 28 'pathmatch': /^[/]([^/]+)[/]((?!.*(\/-\/|\/repository\/archive\.tar\.gz\?=.*|\/repository\/[^/]+\/archive.tar.gz$)).*?)(?:[.]git|[/])?$/ 29 }, 30 gist: { 31 'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ], 32 'domain': 'gist.github.com', 33 'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]{32,})(?:[.]git)?$/, 34 'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/committish}/{path}', 35 'bugstemplate': 'https://{domain}/{project}', 36 'gittemplate': 'git://{domain}/{project}.git{#committish}', 37 'sshtemplate': 'git@{domain}:/{project}.git{#committish}', 38 'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#committish}', 39 'browsetemplate': 'https://{domain}/{project}{/committish}', 40 'browsefiletemplate': 'https://{domain}/{project}{/committish}{#path}', 41 'docstemplate': 'https://{domain}/{project}{/committish}', 42 'httpstemplate': 'git+https://{domain}/{project}.git{#committish}', 43 'shortcuttemplate': '{type}:{project}{#committish}', 44 'pathtemplate': '{project}{#committish}', 45 'tarballtemplate': 'https://codeload.github.com/gist/{project}/tar.gz/{committish}', 46 'hashformat': function (fragment) { 47 return 'file-' + formatHashFragment(fragment) 48 } 49 } 50} 51 52var gitHostDefaults = { 53 'sshtemplate': 'git@{domain}:{user}/{project}.git{#committish}', 54 'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#committish}', 55 'browsetemplate': 'https://{domain}/{user}/{project}{/tree/committish}', 56 'browsefiletemplate': 'https://{domain}/{user}/{project}/{treepath}/{committish}/{path}{#fragment}', 57 'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#readme', 58 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#committish}', 59 'filetemplate': 'https://{domain}/{user}/{project}/raw/{committish}/{path}', 60 'shortcuttemplate': '{type}:{user}/{project}{#committish}', 61 'pathtemplate': '{user}/{project}{#committish}', 62 'pathmatch': /^[/]([^/]+)[/]([^/]+?)(?:[.]git|[/])?$/, 63 'hashformat': formatHashFragment 64} 65 66Object.keys(gitHosts).forEach(function (name) { 67 Object.keys(gitHostDefaults).forEach(function (key) { 68 if (gitHosts[name][key]) return 69 gitHosts[name][key] = gitHostDefaults[key] 70 }) 71 gitHosts[name].protocols_re = RegExp('^(' + 72 gitHosts[name].protocols.map(function (protocol) { 73 return protocol.replace(/([\\+*{}()[\]$^|])/g, '\\$1') 74 }).join('|') + '):$') 75}) 76 77function formatHashFragment (fragment) { 78 return fragment.toLowerCase().replace(/^\W+|\/|\W+$/g, '').replace(/\W+/g, '-') 79} 80