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

Refactor export marks of server components #34945

Merged
merged 3 commits into from
Mar 2, 2022
Merged

Conversation

shuding
Copy link
Member

@shuding shuding commented Mar 2, 2022

Currently, we attach .__next_rsc__ and .__webpack_require__ to the default export of Server Components. While these two are necessary, it becomes tricky when:

  1. There is no default export of that server component file.
  2. The default export doesn't have an identifier/name, e.g. export default function () {}

For 2., if we remove the default export function name in the test (updated in this PR), we will have the following error:

TypeError: Cannot read property 'value' of null
  at parseImportsInfo (/node_modules/next/dist/build/webpack/loaders/next-flight-server-loader.js:96:60)
  at async Object.transformSource (/node_modules/next/dist/build/webpack/loaders/next-flight-server-loader.js:140:64)

Due to these reasons, I refactored the loader to add a named export __next_rsc__ for all these necessary things, including the no-op export. That also simplifies the corresponding logic of the loader as we don't need to deal with export expressions.

Related changes are mostly passing ComponentMod and AppMod to render and client.

Bug

  • Related issues linked using fixes #number
  • Integration tests added
  • Errors have helpful link attached, see contributing.md

Feature

  • Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
  • Related issues linked using fixes #number
  • Integration tests added
  • Documentation added
  • Telemetry added. In case of a feature if it's used or not.
  • Errors have helpful link attached, see contributing.md

Documentation / Examples

  • Make sure the linting passes by running yarn lint

@ijjk ijjk added created-by: Next.js team PRs by the Next.js team. type: next labels Mar 2, 2022
@shuding shuding requested a review from huozhi March 2, 2022 00:33
@ijjk
Copy link
Member

ijjk commented Mar 2, 2022

Failing test suites

Commit: 6f565dd

yarn testheadless test/production/react-18-streaming-ssr/index.test.ts

  • react 18 streaming SSR in minimal mode > should generate html response by streaming correctly
Expand output

● react 18 streaming SSR in minimal mode › should generate html response by streaming correctly

expect(received).toContain(expected) // indexOf

Expected substring: "static streaming"
Received string:    "<!DOCTYPE html><html><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><meta name=\"next-font-preconnect\"/><noscript data-n-css=\"\"></noscript><link rel=\"preload\" href=\"/_next/static/chunks/webpack-7e3680b1404f2e23.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/framework-39642de6876c3edc.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/main-d7da6c565c19cfa2.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app-804e6adb061156cd.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/index-5f4384e0f3bd11ce.js\" as=\"script\"/></head><body><div id=\"__next\"><!--$?--><template id=\"B:0\"></template><!--/$--></div><div hidden id=\"S:0\"><template id=\"P:1\"></template></div><script>function $RX(a){if(a=document.getElementById(a))a=a.previousSibling,a.data=\"$!\",a._reactRetry&&a._reactRetry()};$RX(\"B:0\")</script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{\"router\":{\"route\":\"/\",\"pathname\":\"/\",\"query\":{},\"asPath\":\"/\",\"isFallback\":false,\"basePath\":\"\",\"isReady\":false,\"isPreview\":false,\"isLocaleDomain\":false}}},\"page\":\"/\",\"query\":{},\"buildId\":\"TDYjCVKB5C5J0xQqMs5i-\",\"isFallback\":false,\"rsc\":true,\"scriptLoader\":[]}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills-5cd94c89d3acac5f.js\"></script><script src=\"/_next/static/chunks/webpack-7e3680b1404f2e23.js\" async=\"\"></script><script src=\"/_next/static/chunks/framework-39642de6876c3edc.js\" async=\"\"></script><script src=\"/_next/static/chunks/main-d7da6c565c19cfa2.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/_app-804e6adb061156cd.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/index-5f4384e0f3bd11ce.js\" async=\"\"></script><script src=\"/_next/static/TDYjCVKB5C5J0xQqMs5i-/_buildManifest.js\" async=\"\"></script><script src=\"/_next/static/TDYjCVKB5C5J0xQqMs5i-/_ssgManifest.js\" async=\"\"></script><script src=\"/_next/static/TDYjCVKB5C5J0xQqMs5i-/_middlewareManifest.js\" async=\"\"></script><script>(self.__next_s=self.__next_s||[]).push([0,\"/,R:6\"])</script><script>(self.__next_s=self.__next_s||[]).push([1,\"/,R:6\",\"E0:{\\\"message\\\":\\\"Unsupported server component type: {...}\\\",\\\"stack\\\":\\\"Error: Unsupported server component type: {...}\\\\n    at K (/tmp/next-install-1646181843822/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js:11:428)\\\\n    at M (/tmp/next-install-1646181843822/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js:21:241)\\\\n    at Object.start (/tmp/next-install-1646181843822/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js:26:119)\\\\n    at new ReadableStream (/tmp/next-install-1646181843822/node_modules/next/dist/server/web/sandbox/readable-stream.js:50:18)\\\\n    at Object.exports.renderToReadableStream (/tmp/next-install-1646181843822/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js:26:82)\\\\n    at ServerComponentWrapper (/tmp/next-install-1646181843822/node_modules/next/dist/server/render.js:191:53)\\\\n    at Ec (/tmp/next-install-1646181843822/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:61:143)\\\\n    at Hc (/tmp/next-install-1646181843822/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:63:253)\\\\n    at Z (/tmp/next-install-1646181843822/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:68:89)\\\\n    at Ic (/tmp/next-install-1646181843822/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:98)\\\"}\\n\"])</script></body></html>"

  37 |   it('should generate html response by streaming correctly', async () => {
  38 |     const html = await renderViaHTTP(next.url, '/')
> 39 |     expect(html).toContain('static streaming')
     |                  ^
  40 |   })
  41 | })
  42 |

  at Object.<anonymous> (production/react-18-streaming-ssr/index.test.ts:39:18)

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

@ijjk

This comment has been minimized.

@shuding shuding marked this pull request as ready for review March 2, 2022 18:05
@ijjk
Copy link
Member

ijjk commented Mar 2, 2022

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall decrease ✓
vercel/next.js canary shuding/next.js shu/f8d8 Change
buildDuration 15.4s 15.6s ⚠️ +191ms
buildDurationCached 6s 6.1s ⚠️ +19ms
nodeModulesSize 372 MB 372 MB -1.71 kB
Page Load Tests Overall increase ✓
vercel/next.js canary shuding/next.js shu/f8d8 Change
/ failed reqs 0 0
/ total time (seconds) 2.941 2.95 ⚠️ +0.01
/ avg req/sec 850 847.57 ⚠️ -2.43
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.196 1.176 -0.02
/error-in-render avg req/sec 2090.42 2126.5 +36.08
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary shuding/next.js shu/f8d8 Change
925.HASH.js gzip 179 B 179 B
framework-HASH.js gzip 42 kB 42 kB
main-HASH.js gzip 27.9 kB 27.9 kB ⚠️ +1 B
webpack-HASH.js gzip 1.44 kB 1.44 kB
Overall change 71.5 kB 71.5 kB ⚠️ +1 B
Legacy Client Bundles (polyfills)
vercel/next.js canary shuding/next.js shu/f8d8 Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary shuding/next.js shu/f8d8 Change
_app-HASH.js gzip 1.36 kB 1.36 kB
_error-HASH.js gzip 192 B 192 B
amp-HASH.js gzip 309 B 309 B
css-HASH.js gzip 327 B 327 B
dynamic-HASH.js gzip 2.57 kB 2.57 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 920 B 920 B
image-HASH.js gzip 5.05 kB 5.05 kB
index-HASH.js gzip 263 B 263 B
link-HASH.js gzip 2.26 kB 2.26 kB
routerDirect..HASH.js gzip 320 B 320 B
script-HASH.js gzip 387 B 387 B
withRouter-HASH.js gzip 319 B 319 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 14.7 kB 14.7 kB
Client Build Manifests
vercel/next.js canary shuding/next.js shu/f8d8 Change
_buildManifest.js gzip 459 B 459 B
Overall change 459 B 459 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary shuding/next.js shu/f8d8 Change
index.html gzip 533 B 531 B -2 B
link.html gzip 546 B 545 B -1 B
withRouter.html gzip 527 B 526 B -1 B
Overall change 1.61 kB 1.6 kB -4 B

Diffs

Diff for main-HASH.js
@@ -700,6 +700,7 @@
       var router;
       exports.router = router;
       var CachedApp, onPerfEntry;
+      var isAppRSC;
       headManager.getIsSsr = function() {
         return router.isSsr;
       };
@@ -842,6 +843,7 @@
                       (app = appEntrypoint.component),
                         (mod = appEntrypoint.exports);
                       CachedApp = app;
+                      isAppRSC = !!mod.__next_rsc__;
                       exportedReportWebVitals = mod && mod.reportWebVitals;
                       onPerfEntry = function(param) {
                         var id = param.id,
@@ -882,30 +884,30 @@
                         // error, so we need to skip waiting for the entrypoint.
                         true
                       ) {
-                        _ctx.next = 17;
+                        _ctx.next = 18;
                         break;
                       }
                       _ctx.t0 = {
                         error: hydrateErr
                       };
-                      _ctx.next = 20;
+                      _ctx.next = 21;
                       break;
-                    case 17:
-                      _ctx.next = 19;
+                    case 18:
+                      _ctx.next = 20;
                       return pageLoader.routeLoader.whenEntrypoint(page);
-                    case 19:
-                      _ctx.t0 = _ctx.sent;
                     case 20:
+                      _ctx.t0 = _ctx.sent;
+                    case 21:
                       pageEntrypoint = _ctx.t0;
                       if (!("error" in pageEntrypoint)) {
-                        _ctx.next = 23;
+                        _ctx.next = 24;
                         break;
                       }
                       throw pageEntrypoint.error;
-                    case 23:
+                    case 24:
                       CachedComponent = pageEntrypoint.component;
                       if (true) {
-                        _ctx.next = 28;
+                        _ctx.next = 29;
                         break;
                       }
                       isValidElementType = Object(
@@ -918,7 +920,7 @@
                         })()
                       );
                       if (isValidElementType(CachedComponent)) {
-                        _ctx.next = 28;
+                        _ctx.next = 29;
                         break;
                       }
                       throw new Error(
@@ -927,24 +929,24 @@
                           '"'
                         )
                       );
-                    case 28:
-                      _ctx.next = 33;
+                    case 29:
+                      _ctx.next = 34;
                       break;
-                    case 30:
-                      _ctx.prev = 30;
+                    case 31:
+                      _ctx.prev = 31;
                       _ctx.t1 = _ctx["catch"](3);
                       // This catches errors like throwing in the top level of a module
                       initialErr = (0, _isError).getProperError(_ctx.t1);
-                    case 33:
+                    case 34:
                       if (false) {
                       }
                       if (!window.__NEXT_PRELOADREADY) {
-                        _ctx.next = 37;
+                        _ctx.next = 38;
                         break;
                       }
-                      _ctx.next = 37;
+                      _ctx.next = 38;
                       return window.__NEXT_PRELOADREADY(dynamicIds);
-                    case 37:
+                    case 38:
                       exports.router = router = (0, _router1).createRouter(
                         page,
                         query,
@@ -969,7 +971,8 @@
                           locales: locales,
                           defaultLocale: defaultLocale,
                           domainLocales: domainLocales,
-                          isPreview: isPreview
+                          isPreview: isPreview,
+                          isRsc: rsc
                         }
                       );
                       renderCtx = {
@@ -980,21 +983,21 @@
                         err: initialErr
                       };
                       if (!opts.beforeRender) {
-                        _ctx.next = 42;
+                        _ctx.next = 43;
                         break;
                       }
-                      _ctx.next = 42;
+                      _ctx.next = 43;
                       return opts.beforeRender();
-                    case 42:
-                      render(renderCtx);
                     case 43:
+                      render(renderCtx);
+                    case 44:
                     case "end":
                       return _ctx.stop();
                   }
               },
               _callee,
               null,
-              [[3, 30]]
+              [[3, 31]]
             );
           })
         );
@@ -4702,7 +4705,8 @@
             locales = param.locales,
             defaultLocale = param.defaultLocale,
             domainLocales = param.domainLocales,
-            isPreview = param.isPreview;
+            isPreview = param.isPreview,
+            isRsc = param.isRsc;
           var _this = this;
           _classCallCheck(this, Router);
           // Static Data Cache
@@ -4785,7 +4789,6 @@
           // Otherwise, this cause issues when when going back and
           // come again to the errored page.
           if (pathname2 !== "/_error") {
-            var ref;
             this.components[route] = {
               Component: Component,
               initial: true,
@@ -4793,9 +4796,7 @@
               err: err,
               __N_SSG: initialProps && initialProps.__N_SSG,
               __N_SSP: initialProps && initialProps.__N_SSP,
-              __N_RSC: !!((ref = Component) === null || ref === void 0
-                ? void 0
-                : ref.__next_rsc__)
+              __N_RSC: !!isRsc
             };
           }
           this.components["/_app"] = {
@@ -5876,7 +5877,7 @@
                                   styleSheets: res.styleSheets,
                                   __N_SSG: res.mod.__N_SSG,
                                   __N_SSP: res.mod.__N_SSP,
-                                  __N_RSC: !!res.page.__next_rsc__
+                                  __N_RSC: !!res.mod.__next_rsc__
                                 };
                               });
                           case 10:
Diff for index.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-5586bb4c90d7445f.js"
+      src="/_next/static/chunks/main-81c3a56fcaadeab6.js"
       defer=""
     ></script>
     <script
Diff for link.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-5586bb4c90d7445f.js"
+      src="/_next/static/chunks/main-81c3a56fcaadeab6.js"
       defer=""
     ></script>
     <script
Diff for withRouter.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-5586bb4c90d7445f.js"
+      src="/_next/static/chunks/main-81c3a56fcaadeab6.js"
       defer=""
     ></script>
     <script

Default Build with SWC (Decrease detected ✓)
General Overall decrease ✓
vercel/next.js canary shuding/next.js shu/f8d8 Change
buildDuration 18.6s 18.4s -176ms
buildDurationCached 6s 6s -25ms
nodeModulesSize 372 MB 372 MB -1.71 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary shuding/next.js shu/f8d8 Change
/ failed reqs 0 0
/ total time (seconds) 2.928 2.949 ⚠️ +0.02
/ avg req/sec 853.77 847.61 ⚠️ -6.16
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.172 1.184 ⚠️ +0.01
/error-in-render avg req/sec 2133.03 2111.9 ⚠️ -21.13
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary shuding/next.js shu/f8d8 Change
925.HASH.js gzip 178 B 178 B
framework-HASH.js gzip 42.3 kB 42.3 kB
main-HASH.js gzip 28.1 kB 28.1 kB ⚠️ +1 B
webpack-HASH.js gzip 1.45 kB 1.45 kB
Overall change 72.1 kB 72.1 kB ⚠️ +1 B
Legacy Client Bundles (polyfills)
vercel/next.js canary shuding/next.js shu/f8d8 Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary shuding/next.js shu/f8d8 Change
_app-HASH.js gzip 1.36 kB 1.36 kB
_error-HASH.js gzip 179 B 179 B
amp-HASH.js gzip 313 B 313 B
css-HASH.js gzip 324 B 324 B
dynamic-HASH.js gzip 2.56 kB 2.56 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 921 B 921 B
image-HASH.js gzip 5.2 kB 5.2 kB
index-HASH.js gzip 261 B 261 B
link-HASH.js gzip 2.33 kB 2.33 kB
routerDirect..HASH.js gzip 322 B 322 B
script-HASH.js gzip 388 B 388 B
withRouter-HASH.js gzip 317 B 317 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 14.9 kB 14.9 kB
Client Build Manifests
vercel/next.js canary shuding/next.js shu/f8d8 Change
_buildManifest.js gzip 456 B 456 B
Overall change 456 B 456 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary shuding/next.js shu/f8d8 Change
index.html gzip 531 B 530 B -1 B
link.html gzip 545 B 544 B -1 B
withRouter.html gzip 526 B 526 B
Overall change 1.6 kB 1.6 kB -2 B

Diffs

Diff for main-HASH.js
@@ -700,6 +700,7 @@
       var router;
       exports.router = router;
       var CachedApp, onPerfEntry;
+      var isAppRSC;
       headManager.getIsSsr = function() {
         return router.isSsr;
       };
@@ -842,6 +843,7 @@
                       (app = appEntrypoint.component),
                         (mod = appEntrypoint.exports);
                       CachedApp = app;
+                      isAppRSC = !!mod.__next_rsc__;
                       exportedReportWebVitals = mod && mod.reportWebVitals;
                       onPerfEntry = function(param) {
                         var id = param.id,
@@ -882,30 +884,30 @@
                         // error, so we need to skip waiting for the entrypoint.
                         true
                       ) {
-                        _ctx.next = 17;
+                        _ctx.next = 18;
                         break;
                       }
                       _ctx.t0 = {
                         error: hydrateErr
                       };
-                      _ctx.next = 20;
+                      _ctx.next = 21;
                       break;
-                    case 17:
-                      _ctx.next = 19;
+                    case 18:
+                      _ctx.next = 20;
                       return pageLoader.routeLoader.whenEntrypoint(page);
-                    case 19:
-                      _ctx.t0 = _ctx.sent;
                     case 20:
+                      _ctx.t0 = _ctx.sent;
+                    case 21:
                       pageEntrypoint = _ctx.t0;
                       if (!("error" in pageEntrypoint)) {
-                        _ctx.next = 23;
+                        _ctx.next = 24;
                         break;
                       }
                       throw pageEntrypoint.error;
-                    case 23:
+                    case 24:
                       CachedComponent = pageEntrypoint.component;
                       if (true) {
-                        _ctx.next = 28;
+                        _ctx.next = 29;
                         break;
                       }
                       isValidElementType = Object(
@@ -918,7 +920,7 @@
                         })()
                       );
                       if (isValidElementType(CachedComponent)) {
-                        _ctx.next = 28;
+                        _ctx.next = 29;
                         break;
                       }
                       throw new Error(
@@ -927,24 +929,24 @@
                           '"'
                         )
                       );
-                    case 28:
-                      _ctx.next = 33;
+                    case 29:
+                      _ctx.next = 34;
                       break;
-                    case 30:
-                      _ctx.prev = 30;
+                    case 31:
+                      _ctx.prev = 31;
                       _ctx.t1 = _ctx["catch"](3);
                       // This catches errors like throwing in the top level of a module
                       initialErr = (0, _isError).getProperError(_ctx.t1);
-                    case 33:
+                    case 34:
                       if (false) {
                       }
                       if (!window.__NEXT_PRELOADREADY) {
-                        _ctx.next = 37;
+                        _ctx.next = 38;
                         break;
                       }
-                      _ctx.next = 37;
+                      _ctx.next = 38;
                       return window.__NEXT_PRELOADREADY(dynamicIds);
-                    case 37:
+                    case 38:
                       exports.router = router = (0, _router1).createRouter(
                         page,
                         query,
@@ -969,7 +971,8 @@
                           locales: locales,
                           defaultLocale: defaultLocale,
                           domainLocales: domainLocales,
-                          isPreview: isPreview
+                          isPreview: isPreview,
+                          isRsc: rsc
                         }
                       );
                       renderCtx = {
@@ -980,21 +983,21 @@
                         err: initialErr
                       };
                       if (!opts.beforeRender) {
-                        _ctx.next = 42;
+                        _ctx.next = 43;
                         break;
                       }
-                      _ctx.next = 42;
+                      _ctx.next = 43;
                       return opts.beforeRender();
-                    case 42:
-                      render(renderCtx);
                     case 43:
+                      render(renderCtx);
+                    case 44:
                     case "end":
                       return _ctx.stop();
                   }
               },
               _callee,
               null,
-              [[3, 30]]
+              [[3, 31]]
             );
           })
         );
@@ -4702,7 +4705,8 @@
             locales = param.locales,
             defaultLocale = param.defaultLocale,
             domainLocales = param.domainLocales,
-            isPreview = param.isPreview;
+            isPreview = param.isPreview,
+            isRsc = param.isRsc;
           var _this = this;
           _classCallCheck(this, Router);
           // Static Data Cache
@@ -4785,7 +4789,6 @@
           // Otherwise, this cause issues when when going back and
           // come again to the errored page.
           if (pathname2 !== "/_error") {
-            var ref;
             this.components[route] = {
               Component: Component,
               initial: true,
@@ -4793,9 +4796,7 @@
               err: err,
               __N_SSG: initialProps && initialProps.__N_SSG,
               __N_SSP: initialProps && initialProps.__N_SSP,
-              __N_RSC: !!((ref = Component) === null || ref === void 0
-                ? void 0
-                : ref.__next_rsc__)
+              __N_RSC: !!isRsc
             };
           }
           this.components["/_app"] = {
@@ -5876,7 +5877,7 @@
                                   styleSheets: res.styleSheets,
                                   __N_SSG: res.mod.__N_SSG,
                                   __N_SSP: res.mod.__N_SSP,
-                                  __N_RSC: !!res.page.__next_rsc__
+                                  __N_RSC: !!res.mod.__next_rsc__
                                 };
                               });
                           case 10:
Diff for index.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-5586bb4c90d7445f.js"
+      src="/_next/static/chunks/main-81c3a56fcaadeab6.js"
       defer=""
     ></script>
     <script
Diff for link.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-5586bb4c90d7445f.js"
+      src="/_next/static/chunks/main-81c3a56fcaadeab6.js"
       defer=""
     ></script>
     <script
Diff for withRouter.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-5586bb4c90d7445f.js"
+      src="/_next/static/chunks/main-81c3a56fcaadeab6.js"
       defer=""
     ></script>
     <script
Commit: 89a8cd5

@shuding shuding merged commit a518036 into vercel:canary Mar 2, 2022
@shuding shuding deleted the shu/f8d8 branch March 2, 2022 18:29
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 2, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants