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

Remove querystring from the client #15378

Merged
merged 6 commits into from Aug 6, 2020
Merged

Remove querystring from the client #15378

merged 6 commits into from Aug 6, 2020

Conversation

Janpot
Copy link
Contributor

@Janpot Janpot commented Jul 21, 2020

Remove node.js querystring usage in favour for browser native URLSearchParams. Added a few helpers to translate between the two formats, but only do operations on URLSearchParams instances.

@ijjk
Copy link
Member

ijjk commented Jul 21, 2020

Failing test suites

Commit: e96bcb1

test/integration/amphtml-fragment-style/test/index.test.js

  • AMP Fragment Styles > adds styles from fragment in AMP mode correctly
Expand output

● AMP Fragment Styles › adds styles from fragment in AMP mode correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property '__app' of undefined

  309 | 
  310 | export async function stopApp(server) {
> 311 |   if (server.__app) {
      |              ^
  312 |     await server.__app.close()
  313 |   }
  314 |   await promiseCall(server, 'close')

  at stopApp (lib/next-test-utils.js:311:14)
  at integration/amphtml-fragment-style/test/index.test.js:32:18

test/integration/chunking/test/index.test.js

  • Chunking > should use all url friendly names
  • Chunking > should create a framework chunk
  • Chunking > should not create a commons chunk
  • Chunking > should not create a lib chunk for react or react-dom
  • Chunking > should not preload the build manifest
  • Chunking > should execute the build manifest
  • Chunking > should not include more than one instance of react-dom
  • Chunking > Serving > should hydrate with aggressive chunking
  • Chunking > Serving > should load chunks when navigating
Expand output

● Chunking › should use all url friendly names

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › should create a framework chunk

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › should not create a commons chunk

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › should not create a lib chunk for react or react-dom

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › should not preload the build manifest

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › should execute the build manifest

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › should not include more than one instance of react-dom

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › Serving › should hydrate with aggressive chunking

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Chunking › Serving › should load chunks when navigating

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/chunking/test/index.test.js:52:18

test/integration/absolute-assetprefix/test/index.test.js

  • absolute assetPrefix with path prefix > should be able to fetch static data from a CDN
  • absolute assetPrefix with path prefix > should fetch from cache correctly
  • absolute assetPrefix with path prefix > should work with getStaticPaths prerendered
  • absolute assetPrefix with path prefix > should work with getStaticPaths fallback
  • absolute assetPrefix with path prefix > should work with getServerSideProps
Expand output

● absolute assetPrefix with path prefix › should be able to fetch static data from a CDN

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● absolute assetPrefix with path prefix › should fetch from cache correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● absolute assetPrefix with path prefix › should work with getStaticPaths prerendered

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● absolute assetPrefix with path prefix › should work with getStaticPaths fallback

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● absolute assetPrefix with path prefix › should work with getServerSideProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/absolute-assetprefix/test/index.test.js:65:18

test/integration/amphtml-custom-optimizer/test/index.test.js

  • AMP Custom Optimizer > should build and start for static page
  • AMP Custom Optimizer > should build and start for dynamic page
Expand output

● AMP Custom Optimizer › should build and start for static page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● AMP Custom Optimizer › should build and start for dynamic page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

test/integration/api-support/test/index.test.js

  • API routes > Server support > should render page
  • API routes > Server support > should return 404 for undefined path
  • API routes > Server support > should not conflict with /api routes
  • API routes > Server support > should set cors headers when adding cors middleware
  • API routes > Server support > should work with index api
  • API routes > Server support > should return custom error
  • API routes > Server support > should throw Internal Server Error
  • API routes > Server support > should throw Internal Server Error (async)
  • API routes > Server support > should parse JSON body
  • API routes > Server support > should special-case empty JSON body
  • API routes > Server support > should support boolean for JSON in api page
  • API routes > Server support > should return error with invalid JSON
  • API routes > Server support > should return error exceeded body limit
  • API routes > Server support > should parse bigger body then 1mb
  • API routes > Server support > should support etag spec
  • API routes > Server support > should parse urlencoded body
  • API routes > Server support > should parse body in handler
  • API routes > Server support > should parse body with config
  • API routes > Server support > should redirect with status code 307
  • API routes > Server support > should redirect to login
  • API routes > Server support > should redirect with status code 301
  • API routes > Server support > should return empty query object
  • API routes > Server support > should parse query correctly
  • API routes > Server support > should return empty cookies object
  • API routes > Server support > should return cookies object
  • API routes > Server support > should return 200 on POST on pages
  • API routes > Server support > should return JSON on post on API
  • API routes > Server support > should return data on dynamic route
  • API routes > Server support > should work with dynamic params and search string
  • API routes > Server support > should work with dynamic params and search string like lambda
  • API routes > Server support > should prioritize a non-dynamic page
  • API routes > Server support > should return data on dynamic nested route
  • API routes > Server support > should 404 on optional dynamic api page
  • API routes > Server support > should return data on dynamic optional nested route
  • API routes > Server support > should work with child_process correctly
  • API routes > Server support > should show warning with next export
  • API routes > Server support > should build api routes
  • API routes > Serverless support > should render page
  • API routes > Serverless support > should return 404 for undefined path
  • API routes > Serverless support > should not conflict with /api routes
  • API routes > Serverless support > should set cors headers when adding cors middleware
  • API routes > Serverless support > should work with index api
  • API routes > Serverless support > should return custom error
  • API routes > Serverless support > should throw Internal Server Error
  • API routes > Serverless support > should throw Internal Server Error (async)
  • API routes > Serverless support > should parse JSON body
  • API routes > Serverless support > should special-case empty JSON body
  • API routes > Serverless support > should support boolean for JSON in api page
  • API routes > Serverless support > should return error with invalid JSON
  • API routes > Serverless support > should return error exceeded body limit
  • API routes > Serverless support > should parse bigger body then 1mb
  • API routes > Serverless support > should support etag spec
  • API routes > Serverless support > should parse urlencoded body
  • API routes > Serverless support > should parse body in handler
  • API routes > Serverless support > should parse body with config
  • API routes > Serverless support > should redirect with status code 307
  • API routes > Serverless support > should redirect to login
  • API routes > Serverless support > should redirect with status code 301
  • API routes > Serverless support > should return empty query object
  • API routes > Serverless support > should parse query correctly
  • API routes > Serverless support > should return empty cookies object
  • API routes > Serverless support > should return cookies object
  • API routes > Serverless support > should return 200 on POST on pages
  • API routes > Serverless support > should return JSON on post on API
  • API routes > Serverless support > should return data on dynamic route
  • API routes > Serverless support > should work with dynamic params and search string
  • API routes > Serverless support > should work with dynamic params and search string like lambda
  • API routes > Serverless support > should prioritize a non-dynamic page
  • API routes > Serverless support > should return data on dynamic nested route
  • API routes > Serverless support > should 404 on optional dynamic api page
  • API routes > Serverless support > should return data on dynamic optional nested route
  • API routes > Serverless support > should work with child_process correctly
  • API routes > Serverless support > should show warning with next export
  • API routes > Serverless support > should build api routes
  • API routes > dev support > should render page
  • API routes > dev support > should return 404 for undefined path
  • API routes > dev support > should not conflict with /api routes
  • API routes > dev support > should set cors headers when adding cors middleware
  • API routes > dev support > should work with index api
  • API routes > dev support > should return custom error
  • API routes > dev support > should throw Internal Server Error
  • API routes > dev support > should throw Internal Server Error (async)
  • API routes > dev support > should parse JSON body
  • API routes > dev support > should special-case empty JSON body
  • API routes > dev support > should support boolean for JSON in api page
  • API routes > dev support > should return error with invalid JSON
  • API routes > dev support > should return error exceeded body limit
  • API routes > dev support > should parse bigger body then 1mb
  • API routes > dev support > should support etag spec
  • API routes > dev support > should parse urlencoded body
  • API routes > dev support > should parse body in handler
  • API routes > dev support > should parse body with config
  • API routes > dev support > should redirect with status code 307
  • API routes > dev support > should redirect to login
  • API routes > dev support > should redirect with status code 301
  • API routes > dev support > should return empty query object
  • API routes > dev support > should parse query correctly
  • API routes > dev support > should return empty cookies object
  • API routes > dev support > should return cookies object
  • API routes > dev support > should return 200 on POST on pages
  • API routes > dev support > should return JSON on post on API
  • API routes > dev support > should return data on dynamic route
  • API routes > dev support > should work with dynamic params and search string
  • API routes > dev support > should work with dynamic params and search string like lambda
  • API routes > dev support > should prioritize a non-dynamic page
  • API routes > dev support > should return data on dynamic nested route
  • API routes > dev support > should 404 on optional dynamic api page
  • API routes > dev support > should return data on dynamic optional nested route
  • API routes > dev support > should work with child_process correctly
  • API routes > dev support > should compile only server code in development
  • API routes > dev support > should show warning when the API resolves without ending the request in dev mode
  • API routes > dev support > should not show warning when the API resolves and the response is piped
  • API routes > dev support > should show false positive warning if not using externalResolver flag
  • API routes > dev support > should not show warning if using externalResolver flag
Expand output

● API routes › dev support › should render page

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return 404 for undefined path

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should not conflict with /api routes

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should set cors headers when adding cors middleware

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should work with index api

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return custom error

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should throw Internal Server Error

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should throw Internal Server Error (async)

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should parse JSON body

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should special-case empty JSON body

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should support boolean for JSON in api page

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return error with invalid JSON

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return error exceeded body limit

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should parse bigger body then 1mb

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should support etag spec

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should parse urlencoded body

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should parse body in handler

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should parse body with config

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should redirect with status code 307

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should redirect to login

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should redirect with status code 301

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return empty query object

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should parse query correctly

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return empty cookies object

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return cookies object

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return 200 on POST on pages

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return JSON on post on API

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return data on dynamic route

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should work with dynamic params and search string

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should work with dynamic params and search string like lambda

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should prioritize a non-dynamic page

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return data on dynamic nested route

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should 404 on optional dynamic api page

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should return data on dynamic optional nested route

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should work with child_process correctly

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should compile only server code in development

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should show warning when the API resolves without ending the request in dev mode

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should not show warning when the API resolves and the response is piped

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should show false positive warning if not using externalResolver flag

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › dev support › should not show warning if using externalResolver flag

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  467 | describe('API routes', () => {
  468 |   describe('dev support', () => {
> 469 |     beforeAll(async () => {
      |     ^
  470 |       stderr = ''
  471 |       appPort = await findPort()
  472 |       app = await launchApp(appDir, appPort, {

  at integration/api-support/test/index.test.js:469:5
  at integration/api-support/test/index.test.js:468:3
  at Object.<anonymous> (integration/api-support/test/index.test.js:467:1)

● API routes › Server support › should render page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return 404 for undefined path

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should not conflict with /api routes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should set cors headers when adding cors middleware

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should work with index api

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return custom error

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should throw Internal Server Error

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should throw Internal Server Error (async)

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should parse JSON body

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should special-case empty JSON body

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should support boolean for JSON in api page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return error with invalid JSON

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return error exceeded body limit

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should parse bigger body then 1mb

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should support etag spec

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should parse urlencoded body

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should parse body in handler

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should parse body with config

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should redirect with status code 307

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should redirect to login

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should redirect with status code 301

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return empty query object

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should parse query correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return empty cookies object

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return cookies object

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return 200 on POST on pages

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return JSON on post on API

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return data on dynamic route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should work with dynamic params and search string

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should work with dynamic params and search string like lambda

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should prioritize a non-dynamic page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return data on dynamic nested route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should 404 on optional dynamic api page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should return data on dynamic optional nested route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should work with child_process correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should show warning with next export

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Server support › should build api routes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should render page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return 404 for undefined path

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should not conflict with /api routes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should set cors headers when adding cors middleware

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should work with index api

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return custom error

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should throw Internal Server Error

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should throw Internal Server Error (async)

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should parse JSON body

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should special-case empty JSON body

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should support boolean for JSON in api page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return error with invalid JSON

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return error exceeded body limit

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should parse bigger body then 1mb

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should support etag spec

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should parse urlencoded body

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should parse body in handler

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should parse body with config

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should redirect with status code 307

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should redirect to login

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should redirect with status code 301

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return empty query object

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should parse query correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return empty cookies object

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return cookies object

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return 200 on POST on pages

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return JSON on post on API

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return data on dynamic route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should work with dynamic params and search string

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should work with dynamic params and search string like lambda

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should prioritize a non-dynamic page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return data on dynamic nested route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should 404 on optional dynamic api page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should return data on dynamic optional nested route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should work with child_process correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should show warning with next export

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● API routes › Serverless support › should build api routes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/api-support/test/index.test.js:478:20

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/api-support/test/index.test.js:490:20

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/api-support/test/index.test.js:507:13

test/integration/404-page/test/index.test.js

  • 404 Page Support > falls back to _error correctly without pages/404
  • 404 Page Support > shows error with getInitialProps in pages/404 build
  • 404 Page Support > shows error with getInitialProps in pages/404 dev
  • 404 Page Support > does not show error with getStaticProps in pages/404 build
  • 404 Page Support > does not show error with getStaticProps in pages/404 dev
  • 404 Page Support > shows error with getServerSideProps in pages/404 build
  • 404 Page Support > shows error with getServerSideProps in pages/404 dev
  • 404 Page Support > dev mode > should use pages/404
  • 404 Page Support > dev mode > should set correct status code with pages/404
  • 404 Page Support > dev mode > should not error when visited directly
  • 404 Page Support > dev mode > should render _error for a 500 error still
  • 404 Page Support > server mode > should use pages/404
  • 404 Page Support > server mode > should set correct status code with pages/404
  • 404 Page Support > server mode > should not error when visited directly
  • 404 Page Support > server mode > should render _error for a 500 error still
  • 404 Page Support > server mode > should output 404.html during build
  • 404 Page Support > server mode > should add /404 to pages-manifest correctly
  • 404 Page Support > serverless mode > should use pages/404
  • 404 Page Support > serverless mode > should set correct status code with pages/404
  • 404 Page Support > serverless mode > should not error when visited directly
  • 404 Page Support > serverless mode > should render _error for a 500 error still
  • 404 Page Support > serverless mode > should output 404.html during build
  • 404 Page Support > serverless mode > should add /404 to pages-manifest correctly
Expand output

● 404 Page Support › dev mode › should use pages/404

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  66 | describe('404 Page Support', () => {
  67 |   describe('dev mode', () => {
> 68 |     beforeAll(async () => {
     |     ^
  69 |       appPort = await findPort()
  70 |       app = await launchApp(appDir, appPort)
  71 |     })

  at integration/404-page/test/index.test.js:68:5
  at integration/404-page/test/index.test.js:67:3
  at Object.<anonymous> (integration/404-page/test/index.test.js:66:1)

● 404 Page Support › dev mode › should set correct status code with pages/404

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  66 | describe('404 Page Support', () => {
  67 |   describe('dev mode', () => {
> 68 |     beforeAll(async () => {
     |     ^
  69 |       appPort = await findPort()
  70 |       app = await launchApp(appDir, appPort)
  71 |     })

  at integration/404-page/test/index.test.js:68:5
  at integration/404-page/test/index.test.js:67:3
  at Object.<anonymous> (integration/404-page/test/index.test.js:66:1)

● 404 Page Support › dev mode › should not error when visited directly

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  66 | describe('404 Page Support', () => {
  67 |   describe('dev mode', () => {
> 68 |     beforeAll(async () => {
     |     ^
  69 |       appPort = await findPort()
  70 |       app = await launchApp(appDir, appPort)
  71 |     })

  at integration/404-page/test/index.test.js:68:5
  at integration/404-page/test/index.test.js:67:3
  at Object.<anonymous> (integration/404-page/test/index.test.js:66:1)

● 404 Page Support › dev mode › should render _error for a 500 error still

thrown: "Exceeded timeout of 120000 ms for a hook.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  66 | describe('404 Page Support', () => {
  67 |   describe('dev mode', () => {
> 68 |     beforeAll(async () => {
     |     ^
  69 |       appPort = await findPort()
  70 |       app = await launchApp(appDir, appPort)
  71 |     })

  at integration/404-page/test/index.test.js:68:5
  at integration/404-page/test/index.test.js:67:3
  at Object.<anonymous> (integration/404-page/test/index.test.js:66:1)

● 404 Page Support › server mode › should use pages/404

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › server mode › should set correct status code with pages/404

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › server mode › should not error when visited directly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › server mode › should render _error for a 500 error still

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › server mode › should output 404.html during build

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › server mode › should add /404 to pages-manifest correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › serverless mode › should use pages/404

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › serverless mode › should set correct status code with pages/404

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › serverless mode › should not error when visited directly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › serverless mode › should render _error for a 500 error still

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › serverless mode › should output 404.html during build

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › serverless mode › should add /404 to pages-manifest correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● 404 Page Support › falls back to _error correctly without pages/404

ENOENT: no such file or directory, stat '/home/runner/work/next.js/next.js/test/integration/404-page/pages/404.js'

● 404 Page Support › shows error with getInitialProps in pages/404 build

ENOENT: no such file or directory, stat '/home/runner/work/next.js/next.js/test/integration/404-page/pages/404.js'

● 404 Page Support › shows error with getInitialProps in pages/404 dev

ENOENT: no such file or directory, stat '/home/runner/work/next.js/next.js/test/integration/404-page/pages/404.js'

● 404 Page Support › does not show error with getStaticProps in pages/404 build

ENOENT: no such file or directory, stat '/home/runner/work/next.js/next.js/test/integration/404-page/pages/404.js'

● 404 Page Support › does not show error with getStaticProps in pages/404 dev

ENOENT: no such file or directory, stat '/home/runner/work/next.js/next.js/test/integration/404-page/pages/404.js'

● 404 Page Support › shows error with getServerSideProps in pages/404 build

ENOENT: no such file or directory, stat '/home/runner/work/next.js/next.js/test/integration/404-page/pages/404.js'

● 404 Page Support › shows error with getServerSideProps in pages/404 dev

ENOENT: no such file or directory, stat '/home/runner/work/next.js/next.js/test/integration/404-page/pages/404.js'

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/404-page/test/index.test.js:72:20

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/404-page/test/index.test.js:83:20

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/404-page/test/index.test.js:105:13

@ijjk
Copy link
Member

ijjk commented Jul 21, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 11.5s 11s -467ms
nodeModulesSize 66.4 MB 66.4 MB ⚠️ +3.41 kB
Page Load Tests Overall increase ✓
vercel/next.js canary Janpot/next.js remove-qs Change
/ failed reqs 0 0
/ total time (seconds) 1.836 1.761 -0.08
/ avg req/sec 1361.89 1419.72 +57.83
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.093 1.021 -0.07
/error-in-render avg req/sec 2287.68 2449.65 +161.97
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..5755.js gzip 10.1 kB 9.79 kB -286 B
framework.HASH.js gzip 39.1 kB 39.1 kB
main-d8a3f1c..06ea.js gzip 6.72 kB 6.72 kB ⚠️ +6 B
polyfills-05..1236.js gzip 30.8 kB 30.8 kB
webpack-488d..c0e7.js gzip 751 B 751 B
Overall change 87.5 kB 87.2 kB -280 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.1 kB 5.79 kB -317 B
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-e63c4e5..dule.js gzip 5.79 kB 5.8 kB ⚠️ +1 B
polyfills-05..dule.js gzip 30.8 kB 30.8 kB
webpack-4f62..dule.js gzip 751 B 751 B
Overall change 82.6 kB 82.3 kB -316 B
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-8f5f611..1f7b.js gzip 1.28 kB 1.28 kB
_error-8e69b..8695.js gzip 3.41 kB 3.41 kB
hooks-f7f3d0..7465.js gzip 887 B 887 B
index-08fb3f..c0e9.js gzip 227 B 227 B
link-ddd176e..5566.js gzip 1.29 kB 1.29 kB
routerDirect..8aa1.js gzip 284 B 284 B
withRouter-f..e777.js gzip 284 B 284 B
Overall change 7.66 kB 7.66 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-669dbe5..dule.js gzip 626 B 626 B
_error-663e6..dule.js gzip 2.24 kB 2.24 kB
hooks-805c40..dule.js gzip 387 B 387 B
index-6ba5a4..dule.js gzip 226 B 226 B
link-69bc264..dule.js gzip 1.25 kB 1.25 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-d..dule.js gzip 282 B 282 B
Overall change 5.29 kB 5.29 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 275 B 275 B
_buildManife..dule.js gzip 281 B 281 B
Overall change 556 B 556 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
index.html gzip 948 B 946 B -2 B
link.html gzip 954 B 952 B -2 B
withRouter.html gzip 940 B 938 B -2 B
Overall change 2.84 kB 2.84 kB -6 B

Diffs

Diff for 677f882d2ed8..4c1625eb6.js
@@ -121,98 +121,70 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
+      var _slicedToArray = __webpack_require__("J4zp");
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach(function(value, key) {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(function(_ref) {
+          var _ref2 = _slicedToArray(_ref, 2),
+            key = _ref2[0],
+            value = _ref2[1];
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(function(item) {
+              return result.append(key, item);
+            });
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(function(searchParams) {
+          Array.from(searchParams.keys()).forEach(function(key) {
+            return target["delete"](key);
+          });
+          searchParams.forEach(function(value, key) {
+            return target.append(key, value);
+          });
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +194,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj["default"] = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -269,8 +299,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -580,29 +609,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach(function(value, key) {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -682,7 +688,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1140,8 +1146,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                             case 16:
                               (pathname = parsed.pathname),
                                 (searchParams = parsed.searchParams);
-                              query = (0,
-                              _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+                              query = (0, _querystring.searchParamsToUrlQuery)(
                                 searchParams
                               ); // url and as should always be prefixed with basePath by this
                               // point by either next/link or router.push/replace so strip the
@@ -2230,99 +2235,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ ls82: /***/ function(module, exports, __webpack_require__) {
       /**
        * Copyright (c) 2014-present, Facebook, Inc.
@@ -3430,15 +3342,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
-      /***/
-    },
-
     /***/ sXyB: /***/ function(module, exports, __webpack_require__) {
       var setPrototypeOf = __webpack_require__("SksO");
Diff for 677f882d2ed8..bf.module.js
@@ -121,98 +121,60 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach((value, key) => {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(_ref => {
+          var [key, value] = _ref;
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(item => result.append(key, item));
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(searchParams => {
+          Array.from(searchParams.keys()).forEach(key => target.delete(key));
+          searchParams.forEach((value, key) => target.append(key, value));
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +184,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj.default = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -268,8 +288,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -457,29 +476,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach((value, key) => {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -551,7 +547,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -935,9 +931,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
           var parsed = tryParseRelativeUrl(url);
           if (!parsed) return false;
           var { pathname, searchParams } = parsed;
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          ); // url and as should always be prefixed with basePath by this
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams); // url and as should always be prefixed with basePath by this
           // point by either next/link or router.push/replace so strip the
           // basePath from the pathname to match the pages dir 1-to-1
 
@@ -1574,99 +1568,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ nOHt: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -1871,15 +1772,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       if (false) {
       }
 
-      /***/
-    },
-
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
       /***/
     }
   }
Diff for main-233fc7b..ab.module.js
@@ -165,15 +165,15 @@
       exports.renderError = renderError;
       exports.default = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -296,10 +296,10 @@
             router.replace(
               router.pathname +
                 "?" +
-                (0, _querystring.stringify)(
-                  (0, _extends2.default)(
-                    (0, _extends2.default)({}, router.query),
-                    (0, _querystring.parse)(location.search.substr(1))
+                String(
+                  querystring.assign(
+                    querystring.urlQueryToSearchParams(router.query),
+                    new URLSearchParams(location.search)
                   )
                 ),
               asPath,
@@ -1129,7 +1129,7 @@
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1249,9 +1249,7 @@
         getDataHref(href, asPath, ssg) {
           var { pathname: hrefPathname, searchParams, search } = (0,
           _parseRelativeUrl.parseRelativeUrl)(href);
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          );
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams);
           var { pathname: asPathname } = (0,
           _parseRelativeUrl.parseRelativeUrl)(asPath);
           var route = normalizeRoute(hrefPathname);
Diff for main-beb4247..4150405ff.js
@@ -247,15 +247,15 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
         "default"
       ] = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -400,10 +400,10 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 router.replace(
                   router.pathname +
                     "?" +
-                    (0, _querystring.stringify)(
-                      (0, _extends2["default"])(
-                        (0, _extends2["default"])({}, router.query),
-                        (0, _querystring.parse)(location.search.substr(1))
+                    String(
+                      querystring.assign(
+                        querystring.urlQueryToSearchParams(router.query),
+                        new URLSearchParams(location.search)
                       )
                     ),
                   asPath,
@@ -1490,7 +1490,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1629,7 +1629,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 searchParams = _ref.searchParams,
                 search = _ref.search;
 
-              var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+              var query = (0, _querystring.searchParamsToUrlQuery)(
                 searchParams
               );
Diff for index.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-233fc7bd50b7ad77c6ab.module.js"
+      href="/_next/static/chunks/main-aa059a39dd213e3668d5.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d8c79cdca1f5b78aa6bf.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.48745cbc80ee779a46da.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-beb424737c04150405ff.js"
+      src="/_next/static/chunks/main-0a52f88b9f909840165d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-233fc7bd50b7ad77c6ab.module.js"
+      src="/_next/static/chunks/main-aa059a39dd213e3668d5.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.47129aa59ae4c1625eb6.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.e3e4f510bec04ff07758.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d8c79cdca1f5b78aa6bf.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.48745cbc80ee779a46da.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-233fc7bd50b7ad77c6ab.module.js"
+      href="/_next/static/chunks/main-aa059a39dd213e3668d5.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d8c79cdca1f5b78aa6bf.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.48745cbc80ee779a46da.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -86,13 +86,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-beb424737c04150405ff.js"
+      src="/_next/static/chunks/main-0a52f88b9f909840165d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-233fc7bd50b7ad77c6ab.module.js"
+      src="/_next/static/chunks/main-aa059a39dd213e3668d5.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -122,13 +122,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.47129aa59ae4c1625eb6.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.e3e4f510bec04ff07758.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d8c79cdca1f5b78aa6bf.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.48745cbc80ee779a46da.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-233fc7bd50b7ad77c6ab.module.js"
+      href="/_next/static/chunks/main-aa059a39dd213e3668d5.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d8c79cdca1f5b78aa6bf.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.48745cbc80ee779a46da.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-beb424737c04150405ff.js"
+      src="/_next/static/chunks/main-0a52f88b9f909840165d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-233fc7bd50b7ad77c6ab.module.js"
+      src="/_next/static/chunks/main-aa059a39dd213e3668d5.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.47129aa59ae4c1625eb6.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.e3e4f510bec04ff07758.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d8c79cdca1f5b78aa6bf.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.48745cbc80ee779a46da.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 12.2s 12.5s ⚠️ +330ms
nodeModulesSize 66.4 MB 66.4 MB ⚠️ +3.41 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..5755.js gzip 10.1 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
main-d8a3f1c..06ea.js gzip 6.72 kB N/A N/A
polyfills-05..1236.js gzip 30.8 kB 30.8 kB
webpack-488d..c0e7.js gzip 751 B 751 B
677f882d2ed8..0fa4.js gzip N/A 9.79 kB N/A
main-9dc4bed..be2b.js gzip N/A 6.72 kB N/A
Overall change 87.5 kB 87.2 kB -280 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.1 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-e63c4e5..dule.js gzip 5.79 kB N/A N/A
polyfills-05..dule.js gzip 30.8 kB 30.8 kB
webpack-4f62..dule.js gzip 751 B 751 B
677f882d2ed8..dule.js gzip N/A 5.79 kB N/A
main-5098b50..dule.js gzip N/A 5.8 kB N/A
Overall change 82.6 kB 82.3 kB -316 B
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-8f5f611..1f7b.js gzip 1.28 kB 1.28 kB
_error-8e69b..8695.js gzip 3.41 kB 3.41 kB
hooks-f7f3d0..7465.js gzip 887 B 887 B
index-08fb3f..c0e9.js gzip 227 B 227 B
link-ddd176e..5566.js gzip 1.29 kB 1.29 kB
routerDirect..8aa1.js gzip 284 B 284 B
withRouter-f..e777.js gzip 284 B 284 B
Overall change 7.66 kB 7.66 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-669dbe5..dule.js gzip 626 B 626 B
_error-663e6..dule.js gzip 2.24 kB 2.24 kB
hooks-805c40..dule.js gzip 387 B 387 B
index-6ba5a4..dule.js gzip 226 B 226 B
link-69bc264..dule.js gzip 1.25 kB 1.25 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-d..dule.js gzip 282 B 282 B
Overall change 5.29 kB 5.29 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 275 B 275 B
_buildManife..dule.js gzip 281 B 281 B
Overall change 556 B 556 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
_error.js 881 kB 883 kB ⚠️ +2.23 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 881 kB 884 kB ⚠️ +2.23 kB
link.js 922 kB 923 kB ⚠️ +1.68 kB
routerDirect.js 916 kB 917 kB ⚠️ +1.68 kB
withRouter.js 916 kB 917 kB ⚠️ +1.68 kB
Overall change 4.52 MB 4.53 MB ⚠️ +9.48 kB
Commit: 7b5175e

@Janpot Janpot changed the title try to remove querystring from the client Remove querystring from the client Jul 28, 2020
@ijjk
Copy link
Member

ijjk commented Jul 28, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 12.3s 12.5s ⚠️ +222ms
nodeModulesSize 65.5 MB 65.5 MB ⚠️ +3.41 kB
Page Load Tests Overall increase ✓
vercel/next.js canary Janpot/next.js remove-qs Change
/ failed reqs 0 0
/ total time (seconds) 2.264 2.303 ⚠️ +0.04
/ avg req/sec 1104.08 1085.61 ⚠️ -18.47
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.396 1.365 -0.03
/error-in-render avg req/sec 1790.73 1832.17 +41.44
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..b7a9.js gzip 10.2 kB 9.89 kB -284 B
framework.HASH.js gzip 39.1 kB 39.1 kB
main-af9a1a4..87fe.js gzip 6.71 kB 6.72 kB ⚠️ +6 B
polyfills-05..1236.js gzip 30.8 kB 30.8 kB
webpack-488d..c0e7.js gzip 751 B 751 B
Overall change 87.6 kB 87.3 kB -278 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.09 kB 5.77 kB -320 B
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-69d5e5f..dule.js gzip 5.79 kB 5.79 kB ⚠️ +2 B
polyfills-05..dule.js gzip 30.8 kB 30.8 kB
webpack-4f62..dule.js gzip 751 B 751 B
Overall change 82.6 kB 82.3 kB -318 B
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-8f5f611..1f7b.js gzip 1.28 kB 1.28 kB
_error-a98d9..5cb7.js gzip 3.45 kB 3.45 kB
hooks-f7f3d0..7465.js gzip 887 B 887 B
index-08fb3f..c0e9.js gzip 227 B 227 B
link-ddd176e..5566.js gzip 1.29 kB 1.29 kB
routerDirect..8aa1.js gzip 284 B 284 B
withRouter-f..e777.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-669dbe5..dule.js gzip 626 B 626 B
_error-d5979..dule.js gzip 2.3 kB 2.3 kB
hooks-805c40..dule.js gzip 387 B 387 B
index-6ba5a4..dule.js gzip 226 B 226 B
link-69bc264..dule.js gzip 1.25 kB 1.25 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-d..dule.js gzip 282 B 282 B
Overall change 5.36 kB 5.36 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 275 B 275 B
_buildManife..dule.js gzip 281 B 281 B
Overall change 556 B 556 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
index.html gzip 946 B 947 B ⚠️ +1 B
link.html gzip 953 B 952 B -1 B
withRouter.html gzip 940 B 939 B -1 B
Overall change 2.84 kB 2.84 kB -1 B

Diffs

Diff for 677f882d2ed8..f9.module.js
@@ -121,98 +121,60 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach((value, key) => {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(_ref => {
+          var [key, value] = _ref;
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(item => result.append(key, item));
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(searchParams => {
+          Array.from(searchParams.keys()).forEach(key => target.delete(key));
+          searchParams.forEach((value, key) => target.append(key, value));
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +184,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj.default = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -268,8 +288,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -457,29 +476,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach((value, key) => {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -551,7 +547,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -941,9 +937,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
           var parsed = tryParseRelativeUrl(url);
           if (!parsed) return false;
           var { pathname, searchParams } = parsed;
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          ); // url and as should always be prefixed with basePath by this
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams); // url and as should always be prefixed with basePath by this
           // point by either next/link or router.push/replace so strip the
           // basePath from the pathname to match the pages dir 1-to-1
 
@@ -1579,99 +1573,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ nOHt: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -1876,15 +1777,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       if (false) {
       }
 
-      /***/
-    },
-
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
       /***/
     }
   }
Diff for 677f882d2ed8..dbb170329.js
@@ -121,98 +121,70 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
+      var _slicedToArray = __webpack_require__("J4zp");
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach(function(value, key) {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(function(_ref) {
+          var _ref2 = _slicedToArray(_ref, 2),
+            key = _ref2[0],
+            value = _ref2[1];
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(function(item) {
+              return result.append(key, item);
+            });
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(function(searchParams) {
+          Array.from(searchParams.keys()).forEach(function(key) {
+            return target["delete"](key);
+          });
+          searchParams.forEach(function(value, key) {
+            return target.append(key, value);
+          });
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +194,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj["default"] = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -269,8 +299,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -580,29 +609,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach(function(value, key) {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -682,7 +688,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1146,8 +1152,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                             case 16:
                               (pathname = parsed.pathname),
                                 (searchParams = parsed.searchParams);
-                              query = (0,
-                              _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+                              query = (0, _querystring.searchParamsToUrlQuery)(
                                 searchParams
                               ); // url and as should always be prefixed with basePath by this
                               // point by either next/link or router.push/replace so strip the
@@ -2280,99 +2285,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ ls82: /***/ function(module, exports, __webpack_require__) {
       /**
        * Copyright (c) 2014-present, Facebook, Inc.
@@ -3494,15 +3406,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
-      /***/
-    },
-
     /***/ sXyB: /***/ function(module, exports, __webpack_require__) {
       var setPrototypeOf = __webpack_require__("SksO");
Diff for main-3788e5e..7f57176d6.js
@@ -247,15 +247,15 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
         "default"
       ] = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -400,10 +400,10 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 router.replace(
                   router.pathname +
                     "?" +
-                    (0, _querystring.stringify)(
-                      (0, _extends2["default"])(
-                        (0, _extends2["default"])({}, router.query),
-                        (0, _querystring.parse)(location.search.substr(1))
+                    String(
+                      querystring.assign(
+                        querystring.urlQueryToSearchParams(router.query),
+                        new URLSearchParams(location.search)
                       )
                     ),
                   asPath,
@@ -1490,7 +1490,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1629,7 +1629,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 searchParams = _ref.searchParams,
                 search = _ref.search;
 
-              var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+              var query = (0, _querystring.searchParamsToUrlQuery)(
                 searchParams
               );
Diff for main-6b940b5..9a.module.js
@@ -165,15 +165,15 @@
       exports.renderError = renderError;
       exports.default = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -296,10 +296,10 @@
             router.replace(
               router.pathname +
                 "?" +
-                (0, _querystring.stringify)(
-                  (0, _extends2.default)(
-                    (0, _extends2.default)({}, router.query),
-                    (0, _querystring.parse)(location.search.substr(1))
+                String(
+                  querystring.assign(
+                    querystring.urlQueryToSearchParams(router.query),
+                    new URLSearchParams(location.search)
                   )
                 ),
               asPath,
@@ -1129,7 +1129,7 @@
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1249,9 +1249,7 @@
         getDataHref(href, asPath, ssg) {
           var { pathname: hrefPathname, searchParams, search } = (0,
           _parseRelativeUrl.parseRelativeUrl)(href);
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          );
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams);
           var { pathname: asPathname } = (0,
           _parseRelativeUrl.parseRelativeUrl)(asPath);
           var route = normalizeRoute(hrefPathname);
Diff for index.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-6b940b53117a1440949a.module.js"
+      href="/_next/static/chunks/main-97ece135bfc9ff013020.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-3788e5ef2307f57176d6.js"
+      src="/_next/static/chunks/main-82e35b06b82913101663.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-6b940b53117a1440949a.module.js"
+      src="/_next/static/chunks/main-97ece135bfc9ff013020.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.289defeb577dbb170329.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.87c251b0f6a0db9a6b2d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-6b940b53117a1440949a.module.js"
+      href="/_next/static/chunks/main-97ece135bfc9ff013020.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -86,13 +86,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-3788e5ef2307f57176d6.js"
+      src="/_next/static/chunks/main-82e35b06b82913101663.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-6b940b53117a1440949a.module.js"
+      src="/_next/static/chunks/main-97ece135bfc9ff013020.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -122,13 +122,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.289defeb577dbb170329.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.87c251b0f6a0db9a6b2d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-6b940b53117a1440949a.module.js"
+      href="/_next/static/chunks/main-97ece135bfc9ff013020.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-3788e5ef2307f57176d6.js"
+      src="/_next/static/chunks/main-82e35b06b82913101663.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-6b940b53117a1440949a.module.js"
+      src="/_next/static/chunks/main-97ece135bfc9ff013020.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.289defeb577dbb170329.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.87c251b0f6a0db9a6b2d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 13.9s 13.9s -31ms
nodeModulesSize 65.5 MB 65.5 MB ⚠️ +3.41 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..b7a9.js gzip 10.2 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
main-af9a1a4..87fe.js gzip 6.71 kB N/A N/A
polyfills-05..1236.js gzip 30.8 kB 30.8 kB
webpack-488d..c0e7.js gzip 751 B 751 B
677f882d2ed8..fbd2.js gzip N/A 9.89 kB N/A
main-734377c..c6eb.js gzip N/A 6.72 kB N/A
Overall change 87.6 kB 87.3 kB -278 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.09 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-69d5e5f..dule.js gzip 5.79 kB N/A N/A
polyfills-05..dule.js gzip 30.8 kB 30.8 kB
webpack-4f62..dule.js gzip 751 B 751 B
677f882d2ed8..dule.js gzip N/A 5.77 kB N/A
main-5b28d7a..dule.js gzip N/A 5.79 kB N/A
Overall change 82.6 kB 82.3 kB -318 B
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-8f5f611..1f7b.js gzip 1.28 kB 1.28 kB
_error-a98d9..5cb7.js gzip 3.45 kB 3.45 kB
hooks-f7f3d0..7465.js gzip 887 B 887 B
index-08fb3f..c0e9.js gzip 227 B 227 B
link-ddd176e..5566.js gzip 1.29 kB 1.29 kB
routerDirect..8aa1.js gzip 284 B 284 B
withRouter-f..e777.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-669dbe5..dule.js gzip 626 B 626 B
_error-d5979..dule.js gzip 2.3 kB 2.3 kB
hooks-805c40..dule.js gzip 387 B 387 B
index-6ba5a4..dule.js gzip 226 B 226 B
link-69bc264..dule.js gzip 1.25 kB 1.25 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-d..dule.js gzip 282 B 282 B
Overall change 5.36 kB 5.36 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 275 B 275 B
_buildManife..dule.js gzip 281 B 281 B
Overall change 556 B 556 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
_error.js 1.02 MB 1.02 MB ⚠️ +2.23 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.02 MB 1.02 MB ⚠️ +2.23 kB
link.js 1.06 MB 1.06 MB ⚠️ +1.68 kB
routerDirect.js 1.05 MB 1.05 MB ⚠️ +1.68 kB
withRouter.js 1.05 MB 1.05 MB ⚠️ +1.68 kB
Overall change 5.2 MB 5.21 MB ⚠️ +9.48 kB
Commit: 2d819dd

@Janpot Janpot marked this pull request as ready for review July 28, 2020 12:28
@ijjk
Copy link
Member

ijjk commented Jul 29, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 13.5s 13.7s ⚠️ +144ms
nodeModulesSize 65.5 MB 65.5 MB ⚠️ +3.41 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
/ failed reqs 0 0
/ total time (seconds) 2.456 2.484 ⚠️ +0.03
/ avg req/sec 1017.99 1006.49 ⚠️ -11.5
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.52 1.535 ⚠️ +0.01
/error-in-render avg req/sec 1644.36 1628.69 ⚠️ -15.67
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..b7a9.js gzip 10.2 kB 9.89 kB -284 B
framework.HASH.js gzip 39.1 kB 39.1 kB
main-7efbba9..5962.js gzip 6.76 kB 6.77 kB ⚠️ +7 B
webpack-488d..c0e7.js gzip 751 B 751 B
Overall change 56.8 kB 56.5 kB -277 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.09 kB 5.77 kB -320 B
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-763946d..dule.js gzip 5.84 kB 5.84 kB ⚠️ +1 B
webpack-4f62..dule.js gzip 751 B 751 B
Overall change 51.8 kB 51.5 kB -319 B
Legacy Client Bundles (polyfills)
vercel/next.js canary Janpot/next.js remove-qs Change
polyfills-05..1236.js gzip 30.8 kB 30.8 kB
Overall change 30.8 kB 30.8 kB
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-8f5f611..1f7b.js gzip 1.28 kB 1.28 kB
_error-a98d9..5cb7.js gzip 3.45 kB 3.45 kB
hooks-f7f3d0..7465.js gzip 887 B 887 B
index-08fb3f..c0e9.js gzip 227 B 227 B
link-6f8445b..99e1.js gzip 1.3 kB 1.3 kB
routerDirect..8aa1.js gzip 284 B 284 B
withRouter-f..e777.js gzip 284 B 284 B
Overall change 7.72 kB 7.72 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-669dbe5..dule.js gzip 626 B 626 B
_error-d5979..dule.js gzip 2.3 kB 2.3 kB
hooks-805c40..dule.js gzip 387 B 387 B
index-6ba5a4..dule.js gzip 226 B 226 B
link-91516ae..dule.js gzip 1.25 kB 1.25 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-d..dule.js gzip 282 B 282 B
Overall change 5.36 kB 5.36 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 274 B 274 B
_buildManife..dule.js gzip 282 B 282 B
Overall change 556 B 556 B
Rendered Page Sizes Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
index.html gzip 946 B 946 B
link.html gzip 953 B 953 B
withRouter.html gzip 938 B 939 B ⚠️ +1 B
Overall change 2.84 kB 2.84 kB ⚠️ +1 B

Diffs

Diff for 677f882d2ed8..f9.module.js
@@ -121,98 +121,60 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach((value, key) => {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(_ref => {
+          var [key, value] = _ref;
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(item => result.append(key, item));
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(searchParams => {
+          Array.from(searchParams.keys()).forEach(key => target.delete(key));
+          searchParams.forEach((value, key) => target.append(key, value));
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +184,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj.default = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -268,8 +288,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -457,29 +476,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach((value, key) => {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -551,7 +547,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -941,9 +937,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
           var parsed = tryParseRelativeUrl(url);
           if (!parsed) return false;
           var { pathname, searchParams } = parsed;
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          ); // url and as should always be prefixed with basePath by this
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams); // url and as should always be prefixed with basePath by this
           // point by either next/link or router.push/replace so strip the
           // basePath from the pathname to match the pages dir 1-to-1
 
@@ -1579,99 +1573,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ nOHt: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -1876,15 +1777,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       if (false) {
       }
 
-      /***/
-    },
-
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
       /***/
     }
   }
Diff for 677f882d2ed8..dbb170329.js
@@ -121,98 +121,70 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
+      var _slicedToArray = __webpack_require__("J4zp");
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach(function(value, key) {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(function(_ref) {
+          var _ref2 = _slicedToArray(_ref, 2),
+            key = _ref2[0],
+            value = _ref2[1];
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(function(item) {
+              return result.append(key, item);
+            });
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(function(searchParams) {
+          Array.from(searchParams.keys()).forEach(function(key) {
+            return target["delete"](key);
+          });
+          searchParams.forEach(function(value, key) {
+            return target.append(key, value);
+          });
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +194,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj["default"] = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -269,8 +299,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -580,29 +609,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach(function(value, key) {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -682,7 +688,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1146,8 +1152,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                             case 16:
                               (pathname = parsed.pathname),
                                 (searchParams = parsed.searchParams);
-                              query = (0,
-                              _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+                              query = (0, _querystring.searchParamsToUrlQuery)(
                                 searchParams
                               ); // url and as should always be prefixed with basePath by this
                               // point by either next/link or router.push/replace so strip the
@@ -2280,99 +2285,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ ls82: /***/ function(module, exports, __webpack_require__) {
       /**
        * Copyright (c) 2014-present, Facebook, Inc.
@@ -3494,15 +3406,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
-      /***/
-    },
-
     /***/ sXyB: /***/ function(module, exports, __webpack_require__) {
       var setPrototypeOf = __webpack_require__("SksO");
Diff for main-306355c..86680736c.js
@@ -247,15 +247,15 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
         "default"
       ] = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -400,10 +400,10 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 router.replace(
                   router.pathname +
                     "?" +
-                    (0, _querystring.stringify)(
-                      (0, _extends2["default"])(
-                        (0, _extends2["default"])({}, router.query),
-                        (0, _querystring.parse)(location.search.substr(1))
+                    String(
+                      querystring.assign(
+                        querystring.urlQueryToSearchParams(router.query),
+                        new URLSearchParams(location.search)
                       )
                     ),
                   asPath,
@@ -1490,7 +1490,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1637,7 +1637,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 searchParams = _ref.searchParams,
                 search = _ref.search;
 
-              var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+              var query = (0, _querystring.searchParamsToUrlQuery)(
                 searchParams
               );
Diff for main-3b5bed3..46.module.js
@@ -165,15 +165,15 @@
       exports.renderError = renderError;
       exports.default = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -296,10 +296,10 @@
             router.replace(
               router.pathname +
                 "?" +
-                (0, _querystring.stringify)(
-                  (0, _extends2.default)(
-                    (0, _extends2.default)({}, router.query),
-                    (0, _querystring.parse)(location.search.substr(1))
+                String(
+                  querystring.assign(
+                    querystring.urlQueryToSearchParams(router.query),
+                    new URLSearchParams(location.search)
                   )
                 ),
               asPath,
@@ -1129,7 +1129,7 @@
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1257,9 +1257,7 @@
         getDataHref(href, asPath, ssg) {
           var { pathname: hrefPathname, searchParams, search } = (0,
           _parseRelativeUrl.parseRelativeUrl)(href);
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          );
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams);
           var { pathname: asPathname } = (0,
           _parseRelativeUrl.parseRelativeUrl)(asPath);
           var route = normalizeRoute(hrefPathname);
Diff for index.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-3b5bed31b37a73599a46.module.js"
+      href="/_next/static/chunks/main-98ed20aeab716a372e1a.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-306355cc25086680736c.js"
+      src="/_next/static/chunks/main-22f5da34f070fabca74d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-3b5bed31b37a73599a46.module.js"
+      src="/_next/static/chunks/main-98ed20aeab716a372e1a.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.289defeb577dbb170329.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.87c251b0f6a0db9a6b2d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-3b5bed31b37a73599a46.module.js"
+      href="/_next/static/chunks/main-98ed20aeab716a372e1a.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -86,13 +86,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-306355cc25086680736c.js"
+      src="/_next/static/chunks/main-22f5da34f070fabca74d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-3b5bed31b37a73599a46.module.js"
+      src="/_next/static/chunks/main-98ed20aeab716a372e1a.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -122,13 +122,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.289defeb577dbb170329.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.87c251b0f6a0db9a6b2d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-3b5bed31b37a73599a46.module.js"
+      href="/_next/static/chunks/main-98ed20aeab716a372e1a.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-cdbbd579644400b29b58.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-306355cc25086680736c.js"
+      src="/_next/static/chunks/main-22f5da34f070fabca74d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-3b5bed31b37a73599a46.module.js"
+      src="/_next/static/chunks/main-98ed20aeab716a372e1a.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.289defeb577dbb170329.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.87c251b0f6a0db9a6b2d.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.277a28e61ddacb493af9.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.624ba65a9147712f2e55.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 13.7s 14.1s ⚠️ +420ms
nodeModulesSize 65.5 MB 65.5 MB ⚠️ +3.41 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..b7a9.js gzip 10.2 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
main-7efbba9..5962.js gzip 6.76 kB N/A N/A
webpack-488d..c0e7.js gzip 751 B 751 B
677f882d2ed8..fbd2.js gzip N/A 9.89 kB N/A
main-13d4fcf..5210.js gzip N/A 6.77 kB N/A
Overall change 56.8 kB 56.5 kB -277 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.09 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-763946d..dule.js gzip 5.84 kB N/A N/A
webpack-4f62..dule.js gzip 751 B 751 B
677f882d2ed8..dule.js gzip N/A 5.77 kB N/A
main-5376ed4..dule.js gzip N/A 5.84 kB N/A
Overall change 51.8 kB 51.5 kB -319 B
Legacy Client Bundles (polyfills)
vercel/next.js canary Janpot/next.js remove-qs Change
polyfills-05..1236.js gzip 30.8 kB 30.8 kB
Overall change 30.8 kB 30.8 kB
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-8f5f611..1f7b.js gzip 1.28 kB 1.28 kB
_error-a98d9..5cb7.js gzip 3.45 kB 3.45 kB
hooks-f7f3d0..7465.js gzip 887 B 887 B
index-08fb3f..c0e9.js gzip 227 B 227 B
link-6f8445b..99e1.js gzip 1.3 kB 1.3 kB
routerDirect..8aa1.js gzip 284 B 284 B
withRouter-f..e777.js gzip 284 B 284 B
Overall change 7.72 kB 7.72 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-669dbe5..dule.js gzip 626 B 626 B
_error-d5979..dule.js gzip 2.3 kB 2.3 kB
hooks-805c40..dule.js gzip 387 B 387 B
index-6ba5a4..dule.js gzip 226 B 226 B
link-91516ae..dule.js gzip 1.25 kB 1.25 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-d..dule.js gzip 282 B 282 B
Overall change 5.36 kB 5.36 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 274 B 274 B
_buildManife..dule.js gzip 282 B 282 B
Overall change 556 B 556 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
_error.js 1.02 MB 1.02 MB ⚠️ +2.23 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.02 MB 1.02 MB ⚠️ +2.23 kB
link.js 1.06 MB 1.06 MB ⚠️ +1.68 kB
routerDirect.js 1.05 MB 1.05 MB ⚠️ +1.68 kB
withRouter.js 1.05 MB 1.05 MB ⚠️ +1.68 kB
Overall change 5.2 MB 5.21 MB ⚠️ +9.48 kB
Commit: 10c4207

@ijjk
Copy link
Member

ijjk commented Aug 6, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 11.3s 12.1s ⚠️ +829ms
nodeModulesSize 66 MB 66 MB ⚠️ +3.41 kB
Page Load Tests Overall increase ✓
vercel/next.js canary Janpot/next.js remove-qs Change
/ failed reqs 0 0
/ total time (seconds) 2.213 2.177 -0.04
/ avg req/sec 1129.72 1148.62 +18.9
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.209 1.175 -0.03
/error-in-render avg req/sec 2068.61 2128.03 +59.42
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..8895.js gzip 10.3 kB 9.99 kB -279 B
framework.HASH.js gzip 39.1 kB 39.1 kB
main-da9f477..d581.js gzip 6.73 kB 6.74 kB ⚠️ +6 B
webpack-ccf5..276a.js gzip 751 B 751 B
Overall change 56.9 kB 56.6 kB -273 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.21 kB 5.89 kB -321 B
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-ccc9938..dule.js gzip 5.81 kB 5.81 kB
webpack-10c7..dule.js gzip 751 B 751 B
Overall change 51.9 kB 51.6 kB -321 B
Legacy Client Bundles (polyfills)
vercel/next.js canary Janpot/next.js remove-qs Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-f4d2979..e57b.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-653c74f..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 273 B 273 B
_buildManife..dule.js gzip 280 B 280 B
Overall change 553 B 553 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
index.html gzip 947 B 946 B -1 B
link.html gzip 953 B 953 B
withRouter.html gzip 942 B 940 B -2 B
Overall change 2.84 kB 2.84 kB -3 B

Diffs

Diff for 677f882d2ed8..25.module.js
@@ -121,98 +121,60 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach((value, key) => {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(_ref => {
+          var [key, value] = _ref;
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(item => result.append(key, item));
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(searchParams => {
+          Array.from(searchParams.keys()).forEach(key => target.delete(key));
+          searchParams.forEach((value, key) => target.append(key, value));
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +184,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj.default = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -268,8 +288,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -457,29 +476,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach((value, key) => {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -553,7 +549,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -962,9 +958,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
           var parsed = tryParseRelativeUrl(url);
           if (!parsed) return false;
           var { pathname, searchParams } = parsed;
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          ); // url and as should always be prefixed with basePath by this
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams); // url and as should always be prefixed with basePath by this
           // point by either next/link or router.push/replace so strip the
           // basePath from the pathname to match the pages dir 1-to-1
 
@@ -1614,99 +1608,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ nOHt: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -1911,15 +1812,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       if (false) {
       }
 
-      /***/
-    },
-
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
       /***/
     }
   }
Diff for 677f882d2ed8..c54397d07.js
@@ -121,98 +121,70 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
+      var _slicedToArray = __webpack_require__("J4zp");
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach(function(value, key) {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(function(_ref) {
+          var _ref2 = _slicedToArray(_ref, 2),
+            key = _ref2[0],
+            value = _ref2[1];
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(function(item) {
+              return result.append(key, item);
+            });
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(function(searchParams) {
+          Array.from(searchParams.keys()).forEach(function(key) {
+            return target["delete"](key);
+          });
+          searchParams.forEach(function(value, key) {
+            return target.append(key, value);
+          });
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +194,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj["default"] = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -269,8 +299,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -580,29 +609,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach(function(value, key) {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -684,7 +690,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1174,8 +1180,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                           case 18:
                             (pathname = parsed.pathname),
                               (searchParams = parsed.searchParams);
-                            query = (0,
-                            _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+                            query = (0, _querystring.searchParamsToUrlQuery)(
                               searchParams
                             ); // url and as should always be prefixed with basePath by this
                             // point by either next/link or router.push/replace so strip the
@@ -2292,99 +2297,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ ls82: /***/ function(module, exports, __webpack_require__) {
       /**
        * Copyright (c) 2014-present, Facebook, Inc.
@@ -3506,15 +3418,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
-      /***/
-    },
-
     /***/ sXyB: /***/ function(module, exports, __webpack_require__) {
       var setPrototypeOf = __webpack_require__("SksO");
Diff for main-badaab3..727b6039e.js
@@ -247,15 +247,15 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
         "default"
       ] = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -393,10 +393,10 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 router.replace(
                   router.pathname +
                     "?" +
-                    (0, _querystring.stringify)(
-                      (0, _extends2["default"])(
-                        (0, _extends2["default"])({}, router.query),
-                        (0, _querystring.parse)(location.search.substr(1))
+                    String(
+                      querystring.assign(
+                        querystring.urlQueryToSearchParams(router.query),
+                        new URLSearchParams(location.search)
                       )
                     ),
                   asPath,
@@ -1483,7 +1483,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1630,7 +1630,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 searchParams = _ref.searchParams,
                 search = _ref.search;
 
-              var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+              var query = (0, _querystring.searchParamsToUrlQuery)(
                 searchParams
               );
Diff for main-d0f2719..fc.module.js
@@ -165,15 +165,15 @@
       exports.renderError = renderError;
       exports.default = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -289,10 +289,10 @@
             router.replace(
               router.pathname +
                 "?" +
-                (0, _querystring.stringify)(
-                  (0, _extends2.default)(
-                    (0, _extends2.default)({}, router.query),
-                    (0, _querystring.parse)(location.search.substr(1))
+                String(
+                  querystring.assign(
+                    querystring.urlQueryToSearchParams(router.query),
+                    new URLSearchParams(location.search)
                   )
                 ),
               asPath,
@@ -1122,7 +1122,7 @@
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1250,9 +1250,7 @@
         getDataHref(href, asPath, ssg) {
           var { pathname: hrefPathname, searchParams, search } = (0,
           _parseRelativeUrl.parseRelativeUrl)(href);
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          );
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams);
           var { pathname: asPathname } = (0,
           _parseRelativeUrl.parseRelativeUrl)(asPath);
           var route = normalizeRoute(hrefPathname);
Diff for index.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      href="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-f73ba3fc145972ef83e9.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-badaab334df727b6039e.js"
+      src="/_next/static/chunks/main-81c705185346b77df838.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      src="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5b321416a5cc54397d07.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.ccd9e85644ff09d2c87c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      href="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -86,13 +86,13 @@
       src="/_next/static/chunks/polyfills-f73ba3fc145972ef83e9.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-badaab334df727b6039e.js"
+      src="/_next/static/chunks/main-81c705185346b77df838.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      src="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -122,13 +122,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5b321416a5cc54397d07.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.ccd9e85644ff09d2c87c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      href="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-f73ba3fc145972ef83e9.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-badaab334df727b6039e.js"
+      src="/_next/static/chunks/main-81c705185346b77df838.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      src="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5b321416a5cc54397d07.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.ccd9e85644ff09d2c87c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 12.7s 12.5s -268ms
nodeModulesSize 66 MB 66 MB ⚠️ +3.41 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..8895.js gzip 10.3 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
main-da9f477..d581.js gzip 6.73 kB N/A N/A
webpack-ccf5..276a.js gzip 751 B 751 B
677f882d2ed8..795d.js gzip N/A 9.99 kB N/A
main-c30ac70..0d39.js gzip N/A 6.74 kB N/A
Overall change 56.9 kB 56.6 kB -273 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.21 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-ccc9938..dule.js gzip 5.81 kB N/A N/A
webpack-10c7..dule.js gzip 751 B 751 B
677f882d2ed8..dule.js gzip N/A 5.89 kB N/A
main-61da9c7..dule.js gzip N/A 5.81 kB N/A
Overall change 51.9 kB 51.6 kB -321 B
Legacy Client Bundles (polyfills)
vercel/next.js canary Janpot/next.js remove-qs Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-f4d2979..e57b.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-653c74f..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 273 B 273 B
_buildManife..dule.js gzip 280 B 280 B
Overall change 553 B 553 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
_error.js 1.02 MB 1.02 MB ⚠️ +2.23 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.02 MB 1.02 MB ⚠️ +2.23 kB
link.js 1.06 MB 1.06 MB ⚠️ +1.68 kB
routerDirect.js 1.05 MB 1.06 MB ⚠️ +1.68 kB
withRouter.js 1.05 MB 1.06 MB ⚠️ +1.68 kB
Overall change 5.22 MB 5.23 MB ⚠️ +9.48 kB
Commit: c6df94e

Copy link
Member

@Timer Timer left a comment

Choose a reason for hiding this comment

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

LGTM!

@ijjk
Copy link
Member

ijjk commented Aug 6, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 12.9s 13.2s ⚠️ +298ms
nodeModulesSize 66 MB 66 MB ⚠️ +3.41 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
/ failed reqs 0 0
/ total time (seconds) 2.482 2.499 ⚠️ +0.02
/ avg req/sec 1007.22 1000.26 ⚠️ -6.96
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.477 1.487 ⚠️ +0.01
/error-in-render avg req/sec 1692.97 1681.77 ⚠️ -11.2
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..8895.js gzip 10.3 kB 9.99 kB -279 B
framework.HASH.js gzip 39.1 kB 39.1 kB
main-da9f477..d581.js gzip 6.73 kB 6.74 kB ⚠️ +6 B
webpack-ccf5..276a.js gzip 751 B 751 B
Overall change 56.9 kB 56.6 kB -273 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.21 kB 5.89 kB -321 B
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-ccc9938..dule.js gzip 5.81 kB 5.81 kB
webpack-10c7..dule.js gzip 751 B 751 B
Overall change 51.9 kB 51.6 kB -321 B
Legacy Client Bundles (polyfills)
vercel/next.js canary Janpot/next.js remove-qs Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-f4d2979..e57b.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-653c74f..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 273 B 273 B
_buildManife..dule.js gzip 280 B 280 B
Overall change 553 B 553 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
index.html gzip 947 B 946 B -1 B
link.html gzip 953 B 953 B
withRouter.html gzip 942 B 940 B -2 B
Overall change 2.84 kB 2.84 kB -3 B

Diffs

Diff for 677f882d2ed8..25.module.js
@@ -121,98 +121,60 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach((value, key) => {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(_ref => {
+          var [key, value] = _ref;
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(item => result.append(key, item));
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(searchParams => {
+          Array.from(searchParams.keys()).forEach(key => target.delete(key));
+          searchParams.forEach((value, key) => target.append(key, value));
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +184,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj.default = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -268,8 +288,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -457,29 +476,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach((value, key) => {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -553,7 +549,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -962,9 +958,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
           var parsed = tryParseRelativeUrl(url);
           if (!parsed) return false;
           var { pathname, searchParams } = parsed;
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          ); // url and as should always be prefixed with basePath by this
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams); // url and as should always be prefixed with basePath by this
           // point by either next/link or router.push/replace so strip the
           // basePath from the pathname to match the pages dir 1-to-1
 
@@ -1614,99 +1608,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ nOHt: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -1911,15 +1812,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       if (false) {
       }
 
-      /***/
-    },
-
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
       /***/
     }
   }
Diff for 677f882d2ed8..c54397d07.js
@@ -121,98 +121,70 @@
       /***/
     },
 
-    /***/ "4JlD": /***/ function(module, exports, __webpack_require__) {
+    /***/ "3WeD": /***/ function(module, exports, __webpack_require__) {
       "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-      var stringifyPrimitive = function(v) {
-        switch (typeof v) {
-          case "string":
-            return v;
+      var _slicedToArray = __webpack_require__("J4zp");
 
-          case "boolean":
-            return v ? "true" : "false";
+      exports.__esModule = true;
+      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
+      exports.urlQueryToSearchParams = urlQueryToSearchParams;
+      exports.assign = assign;
 
-          case "number":
-            return isFinite(v) ? v : "";
+      function searchParamsToUrlQuery(searchParams) {
+        var query = {};
+        searchParams.forEach(function(value, key) {
+          if (typeof query[key] === "undefined") {
+            query[key] = value;
+          } else if (Array.isArray(query[key])) {
+            query[key].push(value);
+          } else {
+            query[key] = [query[key], value];
+          }
+        });
+        return query;
+      }
 
-          default:
-            return "";
-        }
-      };
+      function urlQueryToSearchParams(urlQuery) {
+        var result = new URLSearchParams();
+        Object.entries(urlQuery).forEach(function(_ref) {
+          var _ref2 = _slicedToArray(_ref, 2),
+            key = _ref2[0],
+            value = _ref2[1];
 
-      module.exports = function(obj, sep, eq, name) {
-        sep = sep || "&";
-        eq = eq || "=";
-        if (obj === null) {
-          obj = undefined;
-        }
+          if (Array.isArray(value)) {
+            value.forEach(function(item) {
+              return result.append(key, item);
+            });
+          } else {
+            result.set(key, value);
+          }
+        });
+        return result;
+      }
 
-        if (typeof obj === "object") {
-          return map(objectKeys(obj), function(k) {
-            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-            if (isArray(obj[k])) {
-              return map(obj[k], function(v) {
-                return ks + encodeURIComponent(stringifyPrimitive(v));
-              }).join(sep);
-            } else {
-              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-            }
-          }).join(sep);
+      function assign(target) {
+        for (
+          var _len = arguments.length,
+            searchParamsList = new Array(_len > 1 ? _len - 1 : 0),
+            _key = 1;
+          _key < _len;
+          _key++
+        ) {
+          searchParamsList[_key - 1] = arguments[_key];
         }
 
-        if (!name) return "";
-        return (
-          encodeURIComponent(stringifyPrimitive(name)) +
-          eq +
-          encodeURIComponent(stringifyPrimitive(obj))
-        );
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      function map(xs, f) {
-        if (xs.map) return xs.map(f);
-        var res = [];
-        for (var i = 0; i < xs.length; i++) {
-          res.push(f(xs[i], i));
-        }
-        return res;
+        searchParamsList.forEach(function(searchParams) {
+          Array.from(searchParams.keys()).forEach(function(key) {
+            return target["delete"](key);
+          });
+          searchParams.forEach(function(value, key) {
+            return target.append(key, value);
+          });
+        });
+        return target;
       }
 
-      var objectKeys =
-        Object.keys ||
-        function(obj) {
-          var res = [];
-          for (var key in obj) {
-            if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-          }
-          return res;
-        };
-
       /***/
     },
 
@@ -222,7 +194,65 @@
       exports.__esModule = true;
       exports.formatUrl = formatUrl;
 
-      var _querystring = __webpack_require__("s4NR"); // Format function modified from nodejs
+      var querystring = _interopRequireWildcard(__webpack_require__("3WeD"));
+
+      function _getRequireWildcardCache() {
+        if (typeof WeakMap !== "function") return null;
+        var cache = new WeakMap();
+
+        _getRequireWildcardCache = function _getRequireWildcardCache() {
+          return cache;
+        };
+
+        return cache;
+      }
+
+      function _interopRequireWildcard(obj) {
+        if (obj && obj.__esModule) {
+          return obj;
+        }
+
+        if (
+          obj === null ||
+          (typeof obj !== "object" && typeof obj !== "function")
+        ) {
+          return {
+            default: obj
+          };
+        }
+
+        var cache = _getRequireWildcardCache();
+
+        if (cache && cache.has(obj)) {
+          return cache.get(obj);
+        }
+
+        var newObj = {};
+        var hasPropertyDescriptor =
+          Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+        for (var key in obj) {
+          if (Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor
+              ? Object.getOwnPropertyDescriptor(obj, key)
+              : null;
+
+            if (desc && (desc.get || desc.set)) {
+              Object.defineProperty(newObj, key, desc);
+            } else {
+              newObj[key] = obj[key];
+            }
+          }
+        }
+
+        newObj["default"] = obj;
+
+        if (cache) {
+          cache.set(obj, newObj);
+        }
+
+        return newObj;
+      } // Format function modified from nodejs
       // Copyright Joyent, Inc. and other Node contributors.
       //
       // Permission is hereby granted, free of charge, to any person obtaining a
@@ -269,8 +299,7 @@
         }
 
         if (query && typeof query === "object") {
-          // query = '' + new URLSearchParams(query);
-          query = (0, _querystring.encode)(query);
+          query = String(querystring.urlQueryToSearchParams(query));
         }
 
         var search = urlObj.search || (query && "?".concat(query)) || "";
@@ -580,29 +609,6 @@
       /***/
     },
 
-    /***/ cE6r: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.__esModule = true;
-      exports.searchParamsToUrlQuery = searchParamsToUrlQuery;
-
-      function searchParamsToUrlQuery(searchParams) {
-        var query = {};
-        searchParams.forEach(function(value, key) {
-          if (typeof query[key] === "undefined") {
-            query[key] = value;
-          } else if (Array.isArray(query[key])) {
-            query[key].push(value);
-          } else {
-            query[key] = [query[key], value];
-          }
-        });
-        return query;
-      }
-
-      /***/
-    },
-
     /***/ dZ6Y: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
@@ -684,7 +690,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1174,8 +1180,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                           case 18:
                             (pathname = parsed.pathname),
                               (searchParams = parsed.searchParams);
-                            query = (0,
-                            _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+                            query = (0, _querystring.searchParamsToUrlQuery)(
                               searchParams
                             ); // url and as should always be prefixed with basePath by this
                             // point by either next/link or router.push/replace so strip the
@@ -2292,99 +2297,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ kd2E: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-      // Copyright Joyent, Inc. and other Node contributors.
-      //
-      // Permission is hereby granted, free of charge, to any person obtaining a
-      // copy of this software and associated documentation files (the
-      // "Software"), to deal in the Software without restriction, including
-      // without limitation the rights to use, copy, modify, merge, publish,
-      // distribute, sublicense, and/or sell copies of the Software, and to permit
-      // persons to whom the Software is furnished to do so, subject to the
-      // following conditions:
-      //
-      // The above copyright notice and this permission notice shall be included
-      // in all copies or substantial portions of the Software.
-      //
-      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-      // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-      // If obj.hasOwnProperty has been overridden, then calling
-      // obj.hasOwnProperty(prop) will break.
-      // See: https://github.com/joyent/node/issues/1707
-      function hasOwnProperty(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-      }
-
-      module.exports = function(qs, sep, eq, options) {
-        sep = sep || "&";
-        eq = eq || "=";
-        var obj = {};
-
-        if (typeof qs !== "string" || qs.length === 0) {
-          return obj;
-        }
-
-        var regexp = /\+/g;
-        qs = qs.split(sep);
-
-        var maxKeys = 1000;
-        if (options && typeof options.maxKeys === "number") {
-          maxKeys = options.maxKeys;
-        }
-
-        var len = qs.length;
-        // maxKeys <= 0 means that we should not limit keys count
-        if (maxKeys > 0 && len > maxKeys) {
-          len = maxKeys;
-        }
-
-        for (var i = 0; i < len; ++i) {
-          var x = qs[i].replace(regexp, "%20"),
-            idx = x.indexOf(eq),
-            kstr,
-            vstr,
-            k,
-            v;
-
-          if (idx >= 0) {
-            kstr = x.substr(0, idx);
-            vstr = x.substr(idx + 1);
-          } else {
-            kstr = x;
-            vstr = "";
-          }
-
-          k = decodeURIComponent(kstr);
-          v = decodeURIComponent(vstr);
-
-          if (!hasOwnProperty(obj, k)) {
-            obj[k] = v;
-          } else if (isArray(obj[k])) {
-            obj[k].push(v);
-          } else {
-            obj[k] = [obj[k], v];
-          }
-        }
-
-        return obj;
-      };
-
-      var isArray =
-        Array.isArray ||
-        function(xs) {
-          return Object.prototype.toString.call(xs) === "[object Array]";
-        };
-
-      /***/
-    },
-
     /***/ ls82: /***/ function(module, exports, __webpack_require__) {
       /**
        * Copyright (c) 2014-present, Facebook, Inc.
@@ -3506,15 +3418,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       /***/
     },
 
-    /***/ s4NR: /***/ function(module, exports, __webpack_require__) {
-      "use strict";
-
-      exports.decode = exports.parse = __webpack_require__("kd2E");
-      exports.encode = exports.stringify = __webpack_require__("4JlD");
-
-      /***/
-    },
-
     /***/ sXyB: /***/ function(module, exports, __webpack_require__) {
       var setPrototypeOf = __webpack_require__("SksO");
Diff for main-badaab3..727b6039e.js
@@ -247,15 +247,15 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
         "default"
       ] = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -393,10 +393,10 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 router.replace(
                   router.pathname +
                     "?" +
-                    (0, _querystring.stringify)(
-                      (0, _extends2["default"])(
-                        (0, _extends2["default"])({}, router.query),
-                        (0, _querystring.parse)(location.search.substr(1))
+                    String(
+                      querystring.assign(
+                        querystring.urlQueryToSearchParams(router.query),
+                        new URLSearchParams(location.search)
                       )
                     ),
                   asPath,
@@ -1483,7 +1483,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1630,7 +1630,7 @@ _N_E = (window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([
                 searchParams = _ref.searchParams,
                 search = _ref.search;
 
-              var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
+              var query = (0, _querystring.searchParamsToUrlQuery)(
                 searchParams
               );
Diff for main-d0f2719..fc.module.js
@@ -165,15 +165,15 @@
       exports.renderError = renderError;
       exports.default = exports.emitter = exports.router = exports.version = void 0;
 
+      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
+
       var _interopRequireWildcard2 = _interopRequireDefault(
         __webpack_require__("284h")
       );
 
-      var _extends2 = _interopRequireDefault(__webpack_require__("pVnL"));
-
       var _router = __webpack_require__("nOHt");
 
-      var _querystring = __webpack_require__("s4NR");
+      var querystring = _interopRequireWildcard3(__webpack_require__("3WeD"));
 
       var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
@@ -289,10 +289,10 @@
             router.replace(
               router.pathname +
                 "?" +
-                (0, _querystring.stringify)(
-                  (0, _extends2.default)(
-                    (0, _extends2.default)({}, router.query),
-                    (0, _querystring.parse)(location.search.substr(1))
+                String(
+                  querystring.assign(
+                    querystring.urlQueryToSearchParams(router.query),
+                    new URLSearchParams(location.search)
                   )
                 ),
               asPath,
@@ -1122,7 +1122,7 @@
 
       var _routeRegex = __webpack_require__("YTqd");
 
-      var _searchParamsToUrlQuery = __webpack_require__("cE6r");
+      var _querystring = __webpack_require__("3WeD");
 
       var _parseRelativeUrl = __webpack_require__("hS4m");
 
@@ -1250,9 +1250,7 @@
         getDataHref(href, asPath, ssg) {
           var { pathname: hrefPathname, searchParams, search } = (0,
           _parseRelativeUrl.parseRelativeUrl)(href);
-          var query = (0, _searchParamsToUrlQuery.searchParamsToUrlQuery)(
-            searchParams
-          );
+          var query = (0, _querystring.searchParamsToUrlQuery)(searchParams);
           var { pathname: asPathname } = (0,
           _parseRelativeUrl.parseRelativeUrl)(asPath);
           var route = normalizeRoute(hrefPathname);
Diff for index.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      href="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-f73ba3fc145972ef83e9.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-badaab334df727b6039e.js"
+      src="/_next/static/chunks/main-81c705185346b77df838.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      src="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5b321416a5cc54397d07.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.ccd9e85644ff09d2c87c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      href="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -86,13 +86,13 @@
       src="/_next/static/chunks/polyfills-f73ba3fc145972ef83e9.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-badaab334df727b6039e.js"
+      src="/_next/static/chunks/main-81c705185346b77df838.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      src="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -122,13 +122,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5b321416a5cc54397d07.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.ccd9e85644ff09d2c87c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -6,7 +6,7 @@
     <meta name="next-head-count" content="2" />
     <link
       rel="preload"
-      href="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      href="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -81,13 +81,13 @@
       src="/_next/static/chunks/polyfills-f73ba3fc145972ef83e9.js"
     ></script>
     <script
-      src="/_next/static/chunks/main-badaab334df727b6039e.js"
+      src="/_next/static/chunks/main-81c705185346b77df838.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/main-d0f2719cffdbb7cf0efc.module.js"
+      src="/_next/static/chunks/main-81680a64ae8f4ce8647f.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
@@ -117,13 +117,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5b321416a5cc54397d07.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.ccd9e85644ff09d2c87c.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.4411412e8e5469704f25.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.abab298279f1577d0b53.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
buildDuration 14.7s 14.5s -154ms
nodeModulesSize 66 MB 66 MB ⚠️ +3.41 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..8895.js gzip 10.3 kB N/A N/A
framework.HASH.js gzip 39.1 kB 39.1 kB
main-da9f477..d581.js gzip 6.73 kB N/A N/A
webpack-ccf5..276a.js gzip 751 B 751 B
677f882d2ed8..795d.js gzip N/A 9.99 kB N/A
main-c30ac70..0d39.js gzip N/A 6.74 kB N/A
Overall change 56.9 kB 56.6 kB -273 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary Janpot/next.js remove-qs Change
677f882d2ed8..dule.js gzip 6.21 kB N/A N/A
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-ccc9938..dule.js gzip 5.81 kB N/A N/A
webpack-10c7..dule.js gzip 751 B 751 B
677f882d2ed8..dule.js gzip N/A 5.89 kB N/A
main-61da9c7..dule.js gzip N/A 5.81 kB N/A
Overall change 51.9 kB 51.6 kB -321 B
Legacy Client Bundles (polyfills)
vercel/next.js canary Janpot/next.js remove-qs Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary Janpot/next.js remove-qs Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-f4d2979..e57b.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary Janpot/next.js remove-qs Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-653c74f..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary Janpot/next.js remove-qs Change
_buildManifest.js gzip 273 B 273 B
_buildManife..dule.js gzip 280 B 280 B
Overall change 553 B 553 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary Janpot/next.js remove-qs Change
_error.js 1.03 MB 1.03 MB ⚠️ +2.23 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB ⚠️ +2.23 kB
link.js 1.07 MB 1.07 MB ⚠️ +1.68 kB
routerDirect.js 1.06 MB 1.06 MB ⚠️ +1.68 kB
withRouter.js 1.06 MB 1.06 MB ⚠️ +1.68 kB
Overall change 5.25 MB 5.26 MB ⚠️ +9.48 kB
Commit: bdf81a5

@Timer Timer merged commit cbfb8cb into vercel:canary Aug 6, 2020
@Janpot Janpot deleted the remove-qs branch August 6, 2020 16:44
@vercel vercel locked as resolved and limited conversation to collaborators Jan 30, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants