diff options
-rw-r--r-- | packages/integrations/vercel/src/lib/redirects.ts | 21 | ||||
-rw-r--r-- | packages/integrations/vercel/test/redirects.test.js | 12 |
2 files changed, 15 insertions, 18 deletions
diff --git a/packages/integrations/vercel/src/lib/redirects.ts b/packages/integrations/vercel/src/lib/redirects.ts index 1ec19bfac..5c6bb605b 100644 --- a/packages/integrations/vercel/src/lib/redirects.ts +++ b/packages/integrations/vercel/src/lib/redirects.ts @@ -1,10 +1,9 @@ -import type { AstroConfig, RouteData, RoutePart } from 'astro'; import { appendForwardSlash } from '@astrojs/internal-helpers/path'; +import type { AstroConfig, RouteData, RoutePart } from 'astro'; import nodePath from 'node:path'; const pathJoin = nodePath.posix.join; - // https://vercel.com/docs/project-configuration#legacy/routes interface VercelRoute { src: string; @@ -60,19 +59,19 @@ function getReplacePattern(segments: RoutePart[][]) { } function getRedirectLocation(route: RouteData, config: AstroConfig): string { - if(route.redirectRoute) { + if (route.redirectRoute) { const pattern = getReplacePattern(route.redirectRoute.segments); - const path = (config.trailingSlash === 'always' ? appendForwardSlash(pattern) : pattern); + const path = config.trailingSlash === 'always' ? appendForwardSlash(pattern) : pattern; return pathJoin(config.base, path); - } else if(typeof route.redirect === 'object') { + } else if (typeof route.redirect === 'object') { return pathJoin(config.base, route.redirect.destination); } else { return pathJoin(config.base, route.redirect || ''); - } + } } function getRedirectStatus(route: RouteData): number { - if(typeof route.redirect === 'object') { + if (typeof route.redirect === 'object') { return route.redirect.status; } return 301; @@ -81,14 +80,12 @@ function getRedirectStatus(route: RouteData): number { export function getRedirects(routes: RouteData[], config: AstroConfig): VercelRoute[] { let redirects: VercelRoute[] = []; - - - for(const route of routes) { - if(route.type === 'redirect') { + for (const route of routes) { + if (route.type === 'redirect') { redirects.push({ src: config.base + getMatchPattern(route.segments), headers: { Location: getRedirectLocation(route, config) }, - status: getRedirectStatus(route) + status: getRedirectStatus(route), }); } else if (route.type === 'page') { if (config.trailingSlash === 'always') { diff --git a/packages/integrations/vercel/test/redirects.test.js b/packages/integrations/vercel/test/redirects.test.js index 0d54589fc..16d845b04 100644 --- a/packages/integrations/vercel/test/redirects.test.js +++ b/packages/integrations/vercel/test/redirects.test.js @@ -14,7 +14,7 @@ describe('Redirects', () => { '/two': '/', '/three': { status: 302, - destination: '/' + destination: '/', }, '/blog/[...slug]': '/team/articles/[...slug]', }, @@ -35,15 +35,15 @@ describe('Redirects', () => { it('define static routes', async () => { const config = await getConfig(); - const oneRoute = config.routes.find(r => r.src === '/\\/one'); + const oneRoute = config.routes.find((r) => r.src === '/\\/one'); expect(oneRoute.headers.Location).to.equal('/'); expect(oneRoute.status).to.equal(301); - - const twoRoute = config.routes.find(r => r.src === '/\\/two'); + + const twoRoute = config.routes.find((r) => r.src === '/\\/two'); expect(twoRoute.headers.Location).to.equal('/'); expect(twoRoute.status).to.equal(301); - const threeRoute = config.routes.find(r => r.src === '/\\/three'); + const threeRoute = config.routes.find((r) => r.src === '/\\/three'); expect(threeRoute.headers.Location).to.equal('/'); expect(threeRoute.status).to.equal(302); }); @@ -51,7 +51,7 @@ describe('Redirects', () => { it('defines dynamic routes', async () => { const config = await getConfig(); - const blogRoute = config.routes.find(r => r.src.startsWith('/\\/blog')); + const blogRoute = config.routes.find((r) => r.src.startsWith('/\\/blog')); expect(blogRoute).to.not.be.undefined; expect(blogRoute.headers.Location.startsWith('/team/articles')).to.equal(true); expect(blogRoute.status).to.equal(301); |