From 7bb63d80eb23828f698ad8597567e92df9149e7f Mon Sep 17 00:00:00 2001 From: taty2010 Date: Mon, 12 Jun 2023 16:28:18 -0500 Subject: [PATCH 01/15] fix: Return MiddlewareResponse for rewrite --- demos/middleware/middleware.ts | 19 +++++++++++- demos/middleware/pages/request-rewrite.js | 10 ++++++ demos/middleware/pages/static-rewrite.js | 37 +++++++++++++++++++++++ packages/next/src/middleware/request.ts | 31 +++++++++++++++++-- 4 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 demos/middleware/pages/request-rewrite.js create mode 100644 demos/middleware/pages/static-rewrite.js diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index 5950c98671..f5f2a98f84 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -27,7 +27,23 @@ export async function middleware(req: NextRequest) { const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` // Transform the response HTML and props - res.replaceText('p[id=message]', message) + res.replaceText('h1[id=testing-rewrite]', message) + res.setPageProp('message', message) + res.setPageProp('showAd', true) + + res.headers.set('x-modified-edge', 'true') + res.headers.set('x-is-deno', 'Deno' in globalThis ? 'true' : 'false') + return res + } + + if (pathname.startsWith('/request-rewrite')) { + // Unlike NextResponse.next(), this actually sends the request to the origin + const res = await request.rewrite('/static-rewrite') + console.log({"REWRITE": res}) + const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` + + // Transform the response HTML and props + res.replaceText('h1[id=testing-rewrite]', message) res.setPageProp('message', message) res.setPageProp('showAd', true) @@ -138,6 +154,7 @@ export const config = { '/headers', '/cookies/:path*', { source: '/static' }, + {source: '/request-rewrite' }, { source: '/matcher-cookie'}, { source: '/shows/((?!99|88).*)' }, { diff --git a/demos/middleware/pages/request-rewrite.js b/demos/middleware/pages/request-rewrite.js new file mode 100644 index 0000000000..0ac71294e4 --- /dev/null +++ b/demos/middleware/pages/request-rewrite.js @@ -0,0 +1,10 @@ +const Rewrite = () => { + return ( +
+

This should have been rewritten

+
+ ) + } + + export default Rewrite + \ No newline at end of file diff --git a/demos/middleware/pages/static-rewrite.js b/demos/middleware/pages/static-rewrite.js new file mode 100644 index 0000000000..bbcf45f181 --- /dev/null +++ b/demos/middleware/pages/static-rewrite.js @@ -0,0 +1,37 @@ +import * as React from 'react' + +const useHydrated = () => { + const [hydrated, setHydrated] = React.useState(false) + React.useEffect(() => { + setHydrated(true) + }, []) + return hydrated +} + +const Page = ({ message, showAd }) => { + const hydrated = useHydrated() + return ( +
+

{message}

+ {hydrated && showAd ? ( +
+

This is an ad that isn't shown by default on static test 2 page

+ +
+ ) : ( +

No ads for me

+ )} +
+ ) +} + +export async function getStaticProps() { + return { + props: { + message: 'This is a static page', + showAd: false, + }, + } +} + +export default Page diff --git a/packages/next/src/middleware/request.ts b/packages/next/src/middleware/request.ts index 02bed8a0b4..9288a7418c 100644 --- a/packages/next/src/middleware/request.ts +++ b/packages/next/src/middleware/request.ts @@ -20,6 +20,20 @@ export interface NextOptions { sendConditionalRequest?: boolean } +interface ModifiedRequest { + /** + * If this is set, the request headers will be overridden with this value. + */ + headers?: Headers +} + +interface MiddlewareResponseInit extends ResponseInit { + /** + * These fields will override the request from clients. + */ + request?: ModifiedRequest +} + /** * Supercharge your Next middleware with Netlify Edge Functions */ @@ -64,16 +78,27 @@ export class MiddlewareRequest extends Request { if (response.status === 301 && locationHeader?.startsWith('/')) { response = await this.context.rewrite(locationHeader) } - + console.log("TESTING", response) return new MiddlewareResponse(response) } - rewrite(destination: string | URL | NextURL, init?: ResponseInit): NextResponse { + // rewrite(destination: string | URL | NextURL, init?: MiddlewareResponseInit): NextResponse { + // if (typeof destination === 'string' && destination.startsWith('/')) { + // destination = new URL(destination, this.url) + // } + // this.applyHeaders() + // console.log({init, destination}) + // return NextResponse.rewrite(destination, init) + // } + + async rewrite(destination: string | URL | NextURL, init?: ResponseInit){ if (typeof destination === 'string' && destination.startsWith('/')) { destination = new URL(destination, this.url) } + const response = await this.context.rewrite(destination) this.applyHeaders() - return NextResponse.rewrite(destination, init) + console.log({init, destination}) + return new MiddlewareResponse(response) } get headers() { From f46ab439f694879a0b3936054295229946c4884b Mon Sep 17 00:00:00 2001 From: taty2010 Date: Tue, 13 Jun 2023 09:04:48 -0500 Subject: [PATCH 02/15] chore: remove console logs --- demos/middleware/middleware.ts | 3 +-- packages/next/src/middleware/request.ts | 24 ------------------------ 2 files changed, 1 insertion(+), 26 deletions(-) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index f5f2a98f84..dfdcbe03a1 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -37,9 +37,8 @@ export async function middleware(req: NextRequest) { } if (pathname.startsWith('/request-rewrite')) { - // Unlike NextResponse.next(), this actually sends the request to the origin + // request.rewrite() should return the MiddlewareResponse obj instead of the Response obj const res = await request.rewrite('/static-rewrite') - console.log({"REWRITE": res}) const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` // Transform the response HTML and props diff --git a/packages/next/src/middleware/request.ts b/packages/next/src/middleware/request.ts index 9288a7418c..34a1a47dfd 100644 --- a/packages/next/src/middleware/request.ts +++ b/packages/next/src/middleware/request.ts @@ -20,19 +20,6 @@ export interface NextOptions { sendConditionalRequest?: boolean } -interface ModifiedRequest { - /** - * If this is set, the request headers will be overridden with this value. - */ - headers?: Headers -} - -interface MiddlewareResponseInit extends ResponseInit { - /** - * These fields will override the request from clients. - */ - request?: ModifiedRequest -} /** * Supercharge your Next middleware with Netlify Edge Functions @@ -78,26 +65,15 @@ export class MiddlewareRequest extends Request { if (response.status === 301 && locationHeader?.startsWith('/')) { response = await this.context.rewrite(locationHeader) } - console.log("TESTING", response) return new MiddlewareResponse(response) } - // rewrite(destination: string | URL | NextURL, init?: MiddlewareResponseInit): NextResponse { - // if (typeof destination === 'string' && destination.startsWith('/')) { - // destination = new URL(destination, this.url) - // } - // this.applyHeaders() - // console.log({init, destination}) - // return NextResponse.rewrite(destination, init) - // } - async rewrite(destination: string | URL | NextURL, init?: ResponseInit){ if (typeof destination === 'string' && destination.startsWith('/')) { destination = new URL(destination, this.url) } const response = await this.context.rewrite(destination) this.applyHeaders() - console.log({init, destination}) return new MiddlewareResponse(response) } From 52b12a9b7c63f2046a75934a26a1a9b8934768a1 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Tue, 13 Jun 2023 12:57:37 -0500 Subject: [PATCH 03/15] chore: added tests and updated logic to include init --- cypress/e2e/middleware/enhanced.cy.ts | 24 +++++++++++++++++++++++- demos/middleware/middleware.ts | 6 +++++- packages/next/src/middleware/request.ts | 6 ++---- packages/next/src/middleware/response.ts | 3 ++- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/cypress/e2e/middleware/enhanced.cy.ts b/cypress/e2e/middleware/enhanced.cy.ts index 2d282a18bc..c918f68545 100644 --- a/cypress/e2e/middleware/enhanced.cy.ts +++ b/cypress/e2e/middleware/enhanced.cy.ts @@ -1,5 +1,27 @@ describe('Enhanced middleware', () => { - it('rewrites the response body', () => { + it('rewrites the response body using request.rewrite()', () => { + cy.visit('/request-rewrite') + cy.get('#message').contains('This was static (& escaping test &) but has been transformed in') + cy.contains("This is an ad that isn't shown by default") + }) + + it('modifies the page props when using request.rewrite()', () => { + cy.request('/_next/data/build-id/en/request-rewrite.json').then((response) => { + expect(response.body).to.have.nested.property('pageProps.showAd', true) + expect(response.body) + .to.have.nested.property('pageProps.message') + .that.includes('This was static (& escaping test &) but has been transformed in') + }) + }) + + it('passes in headers within request.rewrite()', () => { + cy.request('/request-rewrite').then((response) => { + expect(response.headers).to.have.property('x-rewrite-test', 'hello') + }) + }) + + + it('rewrites the response body using request.next()', () => { cy.visit('/static') cy.get('#message').contains('This was static (& escaping test &) but has been transformed in') cy.contains("This is an ad that isn't shown by default") diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index dfdcbe03a1..6454e225df 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -38,7 +38,11 @@ export async function middleware(req: NextRequest) { if (pathname.startsWith('/request-rewrite')) { // request.rewrite() should return the MiddlewareResponse obj instead of the Response obj - const res = await request.rewrite('/static-rewrite') + const res = await request.rewrite('/static-rewrite', { + headers: { + 'x-rewrite-test': 'hello' + } + }) const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` // Transform the response HTML and props diff --git a/packages/next/src/middleware/request.ts b/packages/next/src/middleware/request.ts index 34a1a47dfd..4f11f8727a 100644 --- a/packages/next/src/middleware/request.ts +++ b/packages/next/src/middleware/request.ts @@ -1,6 +1,5 @@ import type { Context } from '@netlify/edge-functions' import type { NextURL } from 'next/dist/server/web/next-url' -import { NextResponse } from 'next/server' import type { NextRequest as InternalNextRequest } from 'next/server' import { MiddlewareResponse } from './response' @@ -20,7 +19,6 @@ export interface NextOptions { sendConditionalRequest?: boolean } - /** * Supercharge your Next middleware with Netlify Edge Functions */ @@ -68,13 +66,13 @@ export class MiddlewareRequest extends Request { return new MiddlewareResponse(response) } - async rewrite(destination: string | URL | NextURL, init?: ResponseInit){ + async rewrite(destination: string | URL | NextURL, init?: ResponseInit) { if (typeof destination === 'string' && destination.startsWith('/')) { destination = new URL(destination, this.url) } const response = await this.context.rewrite(destination) this.applyHeaders() - return new MiddlewareResponse(response) + return new MiddlewareResponse(response, init) } get headers() { diff --git a/packages/next/src/middleware/response.ts b/packages/next/src/middleware/response.ts index 2e3eb519b9..61a4536b88 100644 --- a/packages/next/src/middleware/response.ts +++ b/packages/next/src/middleware/response.ts @@ -10,7 +10,8 @@ export type NextDataTransform = }>( export class MiddlewareResponse extends NextResponse { private readonly dataTransforms: NextDataTransform[] private readonly elementHandlers: Array<[selector: string, handlers: ElementHandlers]> - constructor(public originResponse: Response) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + constructor(public originResponse: Response, init?: ResponseInit) { // we need to propagate the set-cookie header, so response.cookies.get works correctly const initHeaders = new Headers() if (originResponse.headers.has('set-cookie')) { From 243330d4a81e27d2b737206e72a860d3d64910c9 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Wed, 14 Jun 2023 18:47:05 -0500 Subject: [PATCH 04/15] chore: revert selector back to original --- demos/middleware/middleware.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index 6454e225df..1b6e76fdbf 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -27,7 +27,7 @@ export async function middleware(req: NextRequest) { const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` // Transform the response HTML and props - res.replaceText('h1[id=testing-rewrite]', message) + res.replaceText('#message', message) res.setPageProp('message', message) res.setPageProp('showAd', true) @@ -46,7 +46,7 @@ export async function middleware(req: NextRequest) { const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` // Transform the response HTML and props - res.replaceText('h1[id=testing-rewrite]', message) + res.replaceText('#message', message) res.setPageProp('message', message) res.setPageProp('showAd', true) From 4199c2378a61cbe3e643d61d0d6c102d2eb0b783 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Thu, 15 Jun 2023 15:29:52 -0500 Subject: [PATCH 05/15] fix: pass in new headers --- demos/middleware/middleware.ts | 4 +++- packages/next/src/middleware/response.ts | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index 1b6e76fdbf..24ac78c481 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -40,7 +40,8 @@ export async function middleware(req: NextRequest) { // request.rewrite() should return the MiddlewareResponse obj instead of the Response obj const res = await request.rewrite('/static-rewrite', { headers: { - 'x-rewrite-test': 'hello' + 'x-rewrite-test': 'hello', + 'x-rewrite-test-2': 'hello-2' } }) const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` @@ -52,6 +53,7 @@ export async function middleware(req: NextRequest) { res.headers.set('x-modified-edge', 'true') res.headers.set('x-is-deno', 'Deno' in globalThis ? 'true' : 'false') + console.log({res}) return res } diff --git a/packages/next/src/middleware/response.ts b/packages/next/src/middleware/response.ts index 61a4536b88..2f96c4877f 100644 --- a/packages/next/src/middleware/response.ts +++ b/packages/next/src/middleware/response.ts @@ -10,7 +10,7 @@ export type NextDataTransform = }>( export class MiddlewareResponse extends NextResponse { private readonly dataTransforms: NextDataTransform[] private readonly elementHandlers: Array<[selector: string, handlers: ElementHandlers]> - // eslint-disable-next-line @typescript-eslint/no-unused-vars + constructor(public originResponse: Response, init?: ResponseInit) { // we need to propagate the set-cookie header, so response.cookies.get works correctly const initHeaders = new Headers() @@ -22,6 +22,12 @@ export class MiddlewareResponse extends NextResponse { headers: initHeaders, }) + if (init?.headers) { + Object.entries(init.headers).forEach(([key, value]) => { + this.headers.set(key, value) + }) + } + // These are private in Node when compiling, but we access them in Deno at runtime Object.defineProperty(this, 'dataTransforms', { value: [], From 0689fcaffb90a07482cf3e57d6c8eb60c2bf55b3 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Fri, 16 Jun 2023 10:14:29 -0500 Subject: [PATCH 06/15] chore: applyheader before response --- packages/next/src/middleware/request.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/next/src/middleware/request.ts b/packages/next/src/middleware/request.ts index 4f11f8727a..335642cb5d 100644 --- a/packages/next/src/middleware/request.ts +++ b/packages/next/src/middleware/request.ts @@ -70,8 +70,9 @@ export class MiddlewareRequest extends Request { if (typeof destination === 'string' && destination.startsWith('/')) { destination = new URL(destination, this.url) } - const response = await this.context.rewrite(destination) this.applyHeaders() + const response = await this.context.rewrite(destination) + return new MiddlewareResponse(response, init) } From f181b44be9ab30d36a6b35fc62c54ea561e2edda Mon Sep 17 00:00:00 2001 From: taty2010 Date: Fri, 16 Jun 2023 13:44:20 -0500 Subject: [PATCH 07/15] chore: update tests remove header fix --- cypress/e2e/middleware/enhanced.cy.ts | 11 ++++------- demos/middleware/middleware.ts | 8 +------- packages/next/src/middleware/response.ts | 7 +------ 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/cypress/e2e/middleware/enhanced.cy.ts b/cypress/e2e/middleware/enhanced.cy.ts index c918f68545..3236aa072b 100644 --- a/cypress/e2e/middleware/enhanced.cy.ts +++ b/cypress/e2e/middleware/enhanced.cy.ts @@ -6,15 +6,12 @@ describe('Enhanced middleware', () => { }) it('modifies the page props when using request.rewrite()', () => { - cy.request('/_next/data/build-id/en/request-rewrite.json').then((response) => { - expect(response.body).to.have.nested.property('pageProps.showAd', true) - expect(response.body) - .to.have.nested.property('pageProps.message') - .that.includes('This was static (& escaping test &) but has been transformed in') - }) + cy.visit('/request-rewrite') + const data = cy.get('script#__NEXT_DATA__') + data.should('contain', '"message":"This was static (& escaping test &) but has been transformed in Arlington","showAd":true') }) - it('passes in headers within request.rewrite()', () => { + it.skip('passes in headers within request.rewrite()', () => { cy.request('/request-rewrite').then((response) => { expect(response.headers).to.have.property('x-rewrite-test', 'hello') }) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index 24ac78c481..f4e11a9b60 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -38,12 +38,7 @@ export async function middleware(req: NextRequest) { if (pathname.startsWith('/request-rewrite')) { // request.rewrite() should return the MiddlewareResponse obj instead of the Response obj - const res = await request.rewrite('/static-rewrite', { - headers: { - 'x-rewrite-test': 'hello', - 'x-rewrite-test-2': 'hello-2' - } - }) + const res = await request.rewrite('/static-rewrite') const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` // Transform the response HTML and props @@ -53,7 +48,6 @@ export async function middleware(req: NextRequest) { res.headers.set('x-modified-edge', 'true') res.headers.set('x-is-deno', 'Deno' in globalThis ? 'true' : 'false') - console.log({res}) return res } diff --git a/packages/next/src/middleware/response.ts b/packages/next/src/middleware/response.ts index 2f96c4877f..90b9a9244a 100644 --- a/packages/next/src/middleware/response.ts +++ b/packages/next/src/middleware/response.ts @@ -11,6 +11,7 @@ export class MiddlewareResponse extends NextResponse { private readonly dataTransforms: NextDataTransform[] private readonly elementHandlers: Array<[selector: string, handlers: ElementHandlers]> + // eslint-disable-next-line @typescript-eslint/no-unused-vars constructor(public originResponse: Response, init?: ResponseInit) { // we need to propagate the set-cookie header, so response.cookies.get works correctly const initHeaders = new Headers() @@ -22,12 +23,6 @@ export class MiddlewareResponse extends NextResponse { headers: initHeaders, }) - if (init?.headers) { - Object.entries(init.headers).forEach(([key, value]) => { - this.headers.set(key, value) - }) - } - // These are private in Node when compiling, but we access them in Deno at runtime Object.defineProperty(this, 'dataTransforms', { value: [], From 993cba6d1c1774e017612c3fe3f08c59b4d1bf06 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Fri, 16 Jun 2023 13:59:29 -0500 Subject: [PATCH 08/15] chore: testing update --- cypress/e2e/middleware/enhanced.cy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/middleware/enhanced.cy.ts b/cypress/e2e/middleware/enhanced.cy.ts index 3236aa072b..672a6f3f57 100644 --- a/cypress/e2e/middleware/enhanced.cy.ts +++ b/cypress/e2e/middleware/enhanced.cy.ts @@ -8,7 +8,7 @@ describe('Enhanced middleware', () => { it('modifies the page props when using request.rewrite()', () => { cy.visit('/request-rewrite') const data = cy.get('script#__NEXT_DATA__') - data.should('contain', '"message":"This was static (& escaping test &) but has been transformed in Arlington","showAd":true') + data.should('contain', '"message":"This was static (& escaping test &) but has been transformed in') }) it.skip('passes in headers within request.rewrite()', () => { From 40ade6dbc44fd20e463533a8a78c80cdd95dae37 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Thu, 22 Jun 2023 13:25:25 -0500 Subject: [PATCH 09/15] chore: removed undici import --- test/e2e/next-test-lib/next-test-utils.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/e2e/next-test-lib/next-test-utils.js b/test/e2e/next-test-lib/next-test-utils.js index f8632fd020..6f8e4baf1e 100644 --- a/test/e2e/next-test-lib/next-test-utils.js +++ b/test/e2e/next-test-lib/next-test-utils.js @@ -2,7 +2,6 @@ import spawn from 'cross-spawn' import { existsSync, readFileSync, unlinkSync, writeFileSync } from 'fs' import { writeFile } from 'fs-extra' -import { fetch as undiciFetch } from 'undici' import nodeFetch from 'node-fetch' import path from 'path' import qs from 'querystring' From 3a38588d85f7783576fa5caddf9469f456fb27f0 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Thu, 22 Jun 2023 17:13:28 -0500 Subject: [PATCH 10/15] chore: added undici import back --- test/e2e/next-test-lib/next-test-utils.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/e2e/next-test-lib/next-test-utils.js b/test/e2e/next-test-lib/next-test-utils.js index 6f8e4baf1e..fb0b6328f3 100644 --- a/test/e2e/next-test-lib/next-test-utils.js +++ b/test/e2e/next-test-lib/next-test-utils.js @@ -2,6 +2,7 @@ import spawn from 'cross-spawn' import { existsSync, readFileSync, unlinkSync, writeFileSync } from 'fs' import { writeFile } from 'fs-extra' +import { fetch as undiciFetch } from 'next/dist/compiled/undici' import nodeFetch from 'node-fetch' import path from 'path' import qs from 'querystring' @@ -110,7 +111,7 @@ async function processChunkedResponse(response) { * @param {string | number} appPort * @param {string} pathname * @param {Record | string | undefined} [query] - * @param {import("undici").RequestInit} [opts] + * @param {import("next/dist/compiled/undici").RequestInit} [opts] * @returns {Promise} */ export function renderViaHTTP(appPort, pathname, query, opts) { @@ -120,11 +121,11 @@ export function renderViaHTTP(appPort, pathname, query, opts) { /** * @param {string | number} appPort * @param {string} pathname - * @param {Record | string | undefined} query - * @param {RequestInit} opts - * @returns {Promise} + * @param {Record | string | null | undefined} [query] + * @param {import('node-fetch').RequestInit} [opts] + * @returns {Promise} */ -export async function fetchViaHTTP(appPort, pathname, query = undefined, opts = undefined, useUndici = false) { +export function fetchViaHTTP(appPort, pathname, query, opts, useUndici = false) { const url = `${pathname}${typeof query === 'string' ? query : query ? `?${qs.stringify(query)}` : ''}` const fetch = useUndici ? undiciFetch : nodeFetch const fullUrl = getFullUrl(appPort, url) From 3353d66630ec0406404a33097741f8b2299789dd Mon Sep 17 00:00:00 2001 From: Tatyana <43764894+taty2010@users.noreply.github.com> Date: Fri, 23 Jun 2023 14:42:06 -0500 Subject: [PATCH 11/15] Update demos/middleware/middleware.ts Co-authored-by: Nick Taylor --- demos/middleware/middleware.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index f4e11a9b60..d93e5fa9b6 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -37,7 +37,7 @@ export async function middleware(req: NextRequest) { } if (pathname.startsWith('/request-rewrite')) { - // request.rewrite() should return the MiddlewareResponse obj instead of the Response obj + // request.rewrite() should return the MiddlewareResponse object instead of the Response object. const res = await request.rewrite('/static-rewrite') const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` From 983c8fe717d8fc8104cd34a979570d1e4a81829e Mon Sep 17 00:00:00 2001 From: Tatyana <43764894+taty2010@users.noreply.github.com> Date: Fri, 23 Jun 2023 14:56:20 -0500 Subject: [PATCH 12/15] Update cypress/e2e/middleware/enhanced.cy.ts update pageProps testing Co-authored-by: Nick Taylor --- cypress/e2e/middleware/enhanced.cy.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/middleware/enhanced.cy.ts b/cypress/e2e/middleware/enhanced.cy.ts index 672a6f3f57..02834a55f2 100644 --- a/cypress/e2e/middleware/enhanced.cy.ts +++ b/cypress/e2e/middleware/enhanced.cy.ts @@ -7,8 +7,10 @@ describe('Enhanced middleware', () => { it('modifies the page props when using request.rewrite()', () => { cy.visit('/request-rewrite') - const data = cy.get('script#__NEXT_DATA__') - data.should('contain', '"message":"This was static (& escaping test &) but has been transformed in') + const data = cy.get('script#__NEXT_DATA__').then((element) => { + const { props } = JSON.parse(element.text()); + expect(props.pageProps.message).to.include('This was static (& escaping test &) but has been transformed in') + }) }) it.skip('passes in headers within request.rewrite()', () => { From 29e5502147b5817f542b1a97affc83a9e5f93af3 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Fri, 23 Jun 2023 15:18:50 -0500 Subject: [PATCH 13/15] chore: removed header override testing --- cypress/e2e/middleware/enhanced.cy.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/cypress/e2e/middleware/enhanced.cy.ts b/cypress/e2e/middleware/enhanced.cy.ts index 02834a55f2..60445f3140 100644 --- a/cypress/e2e/middleware/enhanced.cy.ts +++ b/cypress/e2e/middleware/enhanced.cy.ts @@ -7,19 +7,12 @@ describe('Enhanced middleware', () => { it('modifies the page props when using request.rewrite()', () => { cy.visit('/request-rewrite') - const data = cy.get('script#__NEXT_DATA__').then((element) => { + cy.get('script#__NEXT_DATA__').then((element) => { const { props } = JSON.parse(element.text()); expect(props.pageProps.message).to.include('This was static (& escaping test &) but has been transformed in') }) }) - it.skip('passes in headers within request.rewrite()', () => { - cy.request('/request-rewrite').then((response) => { - expect(response.headers).to.have.property('x-rewrite-test', 'hello') - }) - }) - - it('rewrites the response body using request.next()', () => { cy.visit('/static') cy.get('#message').contains('This was static (& escaping test &) but has been transformed in') From 6a1e00d25c31e7ba785087c818dcaaf3aa0ff6fa Mon Sep 17 00:00:00 2001 From: taty2010 Date: Fri, 23 Jun 2023 15:26:45 -0500 Subject: [PATCH 14/15] chore: formatting --- demos/middleware/pages/request-rewrite.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/middleware/pages/request-rewrite.js b/demos/middleware/pages/request-rewrite.js index 0ac71294e4..01c26a47f2 100644 --- a/demos/middleware/pages/request-rewrite.js +++ b/demos/middleware/pages/request-rewrite.js @@ -6,5 +6,5 @@ const Rewrite = () => { ) } - export default Rewrite +export default Rewrite \ No newline at end of file From f1c210d2e5cf1c454c654bc11a5d62546a9d63a4 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Fri, 23 Jun 2023 15:30:28 -0500 Subject: [PATCH 15/15] chore: new line --- demos/middleware/pages/request-rewrite.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/middleware/pages/request-rewrite.js b/demos/middleware/pages/request-rewrite.js index 01c26a47f2..84bfcd628c 100644 --- a/demos/middleware/pages/request-rewrite.js +++ b/demos/middleware/pages/request-rewrite.js @@ -7,4 +7,4 @@ const Rewrite = () => { } export default Rewrite - \ No newline at end of file +