lil-uri
Version:
Tiny URI parser and builder with chainable API
174 lines (127 loc) • 3.19 kB
Markdown
# [lil](http://lil-js.github.io)'-uri [][travis]
<img align="center" height="150" src="http://lil-js.github.io/img/liljs-logo.png" />
URI parser and builder with semantic API
<table>
<tr>
<td><b>Name</b></td><td>uri</td>
</tr>
<tr>
<td><b>Version</b></td><td>0.2.2</td>
</tr>
<tr>
<td><b>Size</b></td><td>3 KB / 1 KB (gzipped)</td>
</tr>
<tr>
<td><b>Environment</b></td><td>Node, Browser</td>
</tr>
</table>
## Features
- URI parsing
- URI builder
- RFC 3986 compliant
- Full and partial URI support
- Automatic query mapping values
- Support for special characters decoding
## Installation
#### Node.js
```bash
npm install lil-uri
```
#### Browser
Via [Bower](http://bower.io)
```bash
bower install lil-uri
```
Via [Component](https://github.com/componentjs/component)
```bash
component install lil-js/uri
```
Or loading the script remotely
```html
<script src="//cdn.rawgit.com/lil-js/uri/0.2.2/uri.js"></script>
```
### Environments
Cross-browser support guaranteed running tests in [BrowserStack](http://browserstack.com/)
- Node.js
- Chrome >= 5
- Firefox >= 3
- Safari >= 5
- Opera >= 10
- IE >= 9
### Usage
You could fetch de module via `require()` if it's available.
Otherwise, global fallback will be used, exposed via `lil.uri`
```js
var uri = require('lil-uri')
```
##### Parser
```js
var url = uri('http://user:pass@example.com:8080/bar/foo.xml?foo=bar&hello=world&#hash=1')
url.protocol() // -> http
url.host() // -> example.com:8080
url.hostname() // -> example.com
url.port() // -> 8080
url.auth() // -> { user: 'user', password: 'pass' }
url.user() // -> user
url.password() // -> pass
url.path() // -> /bar/foo.xml
url.search() // -> foo=bar&hello=world
url.query() // -> { foo: 'bar', hello: 'world' }
url.hash() // -> hash=1
```
##### Builder
```js
uri()
.protocol('https')
.host('example.com')
.port('8080')
.auth('user:pass')
.path('/bar/foo.xml')
.query({ foo: 'bar', hello: 'world' })
.hash('hash=1')
.build() // -> http://@example.com:8080/bar/foo.xml?foo=bar&hello=world&#frament=1
```
## API
#### uri([ uri ])
#### uri#protocol([ protocol ])
#### uri#host([ host ])
#### uri#hostname([ hostname ])
#### uri#port([ port ])
#### uri#auth([ auth ])
#### uri#user([ user ])
#### uri#password([ password ])
#### uri#path([ path ])
#### uri#search([ search ])
#### uri#query([ query ])
#### uri#hash([ fragment ])
#### uri#build()
#### uri#parse(uri)
#### uri.isURL(str)
#### uri.is(url)
#### uri.URI(uri)
#### uri.VERSION
## Contributing
Wanna help? Cool! It will be appreciated :)
You must add new test cases for any new feature or refactor you do,
always following the same design/code patterns that already exist
### Development
Only [node.js](http://nodejs.org) is required for development
Clone the repository
```bash
$ git clone https://github.com/lil-js/uri.git && cd uri
```
Install dependencies
```bash
$ npm install
```
Generate browser bundle source
```bash
$ make browser
```
Run tests
```bash
$ make test
```
## License
[MIT](http://opensource.org/licenses/MIT) © Tomas Aparicio
[travis]: http://travis-ci.org/lil-js/uri