Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: remove node-fetch #55112

Closed
wants to merge 50 commits into from
Closed

chore: remove node-fetch #55112

wants to merge 50 commits into from

Conversation

balazsorban44
Copy link
Member

@balazsorban44 balazsorban44 commented Sep 7, 2023

What?

Removing node-fetch in favor fetch provided by the platform.

NOTE: This is a cleanup in the repository, next stopped using node-fetch a while ago already: #49061

Why?

Node.js 16 is EOL and although we might support it a bit longer for an easier migration, this is a preparation for being able to drop any kind of polyfilling via undici (which Node.js itself uses too).

Continues on #55105 to be able to use platform-only fetch everywhere, without polyfills

How?

The main changes are fixing compatibility issues between node-fetch and undici/Fetch API spec. Here is a rough summary of the content of this PR:

@ijjk ijjk added Font (next/font) Related to Next.js Font Optimization. area: tests created-by: Next.js team PRs by the Next.js team type: next labels Sep 7, 2023
Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

@ijjk
Copy link
Member

ijjk commented Sep 7, 2023

Failing test suites

Commit: 4c889da

pnpm test-dev test/development/experimental-https-server/https-server.provided-key.test.ts

  • experimental-https-server (provided certificate) > should successfully load the app in app dir
  • experimental-https-server (provided certificate) > should successfully load the app in pages dir
Expand output

● experimental-https-server (provided certificate) › should successfully load the app in app dir

TypeError: fetch failed

  16 |     it('should successfully load the app in app dir', async () => {
  17 |       expect(next.url).toInclude('https://')
> 18 |       const html = await renderViaHTTP(next.url, '/1', undefined, {
     |                    ^
  19 |         dispatcher,
  20 |       })
  21 |       expect(html).toContain('Hello from App')

  at Object.<anonymous> (development/experimental-https-server/https-server.provided-key.test.ts:18:20)

Cause:
TypeError: agent.dispatch is not a function

  153 | ): Promise<Response> {
  154 |   const url = query ? withQuery(pathname, query) : pathname
> 155 |   return fetch(getFullUrl(appPort, url), opts)
      |          ^
  156 | }
  157 |
  158 | export function renderViaHTTP(...args: Parameters<typeof fetchViaHTTP>) {

  at fetch (lib/next-test-utils.ts:155:10)
  at fetchViaHTTP (lib/next-test-utils.ts:159:10)
  at Object.<anonymous> (development/experimental-https-server/https-server.provided-key.test.ts:18:39)

● experimental-https-server (provided certificate) › should successfully load the app in pages dir

TypeError: fetch failed

  24 |     it('should successfully load the app in pages dir', async () => {
  25 |       expect(next.url).toInclude('https://')
> 26 |       const html = await renderViaHTTP(next.url, '/2', undefined, {
     |                    ^
  27 |         dispatcher,
  28 |       })
  29 |       expect(html).toContain('Hello from Pages')

  at Object.<anonymous> (development/experimental-https-server/https-server.provided-key.test.ts:26:20)

Cause:
TypeError: agent.dispatch is not a function

  153 | ): Promise<Response> {
  154 |   const url = query ? withQuery(pathname, query) : pathname
> 155 |   return fetch(getFullUrl(appPort, url), opts)
      |          ^
  156 | }
  157 |
  158 | export function renderViaHTTP(...args: Parameters<typeof fetchViaHTTP>) {

  at fetch (lib/next-test-utils.ts:155:10)
  at fetchViaHTTP (lib/next-test-utils.ts:159:10)
  at Object.<anonymous> (development/experimental-https-server/https-server.provided-key.test.ts:26:39)

Read more about building and testing Next.js in contributing.md.

pnpm test-start test/e2e/app-dir/app-routes/app-custom-routes.test.ts

  • app-custom-routes > body > can handle handle a streaming request and streaming response
  • app-custom-routes > body > can handle handle a streaming request and streaming response (edge)
  • app-custom-routes > body > can read a streamed JSON encoded body
  • app-custom-routes > body > can read a streamed JSON encoded body (edge)
Expand output

● app-custom-routes › body › can handle handle a streaming request and streaming response

TypeError: RequestInit: duplex option is required when sending a body.

  210 |           })
  211 |
> 212 |           const res = await next.fetch(basePath + '/advanced/body/streaming', {
      |                       ^
  213 |             method: 'POST',
  214 |             body: stream,
  215 |           })

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:212:23)

● app-custom-routes › body › can handle handle a streaming request and streaming response (edge)

TypeError: RequestInit: duplex option is required when sending a body.

  230 |         })
  231 |
> 232 |         const res = await next.fetch(
      |                     ^
  233 |           basePath + '/edge/advanced/body/streaming',
  234 |           {
  235 |             method: 'POST',

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:232:21)

● app-custom-routes › body › can read a streamed JSON encoded body

TypeError: RequestInit: duplex option is required when sending a body.

  300 |             },
  301 |           })
> 302 |           const res = await next.fetch(basePath + '/advanced/body/json', {
      |                       ^
  303 |             method: 'POST',
  304 |             body: stream,
  305 |           })

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:302:23)

● app-custom-routes › body › can read a streamed JSON encoded body (edge)

TypeError: RequestInit: duplex option is required when sending a body.

  321 |           },
  322 |         })
> 323 |         const res = await next.fetch(basePath + '/edge/advanced/body/json', {
      |                     ^
  324 |           method: 'POST',
  325 |           body: stream,
  326 |         })

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:323:21)

Read more about building and testing Next.js in contributing.md.

pnpm test-start test/e2e/app-dir/app-routes/app-custom-route-base-path.test.ts

  • app-custom-routes > body > can handle handle a streaming request and streaming response
  • app-custom-routes > body > can handle handle a streaming request and streaming response (edge)
  • app-custom-routes > body > can read a streamed JSON encoded body
  • app-custom-routes > body > can read a streamed JSON encoded body (edge)
Expand output

● app-custom-routes › body › can handle handle a streaming request and streaming response

TypeError: RequestInit: duplex option is required when sending a body.

  210 |           })
  211 |
> 212 |           const res = await next.fetch(basePath + '/advanced/body/streaming', {
      |                       ^
  213 |             method: 'POST',
  214 |             body: stream,
  215 |           })

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:212:23)

● app-custom-routes › body › can handle handle a streaming request and streaming response (edge)

TypeError: RequestInit: duplex option is required when sending a body.

  230 |         })
  231 |
> 232 |         const res = await next.fetch(
      |                     ^
  233 |           basePath + '/edge/advanced/body/streaming',
  234 |           {
  235 |             method: 'POST',

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:232:21)

● app-custom-routes › body › can read a streamed JSON encoded body

TypeError: RequestInit: duplex option is required when sending a body.

  300 |             },
  301 |           })
> 302 |           const res = await next.fetch(basePath + '/advanced/body/json', {
      |                       ^
  303 |             method: 'POST',
  304 |             body: stream,
  305 |           })

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:302:23)

● app-custom-routes › body › can read a streamed JSON encoded body (edge)

TypeError: RequestInit: duplex option is required when sending a body.

  321 |           },
  322 |         })
> 323 |         const res = await next.fetch(basePath + '/edge/advanced/body/json', {
      |                     ^
  324 |           method: 'POST',
  325 |           body: stream,
  326 |         })

  at Object.<anonymous> (e2e/app-dir/app-routes/app-custom-routes.test.ts:323:21)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/basepath-root-catch-all/test/index.test.js

  • dev mode > should use correct data URL for root catch-all
  • production mode > should use correct data URL for root catch-all
Expand output

● dev mode › should use correct data URL for root catch-all

TypeError: Invalid URL

  22 |
  23 |     const dataUrl = await browser.elementByCss('#url').text()
> 24 |     const { pathname } = new URL(dataUrl)
     |                          ^
  25 |     expect(pathname).toBe(`/_next/data/${buildId}/root/catch-all.json`)
  26 |   })
  27 | }

  at Object.<anonymous> (integration/basepath-root-catch-all/test/index.test.js:24:26)

● production mode › should use correct data URL for root catch-all

TypeError: Invalid URL

  22 |
  23 |     const dataUrl = await browser.elementByCss('#url').text()
> 24 |     const { pathname } = new URL(dataUrl)
     |                          ^
  25 |     expect(pathname).toBe(`/_next/data/${buildId}/root/catch-all.json`)
  26 |   })
  27 | }

  at Object.<anonymous> (integration/basepath-root-catch-all/test/index.test.js:24:26)

Read more about building and testing Next.js in contributing.md.

pnpm test-start test/e2e/app-dir/next-image/next-image-proxy.test.ts

  • next-image-proxy > should work with connection upgrade by removing it via filterReqHeaders()
Expand output

● next-image-proxy › should work with connection upgrade by removing it via filterReqHeaders()

TypeError: fetch failed

  92 |     it('should work with connection upgrade by removing it via filterReqHeaders()', async () => {
  93 |       const opts = { headers: { connection: 'upgrade' } }
> 94 |       const res1 = await next.fetch(
     |                    ^
  95 |         '/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Ftest.3f1a293b.png&w=828&q=90',
  96 |         opts
  97 |       )

  at Object.<anonymous> (e2e/app-dir/next-image/next-image-proxy.test.ts:94:20)

Cause:
InvalidArgumentError: invalid connection header

  153 | ): Promise<Response> {
  154 |   const url = query ? withQuery(pathname, query) : pathname
> 155 |   return fetch(getFullUrl(appPort, url), opts)
      |          ^
  156 | }
  157 |
  158 | export function renderViaHTTP(...args: Parameters<typeof fetchViaHTTP>) {

  at fetch (lib/next-test-utils.ts:155:10)
  at NextStartInstance.fetch (lib/next-modes/base.ts:533:24)
  at Object.fetch (e2e/app-dir/next-image/next-image-proxy.test.ts:94:31)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/dynamic-routing/test/middleware.test.js

  • Dynamic Routing > dev mode > should handle only query on dynamic route
  • Dynamic Routing > dev mode > should handle only hash on dynamic route
  • Dynamic Routing > dev mode > should navigate to a dynamic page successfully interpolated
  • Dynamic Routing > dev mode > should navigate to a dynamic page successfully interpolated with additional query values
  • Dynamic Routing > dev mode > should navigate to a nested dynamic page successfully interpolated
  • Dynamic Routing > dev mode > [ssg: catch-all] should pass params in getStaticProps during client navigation (single interpolated)
  • Dynamic Routing > dev mode > [ssg: catch-all] should pass params in getStaticProps during client navigation (multi interpolated)
  • Dynamic Routing > production mode > should handle only query on dynamic route
  • Dynamic Routing > production mode > should handle only hash on dynamic route
  • Dynamic Routing > production mode > should navigate to a dynamic page successfully interpolated
  • Dynamic Routing > production mode > should navigate to a dynamic page successfully interpolated with additional query values
  • Dynamic Routing > production mode > should navigate to a nested dynamic page successfully interpolated
  • Dynamic Routing > production mode > [ssg: catch-all] should pass params in getStaticProps during client navigation (single interpolated)
  • Dynamic Routing > production mode > [ssg: catch-all] should pass params in getStaticProps during client navigation (multi interpolated)
Expand output

● Dynamic Routing › dev mode › should handle only query on dynamic route

TypeError: Invalid URL

  234 |       const { id, pathname, query, hash, navQuery } = expectedValues
  235 |
> 236 |       const parsedHref = new URL(
      |                          ^
  237 |         await browser.elementByCss(`#${id}`).getAttribute('href')
  238 |       )
  239 |       expect(parsedHref.pathname).toBe(pathname)

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:236:26)

● Dynamic Routing › dev mode › should handle only hash on dynamic route

TypeError: Invalid URL

  261 |   it('should handle only hash on dynamic route', async () => {
  262 |     const browser = await webdriver(appPort, '/post-1')
> 263 |     const parsedHref = new URL(
      |                        ^
  264 |       await browser
  265 |         .elementByCss('#dynamic-route-only-hash')
  266 |         .getAttribute('href')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:263:24)

● Dynamic Routing › dev mode › should navigate to a dynamic page successfully interpolated

TypeError: Invalid URL

  540 |         .getAttribute('href')
  541 |
> 542 |       const parsedHref = new URL(href)
      |                          ^
  543 |       expect(parsedHref.pathname).toBe('/post-1')
  544 |       expect(Object.fromEntries(parsedHref.searchParams)).toEqual({})
  545 |

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:542:26)

● Dynamic Routing › dev mode › should navigate to a dynamic page successfully interpolated with additional query values

TypeError: Invalid URL

  566 |         .getAttribute('href')
  567 |
> 568 |       const parsedHref = new URL(href)
      |                          ^
  569 |       expect(parsedHref.pathname).toBe('/post-1')
  570 |       expect(Object.fromEntries(parsedHref.searchParams)).toEqual({
  571 |         another: 'value',

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:568:26)

● Dynamic Routing › dev mode › should navigate to a nested dynamic page successfully interpolated

TypeError: Invalid URL

  671 |         .getAttribute('href')
  672 |
> 673 |       expect(new URL(href).pathname).toBe('/post-1/comment-1')
      |              ^
  674 |
  675 |       await browser.elementByCss('#view-post-1-comment-1-interpolated').click()
  676 |       await browser.waitForElementByCss('#asdf')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:673:14)

● Dynamic Routing › dev mode › [ssg: catch-all] should pass params in getStaticProps during client navigation (single interpolated)

TypeError: Invalid URL

  901 |         .getAttribute('href')
  902 |
> 903 |       expect(new URL(href).pathname).toBe('/p1/p2/all-ssg/hello')
      |              ^
  904 |
  905 |       await browser.elementByCss('#ssg-catch-all-single-interpolated').click()
  906 |       await browser.waitForElementByCss('#all-ssg-content')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:903:14)

● Dynamic Routing › dev mode › [ssg: catch-all] should pass params in getStaticProps during client navigation (multi interpolated)

TypeError: Invalid URL

  959 |         .getAttribute('href')
  960 |
> 961 |       expect(new URL(href).pathname).toBe('/p1/p2/all-ssg/hello1/hello2')
      |              ^
  962 |
  963 |       await browser.elementByCss('#ssg-catch-all-multi-interpolated').click()
  964 |       await browser.waitForElementByCss('#all-ssg-content')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:961:14)

● Dynamic Routing › production mode › should handle only query on dynamic route

TypeError: Invalid URL

  234 |       const { id, pathname, query, hash, navQuery } = expectedValues
  235 |
> 236 |       const parsedHref = new URL(
      |                          ^
  237 |         await browser.elementByCss(`#${id}`).getAttribute('href')
  238 |       )
  239 |       expect(parsedHref.pathname).toBe(pathname)

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:236:26)

● Dynamic Routing › production mode › should handle only hash on dynamic route

TypeError: Invalid URL

  261 |   it('should handle only hash on dynamic route', async () => {
  262 |     const browser = await webdriver(appPort, '/post-1')
> 263 |     const parsedHref = new URL(
      |                        ^
  264 |       await browser
  265 |         .elementByCss('#dynamic-route-only-hash')
  266 |         .getAttribute('href')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:263:24)

● Dynamic Routing › production mode › should navigate to a dynamic page successfully interpolated

TypeError: Invalid URL

  540 |         .getAttribute('href')
  541 |
> 542 |       const parsedHref = new URL(href)
      |                          ^
  543 |       expect(parsedHref.pathname).toBe('/post-1')
  544 |       expect(Object.fromEntries(parsedHref.searchParams)).toEqual({})
  545 |

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:542:26)

● Dynamic Routing › production mode › should navigate to a dynamic page successfully interpolated with additional query values

TypeError: Invalid URL

  566 |         .getAttribute('href')
  567 |
> 568 |       const parsedHref = new URL(href)
      |                          ^
  569 |       expect(parsedHref.pathname).toBe('/post-1')
  570 |       expect(Object.fromEntries(parsedHref.searchParams)).toEqual({
  571 |         another: 'value',

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:568:26)

● Dynamic Routing › production mode › should navigate to a nested dynamic page successfully interpolated

TypeError: Invalid URL

  671 |         .getAttribute('href')
  672 |
> 673 |       expect(new URL(href).pathname).toBe('/post-1/comment-1')
      |              ^
  674 |
  675 |       await browser.elementByCss('#view-post-1-comment-1-interpolated').click()
  676 |       await browser.waitForElementByCss('#asdf')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:673:14)

● Dynamic Routing › production mode › [ssg: catch-all] should pass params in getStaticProps during client navigation (single interpolated)

TypeError: Invalid URL

  901 |         .getAttribute('href')
  902 |
> 903 |       expect(new URL(href).pathname).toBe('/p1/p2/all-ssg/hello')
      |              ^
  904 |
  905 |       await browser.elementByCss('#ssg-catch-all-single-interpolated').click()
  906 |       await browser.waitForElementByCss('#all-ssg-content')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:903:14)

● Dynamic Routing › production mode › [ssg: catch-all] should pass params in getStaticProps during client navigation (multi interpolated)

TypeError: Invalid URL

  959 |         .getAttribute('href')
  960 |
> 961 |       expect(new URL(href).pathname).toBe('/p1/p2/all-ssg/hello1/hello2')
      |              ^
  962 |
  963 |       await browser.elementByCss('#ssg-catch-all-multi-interpolated').click()
  964 |       await browser.waitForElementByCss('#all-ssg-content')

  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:961:14)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/read-only-source-hmr/test/index.test.js

  • Read-only source HMR > should detect changes to a page
  • Read-only source HMR > should handle page deletion and subsequent recreation
Expand output

● Read-only source HMR › should detect changes to a page

TIMED OUT: /COOL page/

Hello World

undefined

  628 |
  629 |   if (hardError) {
> 630 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  631 |   }
  632 |   return false
  633 | }

  at check (lib/next-test-utils.ts:630:11)
  at Object.<anonymous> (integration/read-only-source-hmr/test/index.test.js:69:7)

● Read-only source HMR › should handle page deletion and subsequent recreation

TIMED OUT: /Hello World/

COOL page

undefined

  628 |
  629 |   if (hardError) {
> 630 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  631 |   }
  632 |   return false
  633 | }

  at check (lib/next-test-utils.ts:630:11)
  at Object.<anonymous> (integration/read-only-source-hmr/test/index.test.js:85:7)

Read more about building and testing Next.js in contributing.md.

pnpm test test/production/pages-dir/production/test/index.test.ts

  • Production Usage > With basic usage > should allow etag header support
  • Production Usage > With basic usage > should allow etag header support with getStaticProps
Expand output

● Production Usage › With basic usage › should allow etag header support

expect(received).toBe(expected) // Object.is equality

Expected: 304
Received: 200

  390 |         const headers = { 'If-None-Match': etag }
  391 |         const res2 = await fetchViaHTTP(url, '/', undefined, { headers })
> 392 |         expect(res2.status).toBe(304)
      |                             ^
  393 |       })
  394 |
  395 |       it('should allow etag header support with getStaticProps', async () => {

  at Object.toBe (production/pages-dir/production/test/index.test.ts:392:29)

● Production Usage › With basic usage › should allow etag header support with getStaticProps

expect(received).toBe(expected) // Object.is equality

Expected: 304
Received: 200

  403 |           headers,
  404 |         })
> 405 |         expect(res2.status).toBe(304)
      |                             ^
  406 |       })
  407 |
  408 |       // TODO: should we generate weak etags for streaming getServerSideProps?

  at Object.toBe (production/pages-dir/production/test/index.test.ts:405:29)

Read more about building and testing Next.js in contributing.md.

pnpm test-start test/production/ipc-forbidden-headers/ipc-forbidden-headers.test.ts

  • ipc-forbidden-headers > should not error if expect header is included
  • ipc-forbidden-headers > should not error on content-length: 0 if request shouldn't contain a payload
Expand output

● ipc-forbidden-headers › should not error if expect header is included

TypeError: fetch failed

   8 |   ({ next }) => {
   9 |     it('should not error if expect header is included', async () => {
> 10 |       let res = await next.fetch('/api/pages-api', {
     |                 ^
  11 |         method: 'POST',
  12 |         headers: { expect: '100-continue' },
  13 |       })

  at Object.<anonymous> (production/ipc-forbidden-headers/ipc-forbidden-headers.test.ts:10:17)

Cause:
NotSupportedError: expect header not supported

  153 | ): Promise<Response> {
  154 |   const url = query ? withQuery(pathname, query) : pathname
> 155 |   return fetch(getFullUrl(appPort, url), opts)
      |          ^
  156 | }
  157 |
  158 | export function renderViaHTTP(...args: Parameters<typeof fetchViaHTTP>) {

  at fetch (lib/next-test-utils.ts:155:10)
  at NextStartInstance.fetch (lib/next-modes/base.ts:533:24)
  at Object.fetch (production/ipc-forbidden-headers/ipc-forbidden-headers.test.ts:10:28)

● ipc-forbidden-headers › should not error on content-length: 0 if request shouldn't contain a payload

TypeError: fetch failed

  29 |
  30 |     it("should not error on content-length: 0 if request shouldn't contain a payload", async () => {
> 31 |       let res = await next.fetch('/api/pages-api', {
     |                 ^
  32 |         method: 'DELETE',
  33 |         headers: { 'content-length': '0' },
  34 |       })

  at Object.<anonymous> (production/ipc-forbidden-headers/ipc-forbidden-headers.test.ts:31:17)

Cause:
RequestContentLengthMismatchError: Request body length does not match content-length header

Read more about building and testing Next.js in contributing.md.

pnpm test-dev test/development/pages-dir/client-navigation/index.test.ts

  • Client Navigation > Rendering via HTTP > should should not contain scripts that are not js
Expand output

● Client Navigation › Rendering via HTTP › should should not contain scripts that are not js

TypeError: Invalid URL

  23 |       const $ = await get$('/')
  24 |       $('script[src]').each((_index, element) => {
> 25 |         const parsedUrl = new URL($(element).attr('src'))
     |                           ^
  26 |         if (!parsedUrl.pathname.endsWith('.js')) {
  27 |           throw new Error(
  28 |             `Page includes script that is not a javascript file ${parsedUrl.pathname}`

  at Object.<anonymous> (development/pages-dir/client-navigation/rendering.ts:25:27)
  at initialize.Object.<anonymous>.exports.each (../node_modules/.pnpm/cheerio@0.22.0/node_modules/cheerio/lib/api/traversing.js:300:24)
  at Object.each (development/pages-dir/client-navigation/rendering.ts:24:24)

Read more about building and testing Next.js in contributing.md.

@ijjk
Copy link
Member

ijjk commented Sep 7, 2023

Stats from current PR

Default Build
General
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
buildDuration 12.3s 11.6s N/A
buildDurationCached 7.4s 7.5s N/A
nodeModulesSize 174 MB 174 MB N/A
nextStartRea..uration (ms) 650ms 519ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
199-HASH.js gzip 27.6 kB 27.6 kB
3f784ff6-HASH.js gzip 53.3 kB 53.3 kB
99.HASH.js gzip 182 B 182 B
framework-HASH.js gzip 45.3 kB 45.3 kB
main-app-HASH.js gzip 254 B 251 B N/A
main-HASH.js gzip 32.9 kB 32.9 kB N/A
webpack-HASH.js gzip 1.75 kB 1.75 kB N/A
Overall change 126 kB 126 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
_app-HASH.js gzip 206 B 205 B N/A
_error-HASH.js gzip 182 B 180 B N/A
amp-HASH.js gzip 506 B 505 B N/A
css-HASH.js gzip 322 B 323 B N/A
dynamic-HASH.js gzip 2.57 kB 2.57 kB N/A
edge-ssr-HASH.js gzip 260 B 259 B N/A
head-HASH.js gzip 350 B 350 B
hooks-HASH.js gzip 369 B 369 B
image-HASH.js gzip 4.36 kB 4.36 kB N/A
index-HASH.js gzip 256 B 256 B
link-HASH.js gzip 2.64 kB 2.63 kB N/A
routerDirect..HASH.js gzip 312 B 311 B N/A
script-HASH.js gzip 385 B 384 B N/A
withRouter-HASH.js gzip 307 B 308 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.08 kB 1.08 kB
Client Build Manifests
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
_buildManifest.js gzip 484 B 482 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
index.html gzip 528 B 529 B N/A
link.html gzip 541 B 542 B N/A
withRouter.html gzip 523 B 524 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
edge-ssr.js gzip 93.9 kB 93.9 kB N/A
page.js gzip 155 kB 155 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js chore/remove-node-fetch Change
middleware-b..fest.js gzip 625 B 622 B N/A
middleware-r..fest.js gzip 150 B 151 B N/A
middleware.js gzip 22.9 kB 22.9 kB N/A
edge-runtime..pack.js gzip 1.92 kB 1.92 kB
Overall change 1.92 kB 1.92 kB
Commit: 4c889da

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

Copy link

@orca-security-us orca-security-us bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 1   low 0   info 0 View in Orca

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 12, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
created-by: Next.js team PRs by the Next.js team Font (next/font) Related to Next.js Font Optimization. locked type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants