0.2.0 • Published 9 years ago

uri-templates v0.2.0

Weekly downloads
142,370
License
http://geraintluf...
Repository
github
Last release
9 years ago

uri-templates

URI Templates (RFC6570) in JavaScript, including de-substitution.

It is tested against the official test suite, 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:

var uriTemplates = require('uri-templates');
var template1 = uriTemplates("/date/{colour}/{shape}/");

In browser:

var template2 = new UriTemplate("/prefix/{?params*}");

Substitution using an object

// "/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

// "/categories/example_colour/example_shape/"
var uri1b = template1.fill(function (varName) {
	return "example_" + varName;
});

Guess variables from URI ("de-substitution")

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:

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:

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

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. Anybody can modify or re-license it for any purpose, without restriction.

@fabianscheidt/ngx-hal-clientbookingbug-angularbookingbug-angular-msng-hal-bantics@infinitebrahmanuniverse/nolb-uri@everything-registry/sub-chunk-3023webdaswaggest-test@commonshost/configuration@commonshost/server@commonshost/shortjson-ld-macrosjson-schema-requestjalantradingchain-laboratory@asyncapi/glee@asyncapi/gleequore@cloudflare/json-hyper-schema@abstracter/atomic-release@contentgrid/uri-templatezotero-pluginw20ts-herokuuse-react-router-domuri-template-route@fmvilas/gleequore@hippiemedia/agent@hydra-cg/heracles.ts@flef/ngx-hal-client@gallolabs/remote-ee@gisatcz/ptr-deprecated@gisatcz/ptr-maps@mcma/api@jose.conde/submarine@jupyterlab/dataregistry@moqada/simple-api-client-generator@optics/hal-client@optics/prismmocha-request-describermfetchocto-releaseroads-apirdf-parser-csvwrelayernock-rest-apinock-uri-templateng2-halngx-halpistol-jsphnodelayerphlayerplannerjspostmailerpokewraprestwrapperresponse-openapi-validatorreact-omni-linkgithub-fetchglamahyperactivegtfs2lcgtfsrt2lchallyhbnodelayerhal-rest-clienthurtleisurelink-hub-clientmercury-sdk-jsmercuremcma-api@w20/w20@windyroad/fetch-link@windyroad/ofetch-link@webda/runtime@webda/core@zazuko/rdf-parser-csvwangular-model-factory-2angular-hypermediaazuritearaneachartmogul-nodebeacon-linksbasalplattenbeeslybetter-hal-rest-clientbookingbug-core-jsbookingbug-studiobooticbootic_client_jsdohnutelement-routingelectrostaticember-cli-uri-templates-shimexecutable-openapi-parametersexecutable-openapi-middleware-path-parametersexecutable-openapi-middleware-query-parametersfeignjsfastmcpfortune-extended-json-apifortune-json-api
0.2.0

9 years ago

0.1.9

10 years ago

0.1.8

10 years ago

0.1.7

10 years ago

0.1.6

10 years ago

0.1.5

11 years ago

0.1.4

11 years ago

0.1.2

12 years ago

0.1.1

12 years ago

0.1.0

12 years ago