reblend-routing
Version:
Reblend route pattern matcher
76 lines (75 loc) • 1.77 kB
JavaScript
/*!
* express
* Copyright(c) 2009-2013 TJ Holowaychuk
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* Copyright(c) 2024 Emmanuel Paul Elom
* MIT Licensed
*/
;
import qs from 'qs';
/**
* Check if `path` looks absolute.
*
* @param {String} path
* @return {Boolean}
* @api private
*/
export function isAbsolute(path) {
if (path[0] === '/')
return true;
if (path[1] === ':' && (path[2] === '\\' || path[2] === '/'))
return true; // Windows device path
if (path.substring(0, 2) === '\\\\')
return true; // Microsoft Azure absolute path
return false;
}
/**
* Compile "query parser" value to function.
*
* @param {String|Function} val
* @return {Function}
* @api private
*/
export function compileQueryParser(val) {
let fn;
if (typeof val === 'function') {
return val;
}
switch (val) {
case 'simple':
fn = parseSimpleQueryString;
break;
case 'extended':
fn = parseExtendedQueryString;
break;
default:
throw new TypeError(`unknown value for query parser function: ${val}`);
}
return fn;
}
/**
* Parse a simple query string with URLSearchParams.
*
* @param {String} str
* @return {Object}
* @private
*/
function parseSimpleQueryString(str) {
const params = new URLSearchParams(str);
const result = {};
params.forEach((value, key) => (result[key] = value));
return result;
}
/**
* Parse an extended query string with qs.
*
* @param {String} str
* @return {Object}
* @private
*/
function parseExtendedQueryString(str) {
return qs.parse(str, {
allowPrototypes: true,
});
}
export const methods = ['get', 'put', 'post', 'update', 'option', 'patch'];