summaryrefslogtreecommitdiff
path: root/packages/integrations/vercel/src
diff options
context:
space:
mode:
authorGravatar bluwy <bjornlu.dev@gmail.com> 2024-10-31 16:43:11 +0800
committerGravatar bluwy <bjornlu.dev@gmail.com> 2024-10-31 16:43:11 +0800
commit5ad4c160f80e63ad34c15b9fbe85af9bf316dac9 (patch)
tree895376dd3f2db73ec47a4da94ce876976d72ae70 /packages/integrations/vercel/src
parent9439f61e3f91365a989f2b32cd92df1a5208d4bf (diff)
parent7059c11c95c79e283b0742667da705fb60e1b7ad (diff)
downloadastro-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.ts40
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[][]) {