jai-server
Version:
Fast , simple and powerful web framework for creating REST APIs for your next project. RESTFul API server
38 lines (29 loc) • 1.12 kB
text/typescript
import { Params } from '../types/types';
// Pre-compile regular expressions
const CATCH_ROUTES_REGEX = /(\*)|(:([a-zA-Z_0-9$]+))/g;
const TRAILING_SLASH_REGEX = /\/$/;
const EMPTY_STRING = '';
function Matcher(q: string = '', url: string = '', fullMatch: boolean = false, strict: boolean = false): Params | boolean {
// Early return for exact match
if (q.indexOf(':') === -1 && q === url) return true;
const query = strict ? q : q.replace(TRAILING_SLASH_REGEX, EMPTY_STRING);
const params: Params = {};
const finalQuery = query.replace(CATCH_ROUTES_REGEX, (_, wildcard, __, param) => {
if (param) {
params[param] = EMPTY_STRING;
return '([^\\/]+)';
}
return wildcard ? '(?:(?:.)*)' : _;
});
const matchRegex = new RegExp(
`${fullMatch ? '^' : ''}${finalQuery}${strict ? '' : '\\/?'}${fullMatch ? '$' : ''}`
);
const matched = url.match(matchRegex);
if (!matched) return false;
const paramsKeys = Object.keys(params);
for (let i = 1; i < matched.length; i++) {
params[paramsKeys[i - 1] as string] = matched[i];
}
return params;
}
export default Matcher;