UNPKG

kequapp

Version:

DEPRECATED: renamed to @kequtech/arbor

57 lines (56 loc) 1.84 kB
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); }