diff --git a/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/lib/middleware/plugins/redirects.ts b/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/lib/middleware/plugins/redirects.ts index cea2330c21..0ee2fd780b 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/lib/middleware/plugins/redirects.ts +++ b/packages/create-sitecore-jss/src/templates/nextjs-sxa/src/lib/middleware/plugins/redirects.ts @@ -32,8 +32,8 @@ class RedirectsPlugin implements MiddlewarePlugin { * @param req * @returns Promise */ - async exec(req: NextRequest): Promise { - return this.redirectsMiddleware.getHandler()(req); + async exec(req: NextRequest, res?:NextResponse): Promise { + return this.redirectsMiddleware.getHandler()(req, res); } } diff --git a/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.test.ts b/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.test.ts index bc21513b9e..1d4c8d783f 100644 --- a/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.test.ts +++ b/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.test.ts @@ -352,6 +352,67 @@ describe('RedirectsMiddleware', () => { expect(finalRes.status).to.equal(res.status); }); + it('should preserve site name from response data when provided, if no redirect type defined', async () => { + const res = NextResponse.next(); + const site = 'learn2grow'; + res.cookies.set('sc_site', site); + const req = createRequest({ + nextUrl: { + pathname: '/not-found', + locale: 'en', + clone() { + return Object.assign({}, req.nextUrl); + }, + }, + }); + + const { middleware, fetchRedirects, getSite } = createMiddleware({ + pattern: 'not-found', + target: 'http://localhost:3000/found', + redirectType: 'default', + isQueryStringPreserved: true, + locale: 'en', + }); + + const finalRes = await middleware.getHandler()(req, res); + // eslint-disable-next-line no-unused-expressions + expect(getSite).to.not.be.called; + // eslint-disable-next-line no-unused-expressions + expect(fetchRedirects.called).to.be.true; + expect(finalRes.cookies.get('sc_site')).to.equal(site); + }); + + it('should preserve site name from response data when provided, if handler is disabled', async () => { + const res = NextResponse.next(); + const site = 'learn2grow'; + res.cookies.set('sc_site', site); + const req = createRequest({ + nextUrl: { + pathname: '/not-found', + locale: 'en', + clone() { + return Object.assign({}, req.nextUrl); + }, + }, + }); + + const { middleware, fetchRedirects, getSite } = createMiddleware({ + pattern: 'not-found', + target: 'http://localhost:3000/found', + redirectType: 'default', + isQueryStringPreserved: true, + locale: 'en', + disabled: () => true, + }); + + const finalRes = await middleware.getHandler()(req, res); + // eslint-disable-next-line no-unused-expressions + expect(getSite).to.not.be.called; + // eslint-disable-next-line no-unused-expressions + expect(fetchRedirects.called).to.be.false; + expect(finalRes.cookies.get('sc_site')).to.equal(site); + }); + it('default fallback hostname is used', async () => { const res = NextResponse.redirect('http://localhost:3000/found', 301); const req = createRequest({ diff --git a/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.ts b/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.ts index e36eddcb5f..fbc435e890 100644 --- a/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.ts +++ b/packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.ts @@ -95,13 +95,13 @@ export class RedirectsMiddleware { this.excludeRoute(req.nextUrl.pathname) || (this.config.excludeRoute && this.config.excludeRoute(req.nextUrl.pathname)) ) { - return NextResponse.next(); + return res || NextResponse.next(); } // Find the redirect from result of RedirectService const existsRedirect = await this.getExistsRedirect(req, siteName); if (!existsRedirect) { - return NextResponse.next(); + return res || NextResponse.next(); } const url = req.nextUrl.clone();