Skip to content

Commit

Permalink
v9.1.7
Browse files Browse the repository at this point in the history
  • Loading branch information
Timer committed Jan 3, 2020
1 parent a701072 commit 8e2ff2c
Show file tree
Hide file tree
Showing 8 changed files with 8 additions and 8 deletions.
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
"registry": "https://registry.npmjs.org/"
}
},
"version": "9.1.7-canary.16"
"version": "9.1.7"
}
2 changes: 1 addition & 1 deletion packages/create-next-app/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "create-next-app",
"version": "9.1.7-canary.16",
"version": "9.1.7",
"keywords": [
"react",
"next",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-bundle-analyzer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/bundle-analyzer",
"version": "9.1.7-canary.16",
"version": "9.1.7",
"main": "index.js",
"license": "MIT",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion packages/next-mdx/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/mdx",
"version": "9.1.7-canary.16",
"version": "9.1.7",
"main": "index.js",
"license": "MIT",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion packages/next-plugin-google-analytics/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/plugin-google-analytics",
"version": "9.1.7-canary.16",
"version": "9.1.7",
"nextjs": {
"name": "Google Analytics",
"required-env": [
Expand Down
2 changes: 1 addition & 1 deletion packages/next-plugin-material-ui/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/plugin-material-ui",
"version": "9.1.7-canary.16",
"version": "9.1.7",
"nextjs": {
"name": "Material UI",
"required-env": []
Expand Down
2 changes: 1 addition & 1 deletion packages/next-plugin-sentry/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/plugin-sentry",
"version": "9.1.7-canary.16",
"version": "9.1.7",
"nextjs": {
"name": "Sentry",
"required-env": [
Expand Down
2 changes: 1 addition & 1 deletion packages/next/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "next",
"version": "9.1.7-canary.16",
"version": "9.1.7",
"description": "The React Framework",
"main": "./dist/server/next.js",
"license": "MIT",
Expand Down

1 comment on commit 8e2ff2c

@ijjk
Copy link
Member

@ijjk ijjk commented on 8e2ff2c Jan 3, 2020

Choose a reason for hiding this comment

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

Stats from current release

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
buildDuration 13.1s 13.1s ⚠️ +20ms
nodeModulesSize 48.6 MB 48.9 MB ⚠️ +295 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
main-HASH.js gzip 6.49 kB 6.43 kB -60 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..2235.js gzip 13.9 kB 13.8 kB -25 B
framework.HASH.js gzip 39.5 kB 39.5 kB
Overall change 69.3 kB 69.2 kB -85 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
main-HASH.module.js gzip 5.41 kB 5.41 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.6 kB ⚠️ +35 B
framework.HA..dule.js gzip 39.4 kB 39.4 kB
Overall change 63.7 kB 63.7 kB ⚠️ +35 B
Legacy Client Bundles (polyfills)
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.93 kB ⚠️ +37 B
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.86 kB 9.89 kB ⚠️ +37 B
Client Pages Modern Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.49 kB ⚠️ +35 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.4 kB 7.43 kB ⚠️ +35 B
Client Build Manifests
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
index.html gzip 1.04 kB 1.04 kB -2 B
link.html gzip 1.05 kB 1.04 kB -2 B
withRouter.html gzip 1.03 kB 1.03 kB -1 B
Overall change 3.12 kB 3.11 kB -5 B

Diffs

Diff for link.js
@@ -639,19 +639,41 @@
                 this.cleanUpListeners()
               },
             },
+            {
+              key: 'getHref',
+              value: function getHref() {
+                var pathname = window.location.pathname
+
+                var _this$formatUrls2 = this.formatUrls(
+                    this.props.href,
+                    this.props.as
+                  ),
+                  parsedHref = _this$formatUrls2.href
+
+                return (0, _url.resolve)(pathname, parsedHref)
+              },
+            },
             {
               key: 'handleRef',
               value: function handleRef(ref) {
                 var _this2 = this
 
+                var isPrefetched =
+                  _router['default'].router.pageLoader.prefetched[
+                    this.getHref()
+                  ]
+
                 if (this.p && IntersectionObserver && ref && ref.tagName) {
                   this.cleanUpListeners()
-                  this.cleanUpListeners = listenToIntersections(
-                    ref,
-                    function() {
-                      _this2.prefetch()
-                    }
-                  )
+
+                  if (!isPrefetched) {
+                    this.cleanUpListeners = listenToIntersections(
+                      ref,
+                      function() {
+                        _this2.prefetch()
+                      }
+                    )
+                  }
                 }
               }, // The function is memoized so that no extra lifecycles are needed
               // as per https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
@@ -661,17 +683,7 @@
               value: function prefetch() {
                 if (!this.p || false) return // Prefetch the JSON page if asked (only in the client)
 
-                var pathname = window.location.pathname
-
-                var _this$formatUrls2 = this.formatUrls(
-                    this.props.href,
-                    this.props.as
-                  ),
-                  parsedHref = _this$formatUrls2.href
-
-                var href = (0, _url.resolve)(pathname, parsedHref)
-
-                _router['default'].prefetch(href)
+                _router['default'].prefetch(this.getHref())
               },
             },
             {
Diff for link.module.js
@@ -490,12 +490,27 @@
           this.cleanUpListeners()
         }
 
+        getHref() {
+          var { pathname } = window.location
+          var { href: parsedHref } = this.formatUrls(
+            this.props.href,
+            this.props.as
+          )
+          return (0, _url.resolve)(pathname, parsedHref)
+        }
+
         handleRef(ref) {
+          var isPrefetched =
+            _router.default.router.pageLoader.prefetched[this.getHref()]
+
           if (this.p && IntersectionObserver && ref && ref.tagName) {
             this.cleanUpListeners()
-            this.cleanUpListeners = listenToIntersections(ref, () => {
-              this.prefetch()
-            })
+
+            if (!isPrefetched) {
+              this.cleanUpListeners = listenToIntersections(ref, () => {
+                this.prefetch()
+              })
+            }
           }
         } // The function is memoized so that no extra lifecycles are needed
         // as per https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
@@ -503,14 +518,7 @@
         prefetch() {
           if (!this.p || false) return // Prefetch the JSON page if asked (only in the client)
 
-          var { pathname } = window.location
-          var { href: parsedHref } = this.formatUrls(
-            this.props.href,
-            this.props.as
-          )
-          var href = (0, _url.resolve)(pathname, parsedHref)
-
-          _router.default.prefetch(href)
+          _router.default.prefetch(this.getHref())
         }
 
         render() {
Diff for de003c3a9d30..b0e06633d.js
@@ -1445,10 +1445,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var _slicedToArray = __webpack_require__('8+Nu')
 
-      var _Promise = __webpack_require__('eVuF')
-
       var _Object$assign = __webpack_require__('Qetd')
 
+      var _Promise = __webpack_require__('eVuF')
+
       var _classCallCheck = __webpack_require__('/HRN')
 
       var _createClass = __webpack_require__('WaGi')
@@ -1483,6 +1483,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var route_regex_1 = __webpack_require__('YTqd')
 
+      function addBasePath(path) {
+        // @ts-ignore variable is always a string
+        var p = ''
+        return path.indexOf(p) !== 0 ? p + path : path
+      }
+
       function toRoute(path) {
         return path.replace(/\/$/, '') || '/'
       }
@@ -1503,6 +1509,9 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
             _classCallCheck(this, Router)
 
+            // Static Data Cache
+            this.sdc = {}
+
             this.onPopState = function(e) {
               if (!e.state) {
                 // We get state as undefined for two reasons.
@@ -1553,6 +1562,34 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
               }
 
               _this.replace(url, as, options)
+            }
+
+            this._getStaticData = function(asPath, _cachedData) {
+              var pathname = url_1.parse(asPath).pathname
+              pathname = !pathname || pathname === '/' ? '/index' : pathname
+              return true && (_cachedData = _this.sdc[pathname])
+                ? _Promise.resolve(_cachedData)
+                : fetch(
+                    // @ts-ignore __NEXT_DATA__
+                    '/_next/data/'
+                      .concat(__NEXT_DATA__.buildId)
+                      .concat(pathname, '.json')
+                  )
+                    .then(function(res) {
+                      if (!res.ok) {
+                        throw new Error('Failed to load static props')
+                      }
+
+                      return res.json()
+                    })
+                    .then(function(data) {
+                      _this.sdc[pathname] = data
+                      return data
+                    })
+                    ['catch'](function(err) {
+                      err.code = 'PAGE_LOAD_ERROR'
+                      throw err
+                    })
             } // represents the current component key
 
             this.route = toRoute(pathname) // set up the component cache (by route keys)
@@ -1731,7 +1768,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                       _this2.asPath = as
                       Router.events.emit('hashChangeStart', as)
 
-                      _this2.changeState(method, url, as)
+                      _this2.changeState(method, url, addBasePath(as))
 
                       _this2.scrollToHash(as)
 
@@ -1807,7 +1844,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
                         Router.events.emit('beforeHistoryChange', as)
 
-                        _this2.changeState(method, url, as, options)
+                        _this2.changeState(
+                          method,
+                          url,
+                          addBasePath(as),
+                          options
+                        )
 
                         var hash = window.location.hash.substring(1)
 
@@ -1895,20 +1937,24 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                         var _require, isValidElementType
                       }
 
-                      return new _Promise(function(resolve, reject) {
-                        // we provide AppTree later so this needs to be `any`
-                        _this3
-                          .getInitialProps(Component, {
-                            pathname: pathname,
-                            query: query,
-                            asPath: as,
-                          })
-                          .then(function(props) {
-                            routeInfo.props = props
-                            _this3.components[route] = routeInfo
-                            resolve(routeInfo)
-                          }, reject)
-                      })
+                      return _this3
+                        ._getData(function() {
+                          return Component.__NEXT_SPR
+                            ? _this3._getStaticData(as)
+                            : _this3.getInitialProps(
+                                Component, // we provide AppTree later so this needs to be `any`
+                                {
+                                  pathname: pathname,
+                                  query: query,
+                                  asPath: as,
+                                }
+                              )
+                        })
+                        .then(function(props) {
+                          routeInfo.props = props
+                          _this3.components[route] = routeInfo
+                          return routeInfo
+                        })
                     })
                     ['catch'](function(err) {
                       return new _Promise(function(resolve) {
@@ -2079,12 +2125,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                       }
 
                       return
-                    } // Prefetch is not supported in development mode because it would trigger on-demand-entries
-
-                    if (false) {
                     } // @ts-ignore pathname is always defined
 
-                    var route = toRoute(pathname)
+                    var route = toRoute(pathname) // Prefetch is not supported in development mode because it would trigger on-demand-entries
+
+                    if (false) {
+                    }
 
                     _this4.pageLoader.prefetch(route).then(resolve, reject)
                   })
@@ -2146,122 +2192,46 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                 },
               },
               {
-                key: 'getInitialProps',
-                value: function getInitialProps(Component, ctx) {
-                  var cancelled,
-                    cancel,
-                    App,
-                    props,
-                    status,
-                    _url_1$parse4,
-                    pathname,
-                    AppTree,
-                    err
-
-                  return _regeneratorRuntime.async(
-                    function getInitialProps$(_context2) {
-                      while (1) {
-                        switch ((_context2.prev = _context2.next)) {
-                          case 0:
-                            cancelled = false
-
-                            cancel = function cancel() {
-                              cancelled = true
-                            }
-
-                            this.clc = cancel
-                            App = this.components['/_app'].Component
+                key: '_getData',
+                value: function _getData(fn) {
+                  var _this5 = this
 
-                            if (!Component.__NEXT_SPR) {
-                              _context2.next = 12
-                              break
-                            }
-
-                            // pathname should have leading slash
-                            ;(_url_1$parse4 = url_1.parse(
-                              ctx.asPath || ctx.pathname
-                            )),
-                              (pathname = _url_1$parse4.pathname)
-                            pathname =
-                              !pathname || pathname === '/'
-                                ? '/index'
-                                : pathname
-                            _context2.next = 9
-                            return _regeneratorRuntime.awrap(
-                              fetch(
-                                // @ts-ignore __NEXT_DATA__
-                                '/_next/data/'
-                                  .concat(__NEXT_DATA__.buildId)
-                                  .concat(pathname, '.json')
-                              )
-                                .then(function(res) {
-                                  if (!res.ok) {
-                                    status = res.status
-                                    throw new Error(
-                                      'failed to load prerender data'
-                                    )
-                                  }
-
-                                  return res.json()
-                                })
-                                ['catch'](function(err) {
-                                  console.error(
-                                    'Failed to load data',
-                                    status,
-                                    err
-                                  )
-                                  window.location.href = pathname
-                                  return new _Promise(function() {})
-                                })
-                            )
+                  var cancelled = false
 
-                          case 9:
-                            props = _context2.sent
-                            _context2.next = 17
-                            break
-
-                          case 12:
-                            AppTree = this._wrapApp(App)
-                            ctx.AppTree = AppTree
-                            _context2.next = 16
-                            return _regeneratorRuntime.awrap(
-                              utils_1.loadGetInitialProps(App, {
-                                AppTree: AppTree,
-                                Component: Component,
-                                router: this,
-                                ctx: ctx,
-                              })
-                            )
-
-                          case 16:
-                            props = _context2.sent
+                  var cancel = function cancel() {
+                    cancelled = true
+                  }
 
-                          case 17:
-                            if (cancel === this.clc) {
-                              this.clc = null
-                            }
+                  this.clc = cancel
+                  return fn().then(function(data) {
+                    if (cancel === _this5.clc) {
+                      _this5.clc = null
+                    }
 
-                            if (!cancelled) {
-                              _context2.next = 22
-                              break
-                            }
+                    if (cancelled) {
+                      var err = new Error('Loading initial props cancelled')
+                      err.cancelled = true
+                      throw err
+                    }
 
-                            err = new Error('Loading initial props cancelled')
-                            err.cancelled = true
-                            throw err
+                    return data
+                  })
+                },
+              },
+              {
+                key: 'getInitialProps',
+                value: function getInitialProps(Component, ctx) {
+                  var App = this.components['/_app'].Component
 
-                          case 22:
-                            return _context2.abrupt('return', props)
+                  var AppTree = this._wrapApp(App)
 
-                          case 23:
-                          case 'end':
-                            return _context2.stop()
-                        }
-                      }
-                    },
-                    null,
-                    this
-                  )
+                  ctx.AppTree = AppTree
+                  return utils_1.loadGetInitialProps(App, {
+                    AppTree: AppTree,
+                    Component: Component,
+                    router: this,
+                    ctx: ctx,
+                  })
                 },
               },
               {
Diff for de003c3a9d30..0f.module.js
@@ -1785,10 +1785,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
     /***/ elyg: /***/ function(module, exports, __webpack_require__) {
       'use strict'
 
-      var _Promise = __webpack_require__('eVuF')
-
       var _Object$assign = __webpack_require__('Qetd')
 
+      var _Promise = __webpack_require__('eVuF')
+
       var _Object$defineProperty = __webpack_require__('hfKm')
 
       var __importDefault =
@@ -1819,6 +1819,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 
       var route_regex_1 = __webpack_require__('YTqd')
 
+      function addBasePath(path) {
+        // @ts-ignore variable is always a string
+        var p = ''
+        return path.indexOf(p) !== 0 ? p + path : path
+      }
+
       function toRoute(path) {
         return path.replace(/\/$/, '') || '/'
       }
@@ -1834,6 +1840,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
             err,
             subscription,
           } = _ref
+          // Static Data Cache
+          this.sdc = {}
 
           this.onPopState = e => {
             if (!e.state) {
@@ -1879,6 +1887,34 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
             }
 
             this.replace(url, as, options)
+          }
+
+          this._getStaticData = (asPath, _cachedData) => {
+            var pathname = url_1.parse(asPath).pathname
+            pathname = !pathname || pathname === '/' ? '/index' : pathname
+            return true && (_cachedData = this.sdc[pathname])
+              ? _Promise.resolve(_cachedData)
+              : fetch(
+                  // @ts-ignore __NEXT_DATA__
+                  '/_next/data/'
+                    .concat(__NEXT_DATA__.buildId)
+                    .concat(pathname, '.json')
+                )
+                  .then(res => {
+                    if (!res.ok) {
+                      throw new Error('Failed to load static props')
+                    }
+
+                    return res.json()
+                  })
+                  .then(data => {
+                    this.sdc[pathname] = data
+                    return data
+                  })
+                  .catch(err => {
+                    err.code = 'PAGE_LOAD_ERROR'
+                    throw err
+                  })
           } // represents the current component key
 
           this.route = toRoute(pathname) // set up the component cache (by route keys)
@@ -2039,7 +2075,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
             if (!options._h && this.onlyAHashChange(as)) {
               this.asPath = as
               Router.events.emit('hashChangeStart', as)
-              this.changeState(method, url, as)
+              this.changeState(method, url, addBasePath(as))
               this.scrollToHash(as)
               Router.events.emit('hashChangeComplete', as)
               return resolve(true)
@@ -2104,7 +2140,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                 }
 
                 Router.events.emit('beforeHistoryChange', as)
-                this.changeState(method, url, as, options)
+                this.changeState(method, url, addBasePath(as), options)
                 var hash = window.location.hash.substring(1)
 
                 if (false) {
@@ -2189,17 +2225,21 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                 var isValidElementType
               }
 
-              return new _Promise((resolve, reject) => {
-                // we provide AppTree later so this needs to be `any`
-                this.getInitialProps(Component, {
-                  pathname,
-                  query,
-                  asPath: as,
-                }).then(props => {
-                  routeInfo.props = props
-                  this.components[route] = routeInfo
-                  resolve(routeInfo)
-                }, reject)
+              return this._getData(() =>
+                Component.__NEXT_SPR
+                  ? this._getStaticData(as)
+                  : this.getInitialProps(
+                      Component, // we provide AppTree later so this needs to be `any`
+                      {
+                        pathname,
+                        query,
+                        asPath: as,
+                      }
+                    )
+              ).then(props => {
+                routeInfo.props = props
+                this.components[route] = routeInfo
+                return routeInfo
               })
             })
             .catch(err => {
@@ -2337,12 +2377,13 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
               }
 
               return
-            } // Prefetch is not supported in development mode because it would trigger on-demand-entries
+            } // @ts-ignore pathname is always defined
+
+            var route = toRoute(pathname) // Prefetch is not supported in development mode because it would trigger on-demand-entries
 
             if (false) {
-            } // @ts-ignore pathname is always defined
+            }
 
-            var route = toRoute(pathname)
             this.pageLoader.prefetch(route).then(resolve, reject)
           })
         }
@@ -2371,7 +2412,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
           return Component
         }
 
-        async getInitialProps(Component, ctx) {
+        _getData(fn) {
           var cancelled = false
 
           var cancel = () => {
@@ -2379,56 +2420,33 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
           }
 
           this.clc = cancel
-          var { Component: App } = this.components['/_app']
-          var props
-
-          if (Component.__NEXT_SPR) {
-            var status // pathname should have leading slash
-
-            var { pathname } = url_1.parse(ctx.asPath || ctx.pathname)
-            pathname = !pathname || pathname === '/' ? '/index' : pathname
-            props = await fetch(
-              // @ts-ignore __NEXT_DATA__
-              '/_next/data/'
-                .concat(__NEXT_DATA__.buildId)
-                .concat(pathname, '.json')
-            )
-              .then(res => {
-                if (!res.ok) {
-                  status = res.status
-                  throw new Error('failed to load prerender data')
-                }
+          return fn().then(data => {
+            if (cancel === this.clc) {
+              this.clc = null
+            }
 
-                return res.json()
-              })
-              .catch(err => {
-                console.error('Failed to load data', status, err)
-                window.location.href = pathname
-                return new _Promise(() => {})
-              })
-          } else {
-            var AppTree = this._wrapApp(App)
+            if (cancelled) {
+              var err = new Error('Loading initial props cancelled')
+              err.cancelled = true
+              throw err
+            }
 
-            ctx.AppTree = AppTree
-            props = await utils_1.loadGetInitialProps(App, {
-              AppTree,
-              Component,
-              router: this,
-              ctx,
-            })
-          }
+            return data
+          })
+        }
 
-          if (cancel === this.clc) {
-            this.clc = null
-          }
+        getInitialProps(Component, ctx) {
+          var { Component: App } = this.components['/_app']
 
-          if (cancelled) {
-            var err = new Error('Loading initial props cancelled')
-            err.cancelled = true
-            throw err
-          }
+          var AppTree = this._wrapApp(App)
 
-          return props
+          ctx.AppTree = AppTree
+          return utils_1.loadGetInitialProps(App, {
+            AppTree,
+            Component,
+            router: this,
+            ctx,
+          })
         }
 
         abortComponentLoad(as) {
Diff for main-HASH.js
@@ -479,7 +479,7 @@
         document.getElementById('__NEXT_DATA__').textContent
       )
       window.__NEXT_DATA__ = data
-      var version = '9.1.6'
+      var version = '9.1.7'
       exports.version = version
       var props = data.props,
         err = data.err,
@@ -1601,35 +1601,33 @@
       var _promise = _interopRequireDefault(__webpack_require__('eVuF'))
 
       var _mitt = _interopRequireDefault(__webpack_require__('dZ6Y'))
-      /* global document, window */
 
-      var prefetchOrPreload = undefined ? 'prefetch' : 'preload'
-
-      function supportsPreload(el) {
+      function hasRel(rel, link) {
         try {
-          return el.relList.supports(prefetchOrPreload)
-        } catch (_unused) {
-          return false
-        }
-      }
-
-      var hasPreload = supportsPreload(document.createElement('link'))
-
-      function preloadLink(url, resourceType) {
-        var link = document.createElement('link')
-        link.rel = prefetchOrPreload
-        link.crossOrigin = 'anonymous'
-        link.href = url
-        link.as = resourceType
-        document.head.appendChild(link)
+          link = document.createElement('link')
+          return link.relList.supports(rel)
+        } catch (_unused) {}
       }
 
-      function loadStyle(url) {
-        var link = document.createElement('link')
-        link.rel = 'stylesheet'
-        link.crossOrigin = 'anonymous'
-        link.href = url
-        document.head.appendChild(link)
+      var relPrefetch =
+        hasRel('preload') && !hasRel('prefetch') // https://caniuse.com/#feat=link-rel-preload
+          ? // macOS and iOS (Safari does not support prefetch)
+            'preload' // https://caniuse.com/#feat=link-rel-prefetch
+          : // IE 11, Edge 12+, nearly all evergreen
+            'prefetch'
+      var hasNoModule = 'noModule' in document.createElement('script')
+
+      function appendLink(href, rel, as) {
+        return new _promise['default'](function(res, rej, link) {
+          link = document.createElement('link')
+          link.crossOrigin = 'anonymous'
+          link.href = href
+          link.rel = rel
+          if (as) link.as = as
+          link.onload = res
+          link.onerror = rej
+          document.head.appendChild(link)
+        })
       }
 
       var PageLoader =
@@ -1641,6 +1639,7 @@
             this.buildId = buildId
             this.assetPrefix = assetPrefix
             this.pageCache = {}
+            this.prefetched = {}
             this.pageRegisterEvents = (0, _mitt['default'])()
             this.loadingRoutes = {}
 
@@ -1749,6 +1748,8 @@
                   }
 
                   if (!_this3.loadingRoutes[route]) {
+                    _this3.loadingRoutes[route] = true
+
                     if (true) {
                       _this3.getDependencies(route).then(function(deps) {
                         deps.forEach(function(d) {
@@ -1765,13 +1766,14 @@
                               'link[rel=stylesheet][href^="' + d + '"]'
                             )
                           ) {
-                            loadStyle(d) // FIXME: handle failure
+                            appendLink(d, 'stylesheet')['catch'](function() {
+                              // FIXME: handle failure
+                              // Right now, this is needed to prevent an unhandled rejection.
+                            })
                           }
                         })
 
                         _this3.loadRoute(route)
-
-                        _this3.loadingRoutes[route] = true
                       })
                     } else {
                     }
@@ -1824,7 +1826,7 @@
 
                 var script = document.createElement('script')
 
-                if (true && 'noModule' in script) {
+                if (true && hasNoModule) {
                   script.type = 'module' // Only page bundle scripts need to have .module added to url,
                   // dependencies already have it added during build manifest creation
 
@@ -1887,41 +1889,54 @@
                 return (0, _asyncToGenerator2['default'])(
                   /*#__PURE__*/
                   _regeneratorRuntime.mark(function _callee2() {
-                    var scriptRoute, url, cn
+                    var cn, url, scriptRoute
                     return _regeneratorRuntime.wrap(function _callee2$(
                       _context2
                     ) {
                       while (1) {
                         switch ((_context2.prev = _context2.next)) {
                           case 0:
-                            route = _this2.normalizeRoute(route)
-                            scriptRoute =
-                              (route === '/' ? '/index' : route) + '.js'
+                            if (!(cn = navigator.connection)) {
+                              _context2.next = 3
+                              break
+                            }
 
-                            if (
-                              true &&
-                              'noModule' in document.createElement('script')
-                            ) {
-                              scriptRoute = scriptRoute.replace(
-                                /\.js$/,
-                                '.module.js'
-                              )
+                            if (!(cn.saveData || /2g/.test(cn.effectiveType))) {
+                              _context2.next = 3
+                              break
                             }
 
-                            url =
-                              _this2.assetPrefix +
-                              (isDependency
-                                ? route
-                                : '/_next/static/' +
-                                  encodeURIComponent(_this2.buildId) +
-                                  '/pages' +
-                                  encodeURI(scriptRoute)) // n.b. If preload is not supported, we fall back to `loadPage` which has
-                            // its own deduping mechanism.
+                            return _context2.abrupt('return')
+
+                          case 3:
+                            url = _this2.assetPrefix
+
+                            if (isDependency) {
+                              url += route
+                            } else {
+                              route = _this2.normalizeRoute(route)
+                              _this2.prefetched[route] = true
+                              scriptRoute =
+                                (route === '/' ? '/index' : route) + '.js'
+
+                              if (true && hasNoModule) {
+                                scriptRoute = scriptRoute.replace(
+                                  /\.js$/,
+                                  '.module.js'
+                                )
+                              }
+
+                              url +=
+                                '/_next/static/' +
+                                encodeURIComponent(_this2.buildId) +
+                                '/pages' +
+                                encodeURI(scriptRoute)
+                            }
 
                             if (
                               !document.querySelector(
                                 'link[rel="' +
-                                  prefetchOrPreload +
+                                  relPrefetch +
                                   '"][href^="' +
                                   url +
                                   '"], script[data-next-page="' +
@@ -1929,95 +1944,42 @@
                                   '"]'
                               )
                             ) {
-                              _context2.next = 6
+                              _context2.next = 7
                               break
                             }
 
                             return _context2.abrupt('return')
 
-                          case 6:
-                            if (!(cn = navigator.connection)) {
-                              _context2.next = 9
-                              break
-                            }
-
-                            if (
-                              !(
-                                (cn.effectiveType || '').indexOf('2g') !== -1 ||
-                                cn.saveData
-                              )
-                            ) {
-                              _context2.next = 9
-                              break
-                            }
-
-                            return _context2.abrupt('return')
-
-                          case 9:
-                            if (!(true && !isDependency)) {
-                              _context2.next = 15
-                              break
-                            }
-
-                            _context2.next = 13
-                            return _this2.getDependencies(route)
-
-                          case 13:
-                            _context2.t0 = function(url) {
-                              _this2.prefetch(url, true)
-                            }
-
-                            _context2.sent.forEach(_context2.t0)
-
-                          case 15:
-                            if (!hasPreload) {
-                              _context2.next = 18
-                              break
-                            }
-
-                            preloadLink(
-                              url,
-                              url.match(/\.css$/) ? 'style' : 'script'
-                            )
-                            return _context2.abrupt('return')
-
-                          case 18:
-                            if (!isDependency) {
-                              _context2.next = 20
-                              break
-                            }
-
-                            return _context2.abrupt('return')
-
-                          case 20:
-                            if (!(document.readyState === 'complete')) {
-                              _context2.next = 24
-                              break
-                            }
-
+                          case 7:
                             return _context2.abrupt(
                               'return',
-                              _this2.loadPage(route)['catch'](function() {})
-                            )
-
-                          case 24:
-                            return _context2.abrupt(
-                              'return',
-                              new _promise['default'](function(resolve) {
-                                window.addEventListener('load', function() {
-                                  _this2.loadPage(route).then(
-                                    function() {
-                                      return resolve()
-                                    },
-                                    function() {
-                                      return resolve()
-                                    }
-                                  )
-                                })
-                              })
+                              _promise['default']
+                                .all([
+                                  appendLink(
+                                    url,
+                                    relPrefetch,
+                                    url.match(/\.css$/) ? 'style' : 'script'
+                                  ),
+                                  true &&
+                                    !isDependency &&
+                                    _this2
+                                      .getDependencies(route)
+                                      .then(function(urls) {
+                                        return _promise['default'].all(
+                                          urls.map(function(url) {
+                                            return _this2.prefetch(url, true)
+                                          })
+                                        )
+                                      }),
+                                ])
+                                .then(
+                                  // do not return any data
+                                  function() {}, // swallow prefetch errors
+                                  function() {}
+                                )
                             )
 
-                          case 25:
+                          case 8:
                           case 'end':
                             return _context2.stop()
                         }
Diff for main-HASH.module.js
@@ -361,7 +361,7 @@
         document.getElementById('__NEXT_DATA__').textContent
       )
       window.__NEXT_DATA__ = data
-      var version = '9.1.6'
+      var version = '9.1.7'
       exports.version = version
       var {
         props,
@@ -1172,35 +1172,33 @@
       var _promise = _interopRequireDefault(__webpack_require__('eVuF'))
 
       var _mitt = _interopRequireDefault(__webpack_require__('dZ6Y'))
-      /* global document, window */
 
-      var prefetchOrPreload = undefined ? 'prefetch' : 'preload'
-
-      function supportsPreload(el) {
+      function hasRel(rel, link) {
         try {
-          return el.relList.supports(prefetchOrPreload)
-        } catch (_unused) {
-          return false
-        }
-      }
-
-      var hasPreload = supportsPreload(document.createElement('link'))
-
-      function preloadLink(url, resourceType) {
-        var link = document.createElement('link')
-        link.rel = prefetchOrPreload
-        link.crossOrigin = 'anonymous'
-        link.href = url
-        link.as = resourceType
-        document.head.appendChild(link)
+          link = document.createElement('link')
+          return link.relList.supports(rel)
+        } catch (_unused) {}
       }
 
-      function loadStyle(url) {
-        var link = document.createElement('link')
-        link.rel = 'stylesheet'
-        link.crossOrigin = 'anonymous'
-        link.href = url
-        document.head.appendChild(link)
+      var relPrefetch =
+        hasRel('preload') && !hasRel('prefetch') // https://caniuse.com/#feat=link-rel-preload
+          ? // macOS and iOS (Safari does not support prefetch)
+            'preload' // https://caniuse.com/#feat=link-rel-prefetch
+          : // IE 11, Edge 12+, nearly all evergreen
+            'prefetch'
+      var hasNoModule = 'noModule' in document.createElement('script')
+
+      function appendLink(href, rel, as) {
+        return new _promise.default((res, rej, link) => {
+          link = document.createElement('link')
+          link.crossOrigin = 'anonymous'
+          link.href = href
+          link.rel = rel
+          if (as) link.as = as
+          link.onload = res
+          link.onerror = rej
+          document.head.appendChild(link)
+        })
       }
 
       class PageLoader {
@@ -1208,6 +1206,7 @@
           this.buildId = buildId
           this.assetPrefix = assetPrefix
           this.pageCache = {}
+          this.prefetched = {}
           this.pageRegisterEvents = (0, _mitt.default)()
           this.loadingRoutes = {}
 
@@ -1290,6 +1289,8 @@
             }
 
             if (!this.loadingRoutes[route]) {
+              this.loadingRoutes[route] = true
+
               if (true) {
                 this.getDependencies(route).then(deps => {
                   deps.forEach(d => {
@@ -1306,11 +1307,13 @@
                         'link[rel=stylesheet][href^="' + d + '"]'
                       )
                     ) {
-                      loadStyle(d) // FIXME: handle failure
+                      appendLink(d, 'stylesheet').catch(() => {
+                        // FIXME: handle failure
+                        // Right now, this is needed to prevent an unhandled rejection.
+                      })
                     }
                   })
                   this.loadRoute(route)
-                  this.loadingRoutes[route] = true
                 })
               } else {
               }
@@ -1338,7 +1341,7 @@
         loadScript(url, route, isPage) {
           var script = document.createElement('script')
 
-          if (true && 'noModule' in script) {
+          if (true && hasNoModule) {
             script.type = 'module' // Only page bundle scripts need to have .module added to url,
             // dependencies already have it added during build manifest creation
 
@@ -1390,27 +1393,39 @@
           var _this2 = this
 
           return (0, _asyncToGenerator2.default)(function*() {
-            route = _this2.normalizeRoute(route)
-            var scriptRoute = (route === '/' ? '/index' : route) + '.js'
+            // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118
+            // License: Apache 2.0
+            var cn
 
-            if (true && 'noModule' in document.createElement('script')) {
-              scriptRoute = scriptRoute.replace(/\.js$/, '.module.js')
+            if ((cn = navigator.connection)) {
+              // Don't prefetch if using 2G or if Save-Data is enabled.
+              if (cn.saveData || /2g/.test(cn.effectiveType)) return
             }
 
-            var url =
-              _this2.assetPrefix +
-              (isDependency
-                ? route
-                : '/_next/static/' +
-                  encodeURIComponent(_this2.buildId) +
-                  '/pages' +
-                  encodeURI(scriptRoute)) // n.b. If preload is not supported, we fall back to `loadPage` which has
-            // its own deduping mechanism.
+            var url = _this2.assetPrefix
+
+            if (isDependency) {
+              url += route
+            } else {
+              route = _this2.normalizeRoute(route)
+              _this2.prefetched[route] = true
+              var scriptRoute = (route === '/' ? '/index' : route) + '.js'
+
+              if (true && hasNoModule) {
+                scriptRoute = scriptRoute.replace(/\.js$/, '.module.js')
+              }
+
+              url +=
+                '/_next/static/' +
+                encodeURIComponent(_this2.buildId) +
+                '/pages' +
+                encodeURI(scriptRoute)
+            }
 
             if (
               document.querySelector(
                 'link[rel="' +
-                  prefetchOrPreload +
+                  relPrefetch +
                   '"][href^="' +
                   url +
                   '"], script[data-next-page="' +
@@ -1419,48 +1434,30 @@
               )
             ) {
               return
-            } // Inspired by quicklink, license: https://github.com/GoogleChromeLabs/quicklink/blob/master/LICENSE
-
-            var cn
-
-            if ((cn = navigator.connection)) {
-              // Don't prefetch if the user is on 2G or if Save-Data is enabled.
-              if (
-                (cn.effectiveType || '').indexOf('2g') !== -1 ||
-                cn.saveData
-              ) {
-                return
-              }
-            }
-
-            if (true && !isDependency) {
-              ;(yield _this2.getDependencies(route)).forEach(url => {
-                _this2.prefetch(url, true)
-              })
-            } // Feature detection is used to see if preload is supported
-            // If not fall back to loading script tags before the page is loaded
-            // https://caniuse.com/#feat=link-rel-preload
-
-            if (hasPreload) {
-              preloadLink(url, url.match(/\.css$/) ? 'style' : 'script')
-              return
-            }
-
-            if (isDependency) {
-              // loadPage will automatically handle depencies, so no need to
-              // preload them manually
-              return
             }
 
-            if (document.readyState === 'complete') {
-              return _this2.loadPage(route).catch(() => {})
-            } else {
-              return new _promise.default(resolve => {
-                window.addEventListener('load', () => {
-                  _this2.loadPage(route).then(() => resolve(), () => resolve())
-                })
-              })
-            }
+            return _promise.default
+              .all([
+                appendLink(
+                  url,
+                  relPrefetch,
+                  url.match(/\.css$/) ? 'style' : 'script'
+                ),
+                true &&
+                  !isDependency &&
+                  _this2
+                    .getDependencies(route)
+                    .then(urls =>
+                      _promise.default.all(
+                        urls.map(url => _this2.prefetch(url, true))
+                      )
+                    ),
+              ])
+              .then(
+                // do not return any data
+                () => {}, // swallow prefetch errors
+                () => {}
+              )
           })()
         }
       }
Diff for index.html
@@ -27,25 +27,25 @@
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-e6c4147e120731ef04d8.module.js"
+      href="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
+      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
+      href="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -121,55 +121,55 @@
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-8500e7d614d5ca841401.js"
+      src="/_next/static/chunks/framework.4c64484d8a631a55b435.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-e6c4147e120731ef04d8.module.js"
+      src="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/framework.4c64484d8a631a55b435.js"
+      src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
       async=""
       crossorigin="anonymous"
-      type="module"
+      nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js"
+      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
       async=""
       crossorigin="anonymous"
-      nomodule=""
+      type="module"
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.a956fdaeb9a5fa7da92f.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.4c305695c6fb0e06633d.js"
+      src="/_next/static/runtime/main-b984e7fb60832e00613e.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
+      src="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -39,13 +39,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-e6c4147e120731ef04d8.module.js"
+      href="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -156,25 +156,25 @@
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.4c305695c6fb0e06633d.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.a956fdaeb9a5fa7da92f.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-8500e7d614d5ca841401.js"
+      src="/_next/static/runtime/main-b984e7fb60832e00613e.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-e6c4147e120731ef04d8.module.js"
+      src="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -39,13 +39,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-e6c4147e120731ef04d8.module.js"
+      href="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -151,25 +151,25 @@
       type="module"
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.4c305695c6fb0e06633d.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.a956fdaeb9a5fa7da92f.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
+      src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
     ></script
     ><script
-      src="/_next/static/runtime/main-8500e7d614d5ca841401.js"
+      src="/_next/static/runtime/main-b984e7fb60832e00613e.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script
     ><script
-      src="/_next/static/runtime/main-e6c4147e120731ef04d8.module.js"
+      src="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
buildDuration 13.4s 13.4s -2ms
nodeModulesSize 48.6 MB 48.9 MB ⚠️ +295 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
main-HASH.js gzip 6.49 kB 6.43 kB -60 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..2235.js gzip 13.9 kB N/A N/A
framework.HASH.js gzip 39.5 kB 39.5 kB
de003c3a9d30..6ef5.js gzip N/A 13.8 kB N/A
Overall change 69.3 kB 69.2 kB -60 B
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
main-HASH.module.js gzip 5.41 kB 5.41 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB N/A N/A
framework.HA..dule.js gzip 39.4 kB 39.4 kB
de003c3a9d30..dule.js gzip N/A 12.6 kB N/A
Overall change 63.7 kB 63.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.93 kB ⚠️ +37 B
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.86 kB 9.89 kB ⚠️ +37 B
Client Pages Modern Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.49 kB ⚠️ +35 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.4 kB 7.43 kB ⚠️ +35 B
Client Build Manifests
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary v9.1.6 zeit/next.js refs/tags/v9.1.7 Change
_error.js gzip 74.8 kB 78.9 kB ⚠️ +4.04 kB
hooks.html gzip 1.07 kB 1.07 kB
index.js gzip 75.1 kB 79.1 kB ⚠️ +4.01 kB
link.js gzip 77.1 kB 81.3 kB ⚠️ +4.15 kB
routerDirect.js gzip 75.2 kB 79.2 kB ⚠️ +4.02 kB
withRouter.js gzip 75.3 kB 79.3 kB ⚠️ +4.03 kB
Overall change 379 kB 399 kB ⚠️ +20.3 kB

Please sign in to comment.