# jsuri

> Uri and query string manipulation

Latest version **1.3.1** (published 2015-04-15) · 0 weekly downloads

## Install

```sh
npm install jsuri
pnpm add jsuri
yarn add jsuri
bun add jsuri
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.3.1 |
| Published | 2015-04-15 |
| First published | 2012-09-24 |
| Weekly downloads | 0 |
| TypeScript types | separate (@types/jsuri) |
| Module format | CommonJS |
| Node | * |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 377 |
| Author | Derek Watson |
| Maintainers | dcw_ca, jamesmgreene |
| Keywords | uri, url, query, path |

## Links

- npm: https://www.npmjs.com/package/jsuri
- Repository: https://github.com/derek-watson/jsUri
- Issues: https://github.com/derek-watson/jsUri/issues
- npm.io page: https://npm.io/package/jsuri

## Alternatives

- [base64url](https://npm.io/package/base64url.md) — 6.1M weekly downloads
- [get-installed-path](https://npm.io/package/get-installed-path.md) — 502.9K weekly downloads
- [@uppy/url](https://npm.io/package/@uppy/url.md) — 185.8K weekly downloads
- [@d3fc/d3fc-shape](https://npm.io/package/@d3fc/d3fc-shape.md) — 16.2K weekly downloads
- [localizer](https://npm.io/package/localizer.md) — 226 weekly downloads

## Recent versions

- 1.3.1 (latest) — 2015-04-15
- 1.3.0 — 2014-12-18
- 1.3.0-beta.1 — 2013-12-02
- 1.2.2 — 2012-09-24

## README

# jsUri

URI parsing and manipulation for node.js and the browser.

[![Build Status](https://travis-ci.org/derek-watson/jsUri.png)](https://travis-ci.org/derek-watson/jsUri)

[![NPM](https://nodei.co/npm/jsuri.png)](https://nodei.co/npm/jsuri/)

[![spm package](http://spmjs.io/badge/jsuri)](http://spmjs.io/package/jsuri)

Pass any URL into the constructor:

```js
var uri = new Uri('http://user:pass@www.test.com:81/index.html?q=books#fragment')
```

Use property methods to get at the various parts:

```js
uri.protocol()    // http
uri.userInfo()    // user:pass
uri.host()        // www.test.com
uri.port()        // 81
uri.path()        // /index.html
uri.query()       // q=books
uri.anchor()      // fragment
```

Property methods accept an optional value to set:

```js
uri.protocol('https')
uri.toString()    // https://user:pass@www.test.com:81/index.html?q=books#fragment

uri.host('mydomain.com')
uri.toString()    // https://user:pass@mydomain.com:81/index.html?q=books#fragment
```

Chainable setter methods help you compose strings:

```js
new Uri()
    .setPath('/archives/1979/')
    .setQuery('?page=1')                   // /archives/1979?page=1

new Uri()
    .setPath('/index.html')
    .setAnchor('content')
    .setHost('www.test.com')
    .setPort(8080)
    .setUserInfo('username:password')
    .setProtocol('https')
    .setQuery('this=that&some=thing')      // https://username:password@www.test.com:8080/index.html?this=that&some=thing#content

new Uri('http://www.test.com')
    .setHost('www.yahoo.com')
    .setProtocol('https')                  // https://www.yahoo.com
```

## Query param methods

Returns the first query param value for the key:

```js
new Uri('?cat=1&cat=2&cat=3').getQueryParamValue('cat')             // 1
```

Returns all query param values for the given key:

```js
new Uri('?cat=1&cat=2&cat=3').getQueryParamValues('cat')            // [1, 2, 3]
```

Internally, query key/value pairs are stored as a series of two-value arrays in the Query object:

```js
new Uri('?a=b&c=d').query().params                  // [ ['a', 'b'], ['c', 'd']]
```

Add query param values:

```js
new Uri().addQueryParam('q', 'books')               // ?q=books

new Uri('http://www.github.com')
    .addQueryParam('testing', '123')
    .addQueryParam('one', 1)                        // http://www.github.com/?testing=123&one=1

// insert param at index 0
new Uri('?b=2&c=3&d=4').addQueryParam('a', '1', 0)  // ?a=1&b=2&c=3&d=4
```

Replace every query string parameter named `key` with `newVal`:

```js
new Uri().replaceQueryParam('page', 2)     // ?page=2

new Uri('?a=1&b=2&c=3')
    .replaceQueryParam('a', 'eh')          // ?a=eh&b=2&c=3

new Uri('?a=1&b=2&c=3&c=4&c=5&c=6')
    .replaceQueryParam('c', 'five', '5')   // ?a=1&b=2&c=3&c=4&c=five&c=6
```

Removes instances of query parameters named `key`:

```js
new Uri('?a=1&b=2&c=3')
    .deleteQueryParam('a')                 // ?b=2&c=3

new Uri('test.com?a=1&b=2&c=3&a=eh')
    .deleteQueryParam('a', 'eh')           // test.com/?a=1&b=2&c=3
```

Test for the existence of query parameters named `key`:

```js
new Uri('?a=1&b=2&c=3')
    .hasQueryParam('a')                    // true

new Uri('?a=1&b=2&c=3')
    .hasQueryParam('d')                    // false
```

Create an identical URI object with no shared state:

```js
var baseUri = new Uri('http://localhost/')

baseUri.clone().setProtocol('https')   // https://localhost/
baseUri                                // http://localhost/
```

This project incorporates the [parseUri](http://blog.stevenlevithan.com/archives/parseuri) regular expression by Steven Levithan.

---
_Source: https://npm.io/package/jsuri · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
