diff --git a/packages/next/server/web/spec-compliant/request.ts b/packages/next/server/web/spec-compliant/request.ts index a06b5c0f3b8b707..aa4751e640708bd 100644 --- a/packages/next/server/web/spec-compliant/request.ts +++ b/packages/next/server/web/spec-compliant/request.ts @@ -10,6 +10,7 @@ class BaseRequest extends Body implements Request { credentials: RequestCredentials headers: Headers method: string + referrer: string redirect: RequestRedirect url: NextURL } @@ -48,6 +49,7 @@ class BaseRequest extends Body implements Request { init.credentials || getProp(input, 'credentials') || 'same-origin', headers, method, + referrer: init.referrer || 'about:client', redirect: init.redirect || getProp(input, 'redirect') || 'follow', url: new NextURL(typeof input === 'string' ? input : input.url), } @@ -65,6 +67,10 @@ class BaseRequest extends Body implements Request { return this[INTERNALS].method } + get referrer() { + return this[INTERNALS].referrer + } + get headers() { return this[INTERNALS].headers } @@ -97,10 +103,6 @@ class BaseRequest extends Body implements Request { return notImplemented('Request', 'destination') } - get referrer() { - return notImplemented('Request', 'referrer') - } - get referrerPolicy() { return notImplemented('Request', 'referrerPolicy') } diff --git a/test/unit/web-runtime/request.test.ts b/test/unit/web-runtime/request.test.ts index 5b549ce573c2cca..fb6d5228ba9edfe 100644 --- a/test/unit/web-runtime/request.test.ts +++ b/test/unit/web-runtime/request.test.ts @@ -35,3 +35,13 @@ it('parses and reconstructs the URL alone', async () => { it('throws when the URL is malformed', async () => { expect(() => new Request('meeeh')).toThrowError('Invalid URL') }) + +it("Request.referrer is `about:client` by default", async () => { + const request = new Request('https://vercel.com') + expect(request.referrer).toBe('about:client') +}) + +it("Request.referrer can be customized", async () => { + const request = new Request('https://vercel.com', { referrer: 'client' }) + expect(request.referrer).toBe('client') +})