# @polka/url

> Super fast, memoized `req.url` parser

Latest version **0.5.0** (published 2018-09-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install @polka/url
pnpm add @polka/url
yarn add @polka/url
bun add @polka/url
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.5.0 |
| Published | 2018-09-18 |
| First published | 2018-09-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 3.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5591 |
| Author | Luke Edwards |
| Maintainers | lukeed |

## Links

- npm: https://www.npmjs.com/package/@polka/url
- Repository: https://github.com/lukeed/polka
- npm.io page: https://npm.io/package/@polka/url

## Recent versions

- 0.5.0 (latest) — 2018-09-18
- 1.0.0-next.29 (next) — 2025-04-09
- 1.0.0-next.28 — 2024-09-19
- 1.0.0-next.27 — 2024-09-18
- 1.0.0-next.25 — 2024-03-07
- 1.0.0-next.24 — 2023-12-04
- 1.0.0-next.23 — 2023-09-06
- 1.0.0-next.21 — 2021-10-01
- 1.0.0-next.20 — 2021-08-27
- 1.0.0-next.19 — 2021-08-26
- 1.0.0-next.18 — 2021-08-26
- 1.0.0-next.17 — 2021-08-14
- 1.0.0-next.15 — 2021-05-24
- 1.0.0-next.12 — 2021-03-28
- 1.0.0-next.11 — 2020-01-13
- … 5 more at https://npm.io/package/@polka/url/versions

## README

# @polka/url [![npm](https://badgen.now.sh/npm/v/@polka/url)](https://npmjs.org/package/@polka/url)

> Super fast, memoized `req.url` parser; _not_ limited to [Polka][polka]!

Parses the `url` from a [`IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) request. The returned object will always only contain the following keys: `search`, `query`, `pathname`, `path`, `href`, and `_raw`.

> **Note:** This library does not process `protocol`, `hostname`, `port`, etc.<br>This is because the incoming `req.url` value only begins with the path information.

Parsed requests will be mutated with a `_parsedUrl` key, containing the returned output. This is used for future memoization, so as to avoid parsing the same `url` value multiple times.

## Install

```
$ npm install --save @polka/url
```

## Usage

```js
const parse = require('@polka/url');

let req = { url: '/foo/bar?fizz=buzz' };
let foo = parse(req);
//=> { search: '?fizz=buzz',
//=>   query: 'fizz=buzz',
//=>   pathname: '/foo/bar',
//=>   path: '/foo/bar?fizz=buzz',
//=>   href: '/foo/bar?fizz=buzz',
//=>   _raw: '/foo/bar?fizz=buzz' }

// Attaches result for future memoization
assert.deepEqual(foo, req._parsedUrl); //=> true
```

## API

### url(req)
Returns: `Object` or `undefined`

> **Important:** The `req` must have a `url` key, otherwise `undefined` will be returned.<br>If no input is provided at all, a `TypeError` will be thrown.

#### req
Type: `IncomingMessage` or `Object`

The incoming HTTP request (`req`) or a plain `Object` with a `url` key.

> **Note:** In Node.js servers, the [`req.url`](https://nodejs.org/api/http.html#http_message_url) begins with a pathname & does not include a `hash`.


## Benchmarks

> Running the `parseurl` benchmark suite on Node 10.9.0

```
Parsing: "/foo/bar?user=tj&pet=fluffy"
  nativeurl  x  3,496,593 ops/sec ±0.78% (194 runs sampled)
  parseurl   x  5,702,515 ops/sec ±0.59% (194 runs sampled)
  @polka/url x 11,510,281 ops/sec ±1.93% (192 runs sampled)

REPEAT: "/foo/bar?user=tj&pet=fluffy"
  nativeurl  x  3,344,884 ops/sec ±0.13% (191 runs sampled)
  parseurl   x 20,386,848 ops/sec ±0.22% (192 runs sampled)
  @polka/url x 21,088,923 ops/sec ±0.58% (191 runs sampled)

Parsing: "/foo/bar"
  nativeurl  x  9,808,119 ops/sec ±0.51% (190 runs sampled)
  parseurl   x 26,186,627 ops/sec ±0.16% (195 runs sampled)
  @polka/url x 43,946,765 ops/sec ±0.55% (194 runs sampled)

Parsing: "/"
  nativeurl  x 15,698,746 ops/sec ±0.79% (192 runs sampled)
  parseurl   x 36,861,339 ops/sec ±0.19% (195 runs sampled)
  @polka/url x 48,295,119 ops/sec ±0.51% (194 runs sampled)
```


## Support

Any issues or questions can be sent to the [Polka][polka] repository.<br>However, please specify that your inquiry is about `@polka/url` specifically.


## License

MIT © [Luke Edwards](https://lukeed.com)

[polka]: https://github.com/lukeed/polka

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