diff options
Diffstat (limited to 'cli/bench/testdata/npm/hono/dist/utils/url.js')
-rw-r--r-- | cli/bench/testdata/npm/hono/dist/utils/url.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/cli/bench/testdata/npm/hono/dist/utils/url.js b/cli/bench/testdata/npm/hono/dist/utils/url.js new file mode 100644 index 000000000..0e8fc33a3 --- /dev/null +++ b/cli/bench/testdata/npm/hono/dist/utils/url.js @@ -0,0 +1,83 @@ +"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; |