"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergePath = exports.isAbsoluteURL = exports.getPathFromURL = exports.getPattern = exports.splitPath = void 0; const URL_REGEXP = /^https?:\/\/[a-zA-Z0-9\-\.:]+(\/?[^?#]*)/; const splitPath = (path) => { const paths = path.split(/\//); // faster than path.split('/') if (paths[0] === '') { paths.shift(); } return paths; }; exports.splitPath = splitPath; const patternCache = {}; const getPattern = (label) => { // * => wildcard // :id{[0-9]+} => ([0-9]+) // :id => (.+) //const name = '' if (label === '*') { return '*'; } const match = label.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/); if (match) { if (!patternCache[label]) { if (match[2]) { patternCache[label] = [label, match[1], new RegExp('^' + match[2] + '$')]; } else { patternCache[label] = [label, match[1], true]; } } return patternCache[label]; } return null; }; exports.getPattern = getPattern; const getPathFromURL = (url, strict = true) => { const queryIndex = url.indexOf('?'); const result = url.substring(url.indexOf('/', 8), queryIndex === -1 ? url.length : queryIndex); // if strict routing is false => `/hello/hey/` and `/hello/hey` are treated the same // default is true if (strict === false && result.endsWith('/')) { return result.slice(0, -1); } return result; }; exports.getPathFromURL = getPathFromURL; const isAbsoluteURL = (url) => { const match = url.match(URL_REGEXP); if (match) { return true; } return false; }; exports.isAbsoluteURL = isAbsoluteURL; const mergePath = (...paths) => { let p = ''; let endsWithSlash = false; for (let path of paths) { /* ['/hey/','/say'] => ['/hey', '/say'] */ if (p.endsWith('/')) { p = p.slice(0, -1); endsWithSlash = true; } /* ['/hey','say'] => ['/hey', '/say'] */ if (!path.startsWith('/')) { path = `/${path}`; } /* ['/hey/', '/'] => `/hey/` */ if (path === '/' && endsWithSlash) { p = `${p}/`; } else if (path !== '/') { p = `${p}${path}`; } /* ['/', '/'] => `/` */ if (path === '/' && p === '') { p = '/'; } } return p; }; exports.mergePath = mergePath;