UNPKG

uri-template-router

Version:

Match a URI to a pattern in a collection of URI Templates

42 lines (38 loc) 930 B
'use strict'; // Get all the characters described by a charclass like [a-z0-9] function *range(str){ for(var i=0; i<str.length; i++){ const chr = str[i]; if(chr === '-'){ yield chr; }else if(str[i+1]==='-' && str[i+2]){ for(var j=str.charCodeAt(i), end=str.charCodeAt(i+2); j<=end; j++){ yield String.fromCharCode(j); } i += 2; }else{ yield chr; } } } function toRangeString(chars){ var str = ''; chars = chars.slice().sort(); for(var i=0; i<chars.length; i++){ if(chars[i].length !== 1) throw new Error('Invalid symbol size'); const startCode = chars[i].charCodeAt(); for(var j=0; i+j+1<chars.length && chars[i+j+1].charCodeAt() !== startCode+j+1; j++); if(j===0){ str += chars[i]; }else if(j===1){ str += chars[i] + chars[i+1]; }else{ str += chars[i] + '-' + chars[i+j]; } i += j; } return str; } function normalize(str){ return toRangeString([...range(str)]); }