Software Engineering :: Programming :: Languages :: JavaScript :: Library :: uri-templates :: example :: URI Template Routes
⪼ Made with 💜 by Polyglot.
- Software Engineering :: Networking :: HTTP :: URI :: Template
- Software Engineering :: Programming :: Languages :: JavaScript :: Library :: wroute
> Array.from('/users/{id}/comments/{commentId}'.matchAll(/{(?<parameterName>[0-0a-zA-Z]+)}/g))
[
[
'{id}',
'id',
index: 7,
input: '/users/{id}/comments/{commentId}',
groups: [Object: null prototype] { parameterName: 'id' }
],
[
'{commentId}',
'commentId',
index: 21,
input: '/users/{id}/comments/{commentId}',
groups: [Object: null prototype] { parameterName: 'commentId' }
]
]
Generate regular expression from URI Template to match URI Template (i.e. URI Template route as object key)
RegExp('/users/{id}/comments/{commentId}'.replace(/{(?<name>[0-9a-zA-Z]+)}/g, '{(?<$<name>>[0-9a-zA-Z]+)}'))
/\/users\/{(?<id>[0-9a-zA-Z]+)}\/comments\/{(?<commentId>[0-9a-zA-Z]+)}/
> const uriTemplate = require('uri-templates')
> const match = (requestUrlPathComponent) => Object.keys(routes).filter((templateString) => requestUrlPathComponent === templateString || uriTemplate(templateString).varNames.length && uriTemplate(templateString).varNames.every((parameterName) => parameterName in (uriTemplate(templateString).fromUri(requestUrlPathComponent) || {})))
> let routes = {}
undefined
> routes['/users/{userId}/comments/{commentId}'] = { id: 1 }
{ id: 1 }
> routes['/users/{id}'] = { id: 2 }
{ id: 2 }
> routes['/users'] = { id: 3 }
{ id: 3 }
> routes['/search/{term}/{?q,lang}'] = { id: 4 }
{ id: 4 }
> routes
{
'/users/{userId}/comments/{commentId}': { id: 1 },
'/users/{id}': { id: 2 },
'/users': { id: 3 },
'/search/{term}/{?q,lang}': { id: 4 }
}
> Object.keys(routes).filter((templateString) => uriTemplate(templateString).varNames.every((parameterName) => parameterName in (uriTemplate(templateString).fromUri('/search/proghorn/') || {})))
> Object.keys(routes).filter((templateString) => uriTemplate(templateString).varNames.every((parameterName) => parameterName in (uriTemplate(templateString).fromUri('/users/123') || {})))
[ '/users/{id}' ]
> Object.keys(routes).filter((templateString) => uriTemplate(templateString).varNames.length && uriTemplate(templateString).varNames.every((parameterName) => parameterName in (uriTemplate(templateString).fromUri('/users/123') || {})))
> Object.keys(routes).filter((templateString) => templateString === '/users' || uriTemplate(templateString).varNames.length && uriTemplate(templateString).varNames.every((parameterName) => parameterName in (uriTemplate(templateString).fromUri('/users') || {})))
> Object.keys(routes).filter((templateString) => '/users' === templateString || uriTemplate(templateString).varNames.length && uriTemplate(templateString).varNames.every((parameterName) => parameterName in (uriTemplate(templateString).fromUri('/users') || {})))
[ '/users' ]
const requested = (endpoint) => {
return Object.keys(routes).filter((templateString) => templateString === endpoint || uriTemplate(templateString).varNames.length && uriTemplate(templateString).varNames.every((parameterName) => parameterName in (uriTemplate(templateString).fromUri(endpoint) || {}))).pop() || ''
}