diff options
author | 2024-10-31 16:43:11 +0800 | |
---|---|---|
committer | 2024-10-31 16:43:11 +0800 | |
commit | 5ad4c160f80e63ad34c15b9fbe85af9bf316dac9 (patch) | |
tree | 895376dd3f2db73ec47a4da94ce876976d72ae70 /packages/integrations/vercel/src | |
parent | 9439f61e3f91365a989f2b32cd92df1a5208d4bf (diff) | |
parent | 7059c11c95c79e283b0742667da705fb60e1b7ad (diff) | |
download | astro-5ad4c160f80e63ad34c15b9fbe85af9bf316dac9.tar.gz astro-5ad4c160f80e63ad34c15b9fbe85af9bf316dac9.tar.zst astro-5ad4c160f80e63ad34c15b9fbe85af9bf316dac9.zip |
Merge branch 'main' into next
Diffstat (limited to 'packages/integrations/vercel/src')
-rw-r--r-- | packages/integrations/vercel/src/lib/redirects.ts | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/packages/integrations/vercel/src/lib/redirects.ts b/packages/integrations/vercel/src/lib/redirects.ts index 9a7a503aa..7ef4d5045 100644 --- a/packages/integrations/vercel/src/lib/redirects.ts +++ b/packages/integrations/vercel/src/lib/redirects.ts @@ -45,25 +45,31 @@ function getParts(part: string, file: string) { // 2022-04-26 function getMatchPattern(segments: RoutePart[][]) { return segments - .map((segment) => { - return segment[0].spread + .map((segment, segmentIndex) => { + return segment.length === 1 && segment[0].spread ? '(?:\\/(.*?))?' - : segment - .map((part) => { - if (part) - return part.dynamic - ? '([^/]+?)' - : part.content - .normalize() - .replace(/\?/g, '%3F') - .replace(/#/g, '%23') - .replace(/%5B/g, '[') - .replace(/%5D/g, ']') - .replace(/[*+?^${}()|[\]\\]/g, '\\$&'); - }) - .join(''); + : // Omit leading slash if segment is a spread. + // This is handled using a regex in Astro core. + // To avoid complex data massaging, we handle in-place here. + (segmentIndex === 0 ? '' : '/') + + segment + .map((part) => { + if (part) + return part.spread + ? '(.*?)' + : part.dynamic + ? '([^/]+?)' + : part.content + .normalize() + .replace(/\?/g, '%3F') + .replace(/#/g, '%23') + .replace(/%5B/g, '[') + .replace(/%5D/g, ']') + .replace(/[*+?^${}()|[\]\\]/g, '\\$&'); + }) + .join(''); }) - .join('/'); + .join(''); } function getReplacePattern(segments: RoutePart[][]) { |