UNPKG

1.28 kBJavaScriptView Raw
1var template = require('string-template');
2
3module.exports = {
4 tokenize: tokenize,
5 replace: replace
6}
7
8function tokenize(uri) {
9 if(typeof uri !== 'string') {
10 return [];
11 }
12
13 var tokens = {};
14 var currentToken = [];
15 var isInsideToken = false;
16 var uri = uri.split('');
17
18 for(var i = 0; i < uri.length; i++) {
19 var c = uri[i];
20
21 if(uri[i] === '{') {
22 if(isInsideToken === true) {
23 break;
24 }
25 isInsideToken = true;
26 continue;
27 }
28 if(uri[i] === '}') {
29 if(isInsideToken === false) {
30 break;
31 }
32
33 if(currentToken.length) {
34 var isRequired = currentToken[0] !== '?';
35 currentToken = isRequired ? currentToken.join('') : currentToken.slice(1).join('');
36 tokens[currentToken] = isRequired;
37 currentToken = [];
38 }
39
40 isInsideToken = false;
41 continue;
42 }
43 if(isInsideToken) {
44 currentToken.push(c);
45 }
46 }
47
48 if(isInsideToken === true) {
49 return {};
50 }
51
52 return tokens;
53}
54
55function replace(uri, props) {
56 var tokens = tokenize(uri);
57
58 var requiredFields = Object.keys(tokens).filter(function(propName) {
59 var token = tokens[propName];
60 return token === true;
61 });
62
63 return requiredFields.some(function(field) {
64 return !!props[field];
65 });
66}
\No newline at end of file