kequapp
Version:
DEPRECATED: renamed to @kequtech/arbor
57 lines (56 loc) • 1.84 kB
JavaScript
import { CONTENT_TYPE_REGEX, PATHNAME_REGEX, validateArray } from "../../utils/validate.js";
export function extractMethod(params, method = 'GET') {
if (typeof params[0] !== 'string' || params[0].includes('/')) {
return method;
}
return params.shift();
}
export function extractUrl(params, url = '/') {
if (typeof params[0] !== 'string' || !PATHNAME_REGEX.test(params[0])) {
return url;
}
return params.shift();
}
export function extractContentType(params, contentType) {
if (typeof params[0] !== 'string' || !CONTENT_TYPE_REGEX.test(params[0])) {
return contentType;
}
return params.shift();
}
export function extractActions(params) {
const actions = params.flat(Infinity);
validateArray(actions, 'Action', 'function');
return actions;
}
export function extractOptions(params, defaultOptions) {
if (typeof params[0] !== 'object' || params[0] === null || Array.isArray(params[0])) {
return { ...defaultOptions };
}
return { ...defaultOptions, ...params.shift() };
}
export function getParts(pathname) {
if (pathname === undefined)
return [];
const parts = pathname.split('/').filter((value) => value !== '');
const wildIndex = parts.indexOf('**');
if (wildIndex > -1) {
return parts.slice(0, wildIndex + 1);
}
return parts;
}
export function getParams(clientParts, parts) {
const params = {};
for (let i = 0; i < parts.length; i++) {
if (parts[i] === '**') {
params['**'] = `/${clientParts.slice(i).join('/')}`;
return params;
}
if (parts[i][0] === ':') {
params[parts[i].substring(1)] = clientParts[i];
}
}
return params;
}
export function matchGroups(url, regexp) {
return Object.assign({}, url.match(regexp)?.groups);
}