UNPKG

astro

Version:

Astro is a modern site builder with web best practices, performance, and DX front-of-mind.

36 lines (35 loc) 1.08 kB
function getPattern(segments, base, addTrailingSlash) { const pathname = segments.map((segment) => { if (segment.length === 1 && segment[0].spread) { return "(?:\\/(.*?))?"; } else { return "\\/" + segment.map((part) => { if (part.spread) { return "(.*?)"; } else if (part.dynamic) { return "([^/]+?)"; } else { return part.content.normalize().replace(/\?/g, "%3F").replace(/#/g, "%23").replace(/%5B/g, "[").replace(/%5D/g, "]").replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } }).join(""); } }).join(""); const trailing = addTrailingSlash && segments.length ? getTrailingSlashPattern(addTrailingSlash) : "$"; let initial = "\\/"; if (addTrailingSlash === "never" && base !== "/") { initial = ""; } return new RegExp(`^${pathname || initial}${trailing}`); } function getTrailingSlashPattern(addTrailingSlash) { if (addTrailingSlash === "always") { return "\\/$"; } if (addTrailingSlash === "never") { return "$"; } return "\\/?$"; } export { getPattern };