ES6 template literal tag to encode URI components
npm install uri-tag!MIT



A template literal tag to encode URI components. Allows you to to build a URI string, where any expressions will be safely encoded.
``js
import uri from 'uri-tag';
const name = getName(); // Arbitrary user input
const status = getStatus(); // Arbitrary user input
const myUri = urihttps://example.com/api/users?name=${name}&status=${status};`
Uses RFC 3986 compliant URI encoding to encode any unsafe character sequences to their escaped representations:
`js/api/search?q=${query}
const query = 'query with special chars ! ? foo=bar %';
const endpoint = uri;
// endpoint === '/api/search?q=query%20with%20special%20chars%20%21%20%3F%20foo%3Dbar%20%25'
`
To bypass encoding for a specific component, you can use uri.raw:
`js${uri.raw(apiBase)}/users?name=${query}
const apiBase = 'https://example.com/api/v1';
const query = 'foo/bar';
const endpoint = uri;
// endpoint === 'https://example.com/api/v1/users?name=foo%2Fbar'
`
uri.raw uses a unique symbol under the hood, so that only code with access to the uri-tag module can pass in a raw template variable. Any user input from an external source (so, strings, JSON objects, etc.) will not be able to access this symbol.
This package includes definitions for TypeScript.
* encody
* encodeuricomponent-tag
* url-escape-tag (Relies on NodeJS querystring` module, requires a polyfill for browser usage.)
* url-tagged-template (Different goals, parses URLs to their components rather than returning a URL string.)