UNPKG

next

Version:

The React Framework

44 lines (43 loc) 1.86 kB
import { regexpToFunction } from 'next/dist/compiled/path-to-regexp'; import { pathToRegexp } from 'next/dist/compiled/path-to-regexp'; /** * Generates a path matcher function for a given path and options based on * path-to-regexp. By default the match will be case insensitive, non strict * and delimited by `/`. */ export function getPathMatch(path, options) { const keys = []; const regexp = pathToRegexp(path, keys, { delimiter: '/', sensitive: typeof options?.sensitive === 'boolean' ? options.sensitive : false, strict: options?.strict }); const matcher = regexpToFunction(options?.regexModifier ? new RegExp(options.regexModifier(regexp.source), regexp.flags) : regexp, keys); /** * A matcher function that will check if a given pathname matches the path * given in the builder function. When the path does not match it will return * `false` but if it does it will return an object with the matched params * merged with the params provided in the second argument. */ return (pathname, params)=>{ // If no pathname is provided it's not a match. if (typeof pathname !== 'string') return false; const match = matcher(pathname); // If the path did not match `false` will be returned. if (!match) return false; /** * If unnamed params are not allowed they must be removed from * the matched parameters. path-to-regexp uses "string" for named and * "number" for unnamed parameters. */ if (options?.removeUnnamedParams) { for (const key of keys){ if (typeof key.name === 'number') { delete match.params[key.name]; } } } return { ...params, ...match.params }; }; } //# sourceMappingURL=path-match.js.map