@hyperjump/uri-template
v0.3.0
Published
An RFC-6570 URI Template implementation
Downloads
59,107
Maintainers
Readme
URI Template
This is an implementation of RFC 6570 - URI Template.
- Supports Level 4
- Separate parse and expand steps
- More efficient expansion
- Introspect a template
- Validate that a template is correct without expanding
- Partially expand template with incomplete data
- Detailed error messaging
Installation
npm install @hyperjump/uri-template
Usage
const UriTemplate = require("@hyperjump/uri-template");
// Parse and expand in one step
UriTemplate.expand("/foo{?foo,bar}", { foo: "aaa", bar: "bbb" }); // => /foo?foo=aaa&bar=bbb
// Parse a URI Template
const template = UriTemplate.parse("/foo{?foo,bar}");
// Expand a URI Template from the pre-parsed template
UriTemplate.expand(template, { foo: "aaa", bar: "bbb" }); // => /foo?foo=aaa&bar=bbb
UriTemplate.expand(template, { foo: "ccc", bar: "ddd" }); // => /foo?foo=ccc&bar=ddd
// Convert a parsed template back into a string
UriTemplate.stringify(template); // => /foo{?foo,bar}
// Partially expand template with incomplete data
const template = UriTemplate.expandPartial("/foo/{foo}{?bar}", { foo: "aaa" });
UriTemplate.stringify(template); // => /foo/aaa{?bar}
UriTemplate.expand(template, { bar: "bbb" }); // => /foo/aaa?bar=bbb
API
parse: (string) => Template
Parse a URI Template
expand: (Template | string, Object) => string
Expand a URI template. The first argument can either be a URI Template AST (the result of
parse
) or a URI Template string.expandPartial: (Template | string, Object) => Template
Partially expand a URI template. This function will expand the expressions using the data passed, but it will skip any expressions it doesn't have defined data for. The first argument can either be a URI Template AST (the result of
parse
) or a URI Template string. The result is a URI Template AST.stringify: (Template) => string
Convert a URI Template AST back into a URI Template string
Template: array
An AST representing URI Template
Contributing
Tests
Run the tests
npm test
Run the tests with a continuous test runner
npm test -- --watch