Parse a github URL into an object.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your ❤️ and support.
Install with npm:
$ npm install --save parse-github-url
Why another GitHub URL parser library?
Seems like every lib I've found does too much, like both stringifying and parsing, or converts the URL from one format to another, only returns certain segments of the URL except for what I need, yields inconsistent results or has poor coverage.
var gh = require('parse-github-url');
gh('https://github.com/jonschlinkert/micromatch');
Results in:
{
"owner": "jonschlinkert",
"name": "micromatch",
"repo": "jonschlinkert/micromatch",
"branch": "master"
}
Generated results from test fixtures:
// assemble/verb#1.2.3
Url {
protocol: null,
slashes: null,
auth: null,
host: 'github.com',
port: null,
hostname: null,
hash: '#1.2.3',
search: null,
query: null,
pathname: 'assemble/verb',
path: 'assemble/verb',
href: 'assemble/verb#1.2.3',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: '1.2.3',
repository: 'assemble/verb' }
// assemble/verb#branch
Url {
protocol: null,
slashes: null,
auth: null,
host: 'github.com',
port: null,
hostname: null,
hash: '#branch',
search: null,
query: null,
pathname: 'assemble/verb',
path: 'assemble/verb',
href: 'assemble/verb#branch',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'branch',
repository: 'assemble/verb' }
// assemble/verb
Url {
protocol: null,
slashes: null,
auth: null,
host: 'github.com',
port: null,
hostname: null,
hash: null,
search: null,
query: null,
pathname: 'assemble/verb',
path: 'assemble/verb',
href: 'assemble/verb',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// git+https://github.com/assemble/verb.git
Url {
protocol: 'git+https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'git+https://github.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// git+ssh://github.com/assemble/verb.git
Url {
protocol: 'git+ssh:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'git+ssh://github.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// git://gh.pages.com/assemble/verb.git
Url {
protocol: 'git:',
slashes: true,
auth: null,
host: 'gh.pages.com',
port: null,
hostname: 'gh.pages.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'git://gh.pages.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// git://github.assemble.com/assemble/verb.git
Url {
protocol: 'git:',
slashes: true,
auth: null,
host: 'github.assemble.com',
port: null,
hostname: 'github.assemble.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'git://github.assemble.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// git://github.assemble.two.com/assemble/verb.git
Url {
protocol: 'git:',
slashes: true,
auth: null,
host: 'github.assemble.two.com',
port: null,
hostname: 'github.assemble.two.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'git://github.assemble.two.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// git://github.com/assemble/verb
Url {
protocol: 'git:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb',
path: 'assemble/verb',
href: 'git://github.com/assemble/verb',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// git://github.com/assemble/verb.git
Url {
protocol: 'git:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'git://github.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// [email protected]:assemble/verb.git
Url {
protocol: null,
slashes: null,
auth: null,
host: 'gh.pages.com',
port: null,
hostname: null,
hash: null,
search: null,
query: null,
pathname: '[email protected]:assemble/verb.git',
path: '[email protected]:assemble/verb.git',
href: '[email protected]:assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// [email protected]:assemble/verb.git#1.2.3
Url {
protocol: null,
slashes: null,
auth: null,
host: 'github.com',
port: null,
hostname: null,
hash: '#1.2.3',
search: null,
query: null,
pathname: '[email protected]:assemble/verb.git',
path: '[email protected]:assemble/verb.git',
href: '[email protected]:assemble/verb.git#1.2.3',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: '1.2.3',
repository: 'assemble/verb' }
// [email protected]:assemble/verb.git#v1.2.3
Url {
protocol: null,
slashes: null,
auth: null,
host: 'github.com',
port: null,
hostname: null,
hash: '#v1.2.3',
search: null,
query: null,
pathname: '[email protected]:assemble/verb.git',
path: '[email protected]:assemble/verb.git',
href: '[email protected]:assemble/verb.git#v1.2.3',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'v1.2.3',
repository: 'assemble/verb' }
// [email protected]:assemble/verb.git
Url {
protocol: null,
slashes: null,
auth: null,
host: 'github.com',
port: null,
hostname: null,
hash: null,
search: null,
query: null,
pathname: '[email protected]:assemble/verb.git',
path: '[email protected]:assemble/verb.git',
href: '[email protected]:assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// github:assemble/verb
Url {
protocol: 'github:',
slashes: null,
auth: null,
host: 'assemble',
port: null,
hostname: 'assemble',
hash: null,
search: null,
query: null,
pathname: 'verb',
path: 'verb',
href: 'github:assemble/verb',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// http://github.com/assemble
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble',
path: 'assemble',
href: 'http://github.com/assemble',
filepath: null,
owner: 'assemble',
name: null,
repo: null,
branch: 'master',
repository: null }
// http://github.com/assemble/verb
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb',
path: 'assemble/verb',
href: 'http://github.com/assemble/verb',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// http://github.com/assemble/verb.git
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'http://github.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// http://github.com/assemble/verb/tree
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/tree',
path: 'assemble/verb/tree',
href: 'http://github.com/assemble/verb/tree',
filepath: null,
branch: 'tree',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
repository: 'assemble/verb' }
// http://github.com/assemble/verb/tree/master
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/tree/master',
path: 'assemble/verb/tree/master',
href: 'http://github.com/assemble/verb/tree/master',
filepath: null,
branch: 'master',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
repository: 'assemble/verb' }
// http://github.com/assemble/verb/tree/master/foo/bar
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/tree/master/foo/bar',
path: 'assemble/verb/tree/master/foo/bar',
href: 'http://github.com/assemble/verb/tree/master/foo/bar',
filepath: null,
branch: 'master',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
repository: 'assemble/verb' }
// https://assemble.github.com/assemble/verb/somefile.tar.gz
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'assemble.github.com',
port: null,
hostname: 'assemble.github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/somefile.tar.gz',
path: 'assemble/verb/somefile.tar.gz',
href: 'https://assemble.github.com/assemble/verb/somefile.tar.gz',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'somefile.tar.gz',
repository: 'assemble/verb' }
// https://assemble.github.com/assemble/verb/somefile.zip
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'assemble.github.com',
port: null,
hostname: 'assemble.github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/somefile.zip',
path: 'assemble/verb/somefile.zip',
href: 'https://assemble.github.com/assemble/verb/somefile.zip',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'somefile.zip',
repository: 'assemble/verb' }
// https://[email protected]/assemble/verb.git
Url {
protocol: 'https:',
slashes: true,
auth: 'assemble',
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'https://[email protected]/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// https://gh.pages.com/assemble/verb.git
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'gh.pages.com',
port: null,
hostname: 'gh.pages.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'https://gh.pages.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// https://github.com/assemble/verb
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb',
path: 'assemble/verb',
href: 'https://github.com/assemble/verb',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// https://github.com/assemble/verb.git
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb.git',
path: 'assemble/verb.git',
href: 'https://github.com/assemble/verb.git',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'master',
repository: 'assemble/verb' }
// https://github.com/assemble/verb/blob/1.2.3/README.md
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/blob/1.2.3/README.md',
path: 'assemble/verb/blob/1.2.3/README.md',
href: 'https://github.com/assemble/verb/blob/1.2.3/README.md',
filepath: 'README.md',
branch: '1.2.3',
blob: '1.2.3/README.md',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
repository: 'assemble/verb' }
// https://github.com/assemble/verb/blob/249b21a86400b38969cee3d5df6d2edf8813c137/README.md
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/blob/249b21a86400b38969cee3d5df6d2edf8813c137/README.md',
path: 'assemble/verb/blob/249b21a86400b38969cee3d5df6d2edf8813c137/README.md',
href: 'https://github.com/assemble/verb/blob/249b21a86400b38969cee3d5df6d2edf8813c137/README.md',
filepath: '249b21a86400b38969cee3d5df6d2edf8813c137/README.md',
blob: '249b21a86400b38969cee3d5df6d2edf8813c137/README.md',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'blob',
repository: 'assemble/verb' }
// https://github.com/assemble/verb/blob/master/assemble/index.js
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/blob/master/assemble/index.js',
path: 'assemble/verb/blob/master/assemble/index.js',
href: 'https://github.com/assemble/verb/blob/master/assemble/index.js',
filepath: 'assemble/index.js',
branch: 'master',
blob: 'master/assemble/index.js',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
repository: 'assemble/verb' }
// https://github.com/assemble/verb/tree/1.2.3
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/tree/1.2.3',
path: 'assemble/verb/tree/1.2.3',
href: 'https://github.com/assemble/verb/tree/1.2.3',
filepath: null,
branch: '1.2.3',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
repository: 'assemble/verb' }
// https://github.com/assemble/verb/tree/feature/1.2.3
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'assemble/verb/tree/feature/1.2.3',
path: 'assemble/verb/tree/feature/1.2.3',
href: 'https://github.com/assemble/verb/tree/feature/1.2.3',
filepath: null,
branch: 'feature',
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
repository: 'assemble/verb' }
// https://github.com/repos/assemble/verb/tarball
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'repos/assemble/verb/tarball',
path: 'assemble/verb/tarball',
href: 'https://github.com/repos/assemble/verb/tarball',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'tarball',
repository: 'assemble/verb' }
// https://github.com/repos/assemble/verb/zipball
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'github.com',
port: null,
hostname: 'github.com',
hash: null,
search: null,
query: null,
pathname: 'repos/assemble/verb/zipball',
path: 'assemble/verb/zipball',
href: 'https://github.com/repos/assemble/verb/zipball',
filepath: null,
owner: 'assemble',
name: 'verb',
repo: 'assemble/verb',
branch: 'zipball',
repository: 'assemble/verb' }
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Running Tests
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
$ npm install && npm test
You might also be interested in these projects:
- git-add-remote: API for adding git remotes. | homepage
- git-branch: Get the current branch for a local git repository. | homepage
- git-repo-name: Get the repository name from the git remote origin URL. | homepage
- git-username: Get the username from a git remote origin URL. | homepage
- is-git-url: Regex to validate that a URL is a git url. | homepage