# uri-templates

> URI Templates (RFC6570) including de-substitution

Latest version **0.2.0** (published 2016-05-29) · http://geraintluff.github.io/tv4/LICENSE.txt license · 0 weekly downloads

## Install

```sh
npm install uri-templates
pnpm add uri-templates
yarn add uri-templates
bun add uri-templates
```

## Health

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

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

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2016-05-29 |
| First published | 2013-08-10 |
| Weekly downloads | 0 |
| License | http://geraintluff.github.io/tv4/LICENSE.txt |
| TypeScript types | separate (@types/uri-templates) |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 142 |
| Author | Geraint Luff |
| Maintainers | geraintluff |
| Keywords | rfc6570, uri, template |

## Links

- npm: https://www.npmjs.com/package/uri-templates
- Repository: https://github.com/geraintluff/uri-templates
- Issues: https://github.com/geraintluff/uri-templates/issues
- npm.io page: https://npm.io/package/uri-templates

## Recent versions

- 0.2.0 (latest) — 2016-05-29
- 0.1.9 — 2015-10-02
- 0.1.8 — 2015-09-30
- 0.1.7 — 2015-04-07
- 0.1.6 — 2015-04-07
- 0.1.5 — 2014-06-04
- 0.1.4 — 2014-06-04
- 0.1.2 — 2013-09-24
- 0.1.1 — 2013-08-10
- 0.1.0 — 2013-08-10

## README

# uri-templates

URI Templates ([RFC6570](http://tools.ietf.org/html/rfc6570)) in JavaScript, including de-substitution.

It is tested against the [official test suite](https://github.com/uri-templates/uritemplate-test), including the extended tests.

The "de-substitution" extracts parameter values from URIs.  It is also tested against the official test suite (including extended tests).

## Creation

In Node:
```javascript
var uriTemplates = require('uri-templates');
var template1 = uriTemplates("/date/{colour}/{shape}/");
```

In browser:
```javascript
var template2 = new UriTemplate("/prefix/{?params*}");
```

## Substitution using an object
```javascript
// "/categories/green/round/"
var uri1 = template1.fill({colour: "green", shape: "round"});

// "/prefix/?a=A&b=B&c=C
var uri2 = template2.fillFromObject({
	params: {a: "A", b: "B", c: "C"}
});
```

## Substitution using a callback
```javascript
// "/categories/example_colour/example_shape/"
var uri1b = template1.fill(function (varName) {
	return "example_" + varName;
});
```

## Guess variables from URI ("de-substitution")

```javascript
var uri2b = "/prefix/?beep=boop&bleep=bloop";
var params = template2.fromUri(url2b);
/*
	{
		params: {
			beep: "boop",
			bleep: "bloop"
		}
	}
*/
```

While templates can be ambiguous (e.g. `"{var1}{var2}"`), it will still produce *something* that reconstructs into the original URI.

It can handle all the cases in the official test suite, including the extended tests:

```javascript
var template = uriTemplate("{/id*}{?fields,token}");

var values = template.fromUri("/person/albums?fields=id,name,picture&token=12345");
/*
{
	id: ["person", 'albums"],
	fields: ["id", "name", "picture"],
	token: "12345"
}
*/
```

### `strict` option

Sometimes, you might want a more exact match, instead of a best guess.  For example, this could be useful when using URI Templates for routing.

The `strict` option performs more checks, to see whether the URI being matched is plausible:

```javascript
var template = uriTemplate("/prefix/{value}/{suffix}");

// Matches, even though "foo/bar" contains a "/" which is not allowed
var looseMatch = template.fromUri('/prefix/foo/bar/suffix');
// Does not match
var strictMatch = template.fromUri('/prefix/foo/bar/suffix', {strict: true});

```

## Test URI

```javascript
var uri2b = "/prefix/?beep=boop&bleep=bloop";
var isMatch = template2.test(url2b); // === true
```

This returns a boolean, and takes the same options as `.fromUri()`.

## License

This project is released as [public-domain](http://geraintluff.github.io/tv4/LICENSE.txt).  Anybody can modify or re-license it for any purpose, without restriction.

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