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

Bugfix/Performance: Start the modern child compiler earlier #9257

Merged
merged 3 commits into from
Oct 31, 2019

Conversation

developit
Copy link
Contributor

@developit developit commented Oct 30, 2019

This (hopefully!) addresses an issue where the child compiler never seems to finish compilation.

Note: if Babel work is moved into a threadpool, it becomes more advantageous to kick off the child compiler as early as possible. In that case, here's the updated version:

    const child = new Promise((resolve, reject) => {
      this.updateOptions(childCompiler)
      childCompiler.runAsChild((err, entries, childCompilation) => {
        if (err) {
          return reject(err)
        }
        if (childCompilation.errors.length > 0) {
          return reject(childCompilation.errors[0])
        }
        this.updateAssets(compilation, childCompilation)
        resolve()
      })
    })
    compilation.hooks.additionalAssets.tapPromise(PLUGIN_NAME, () => child)

@ijjk
Copy link
Member

ijjk commented Oct 30, 2019

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
buildDuration 16.4s 14.5s -1.9s
nodeModulesSize 48.4 MB 48.4 MB ⚠️ +10 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.js 16.6 kB 18.9 kB ⚠️ +2.33 kB
main-HASH.js gzip 5.86 kB 6.79 kB ⚠️ +927 B
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
16b1a7225520..63e75d588.js 19.7 kB N/A N/A
16b1a7225520..d588.js gzip 7.23 kB N/A N/A
4952ddcd88e7..bfe360fe6.js 10.5 kB 10.5 kB
4952ddcd88e7..0fe6.js gzip 4.06 kB 4.06 kB
commons.HASH.js 11.3 kB 11.3 kB
commons.HASH.js gzip 4.23 kB 4.23 kB
de003c3a9d30..9e9c1d310.js 28.6 kB 28.6 kB
de003c3a9d30..d310.js gzip 10.8 kB 10.8 kB
framework.1b..cdcfe1283.js 125 kB 125 kB
framework.1b..1283.js gzip 39.4 kB 39.4 kB
16b1a7225520..4a7b46563.js N/A 14.9 kB N/A
16b1a7225520..6563.js gzip N/A 5.38 kB N/A
Overall change 214 kB 211 kB ⚠️ +2.33 kB
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.module.js 14 kB 17.2 kB ⚠️ +3.18 kB
main-HASH.module.js gzip 5.26 kB 6.55 kB ⚠️ +1.29 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
16b1a7225520..51.module.js 15.8 kB N/A N/A
16b1a7225520..dule.js gzip 6.06 kB N/A N/A
4952ddcd88e7..4a.module.js 12.8 kB 12.8 kB
4952ddcd88e7..dule.js gzip 4.75 kB 4.75 kB
de003c3a9d30..c0.module.js 22.1 kB N/A N/A
de003c3a9d30..dule.js gzip 8.67 kB N/A N/A
framework.5b..d3.module.js 125 kB 125 kB ⚠️ +37 B
framework.5b..dule.js gzip 39.4 kB 39.4 kB ⚠️ +8 B
16b1a7225520..d2.module.js N/A 10.8 kB N/A
16b1a7225520..dule.js gzip N/A 4.06 kB N/A
de003c3a9d30..11.module.js N/A 22.1 kB N/A
de003c3a9d30..dule.js gzip N/A 8.69 kB N/A
Overall change 192 kB 190 kB ⚠️ +3.21 kB
Client Pages Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.js 1.63 kB 1.63 kB
_app.js gzip 788 B 788 B
_error.js 12.3 kB 12.3 kB
_error.js gzip 4.79 kB 4.79 kB
hooks.js 1.92 kB 1.51 kB -400 B
hooks.js gzip 941 B 789 B -152 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 5.81 kB 8.15 kB ⚠️ +2.34 kB
link.js gzip 2.56 kB 3.5 kB ⚠️ +938 B
routerDirect.js 413 B 413 B
routerDirect.js gzip 285 B 285 B
withRouter.js 423 B 423 B
withRouter.js gzip 284 B 284 B
Overall change 22.8 kB 24.7 kB ⚠️ +1.94 kB
Client Pages Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.module.js 1.53 kB 1.55 kB ⚠️ +17 B
_app.module.js gzip 749 B 764 B ⚠️ +15 B
_error.module.js 10.5 kB 10.6 kB ⚠️ +48 B
_error.module.js gzip 4.26 kB 4.28 kB ⚠️ +13 B
hooks.module.js 1.52 kB 1.52 kB ⚠️ +2 B
hooks.module.js gzip 792 B 794 B ⚠️ +2 B
index.module.js 292 B 294 B ⚠️ +2 B
index.module.js gzip 223 B 223 B
link.module.js 5.47 kB 8.55 kB ⚠️ +3.09 kB
link.module.js gzip 2.46 kB 3.69 kB ⚠️ +1.24 kB
routerDirect.module.js 399 B 399 B
routerDirect..dule.js gzip 285 B 285 B
withRouter.module.js 409 B 409 B
withRouter.m..dule.js gzip 282 B 282 B
Overall change 20.1 kB 23.3 kB ⚠️ +3.15 kB
Client Build Manifests
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_buildManifest.js 244 B 244 B
_buildManifest.js gzip 199 B 200 B ⚠️ +1 B
_buildManifest.module.js 251 B 251 B
_buildManife..dule.js gzip 210 B 209 B -1 B
Overall change 495 B 495 B
Rendered Page Sizes
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
index.html 3.94 kB 3.94 kB
index.html gzip 1 kB 1 kB -1 B
link.html 4.47 kB 4.47 kB
link.html gzip 1.08 kB 1.08 kB ⚠️ +2 B
withRouter.html 4.47 kB 4.47 kB
withRouter.html gzip 1.07 kB 1.07 kB ⚠️ +1 B
Overall change 12.9 kB 12.9 kB

Diffs

Diff for main-HASH.js
@@ -98,6 +98,29 @@ window.next = next;
 
 /***/ }),
 
+/***/ "C2SN":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+var isArray = __webpack_require__("kAMH");
+var SPECIES = __webpack_require__("UWiX")('species');
+
+module.exports = function (original) {
+  var C;
+  if (isArray(original)) {
+    C = original.constructor;
+    // cross-realm fallback
+    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
+    if (isObject(C)) {
+      C = C[SPECIES];
+      if (C === null) C = undefined;
+    }
+  } return C === undefined ? Array : C;
+};
+
+
+/***/ }),
+
 /***/ "DqTX":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -332,6 +355,11 @@ var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
 /* global location */
+// Polyfill Promise globally
+// This is needed because Webpack's dynamic loading(common chunks) code
+// depends on Promise.
+// So, we need to polyfill it.
+// See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
 
 
 if (!window.Promise) {
@@ -340,7 +368,7 @@ if (!window.Promise) {
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
 window.__NEXT_DATA__ = data;
-var version = "9.1.3-canary.0";
+var version = "9.1.2-canary.7";
 exports.version = version;
 var props = data.props,
     err = data.err,
@@ -415,7 +443,7 @@ function (_react$default$Compon) {
 
       if (data.nextExport && ((0, _isDynamic.isDynamicRoute)(router.pathname) || location.search || data.skeleton)) {
         // update query on mount for exported pages
-        router.replace(router.pathname + '?' + (0, _querystring.stringify)((0, _extends2["default"])({}, router.query, {}, (0, _querystring.parse)(location.search.substr(1)))), asPath, {
+        router.replace(router.pathname + '?' + (0, _querystring.stringify)((0, _extends2["default"])({}, router.query, (0, _querystring.parse)(location.search.substr(1)))), asPath, {
           // WARNING: `_h` is an internal option for handing Next.js
           // client-side hydration. Your app should _never_ use this property.
           // It may change at any time without notice.
@@ -719,23 +747,20 @@ function _renderError() {
 }
 
 var isInitialRender = typeof _reactDom["default"].hydrate === 'function';
-var reactRoot = null;
 
 function renderReactElement(reactEl, domEl) {
   // mark start of hydrate/render
   if (_utils.SUPPORTS_PERFORMANCE_USER_TIMING) {
     performance.mark('beforeRender');
-  }
+  } // The check for `.hydrate` is there to support React alternatives like preact
 
-  if (false) { var opts, callback; } else {
-    // The check for `.hydrate` is there to support React alternatives like preact
-    if (isInitialRender) {
-      _reactDom["default"].hydrate(reactEl, domEl, markHydrateComplete);
 
-      isInitialRender = false;
-    } else {
-      _reactDom["default"].render(reactEl, domEl, markRenderComplete);
-    }
+  if (isInitialRender) {
+    _reactDom["default"].hydrate(reactEl, domEl, markHydrateComplete);
+
+    isInitialRender = false;
+  } else {
+    _reactDom["default"].render(reactEl, domEl, markRenderComplete);
   }
 
   if (onPerfEntry) {
@@ -828,7 +853,7 @@ function _doRender() {
   _doRender = (0, _asyncToGenerator2["default"])(
   /*#__PURE__*/
   _regeneratorRuntime.mark(function _callee4(_ref6) {
-    var App, Component, props, err, _router2, pathname, _query, _asPath, AppTree, appCtx, appProps, elem;
+    var App, Component, props, err, _router2, pathname, _query, _asPath, AppTree, appCtx, appProps;
 
     return _regeneratorRuntime.wrap(function _callee4$(_context4) {
       while (1) {
@@ -868,25 +893,24 @@ function _doRender() {
             appProps = (0, _extends2["default"])({}, props, {
               Component: Component,
               err: err,
-              router: router
-            }); // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.
+              router: router // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.
 
+            });
             lastAppProps = appProps;
             emitter.emit('before-reactdom-render', {
               Component: Component,
               ErrorComponent: ErrorComponent,
               appProps: appProps
-            });
-            elem = _react["default"].createElement(AppContainer, null, _react["default"].createElement(App, appProps)); // We catch runtime errors using componentDidCatch which will trigger renderError
+            }); // We catch runtime errors using componentDidCatch which will trigger renderError
 
-            renderReactElement( false ? undefined : elem, appElement);
+            renderReactElement(_react["default"].createElement(AppContainer, null, _react["default"].createElement(App, appProps)), appElement);
             emitter.emit('after-reactdom-render', {
               Component: Component,
               ErrorComponent: ErrorComponent,
               appProps: appProps
             });
 
-          case 16:
+          case 15:
           case "end":
             return _context4.stop();
         }
@@ -934,6 +958,57 @@ module.exports = __webpack_require__("WEpk").Map;
 
 /***/ }),
 
+/***/ "V7Et":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 0 -> Array#forEach
+// 1 -> Array#map
+// 2 -> Array#filter
+// 3 -> Array#some
+// 4 -> Array#every
+// 5 -> Array#find
+// 6 -> Array#findIndex
+var ctx = __webpack_require__("2GTP");
+var IObject = __webpack_require__("M1xp");
+var toObject = __webpack_require__("JB68");
+var toLength = __webpack_require__("tEej");
+var asc = __webpack_require__("v6xn");
+module.exports = function (TYPE, $create) {
+  var IS_MAP = TYPE == 1;
+  var IS_FILTER = TYPE == 2;
+  var IS_SOME = TYPE == 3;
+  var IS_EVERY = TYPE == 4;
+  var IS_FIND_INDEX = TYPE == 6;
+  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
+  var create = $create || asc;
+  return function ($this, callbackfn, that) {
+    var O = toObject($this);
+    var self = IObject(O);
+    var f = ctx(callbackfn, that, 3);
+    var length = toLength(self.length);
+    var index = 0;
+    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
+    var val, res;
+    for (;length > index; index++) if (NO_HOLES || index in self) {
+      val = self[index];
+      res = f(val, index, O);
+      if (TYPE) {
+        if (IS_MAP) result[index] = res;   // map
+        else if (res) switch (TYPE) {
+          case 3: return true;             // some
+          case 5: return val;              // find
+          case 6: return index;            // findIndex
+          case 2: result.push(val);        // filter
+        } else if (IS_EVERY) return false; // every
+      }
+    }
+    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
+  };
+};
+
+
+/***/ }),
+
 /***/ "Wu5q":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1097,6 +1172,62 @@ $export($export.P + $export.R, 'Map', { toJSON: __webpack_require__("8iia")('Map
 
 /***/ }),
 
+/***/ "aPfg":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+var aFunction = __webpack_require__("eaoh");
+var ctx = __webpack_require__("2GTP");
+var forOf = __webpack_require__("oioR");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
+    var mapFn = arguments[1];
+    var mapping, A, n, cb;
+    aFunction(this);
+    mapping = mapFn !== undefined;
+    if (mapping) aFunction(mapFn);
+    if (source == undefined) return new this();
+    A = [];
+    if (mapping) {
+      n = 0;
+      cb = ctx(mapFn, arguments[2], 2);
+      forOf(source, false, function (nextItem) {
+        A.push(cb(nextItem, n++));
+      });
+    } else {
+      forOf(source, false, A.push, A);
+    }
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
+/***/ "cHUd":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { of: function of() {
+    var length = arguments.length;
+    var A = new Array(length);
+    while (length--) A[length] = arguments[length];
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
 /***/ "dVTT":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1133,6 +1264,18 @@ module.exports = __webpack_require__("raTm")(MAP, function (get) {
 
 /***/ }),
 
+/***/ "n3ko":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+module.exports = function (it, TYPE) {
+  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
+  return it;
+};
+
+
+/***/ }),
+
 /***/ "qArv":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1161,6 +1304,86 @@ exports.DataManagerContext = React.createContext(null);
 
 /***/ }),
 
+/***/ "raTm":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var global = __webpack_require__("5T2Y");
+var $export = __webpack_require__("Y7ZC");
+var meta = __webpack_require__("6/1s");
+var fails = __webpack_require__("KUxP");
+var hide = __webpack_require__("NegM");
+var redefineAll = __webpack_require__("XJU/");
+var forOf = __webpack_require__("oioR");
+var anInstance = __webpack_require__("EXMj");
+var isObject = __webpack_require__("93I4");
+var setToStringTag = __webpack_require__("RfKB");
+var dP = __webpack_require__("2faE").f;
+var each = __webpack_require__("V7Et")(0);
+var DESCRIPTORS = __webpack_require__("jmDH");
+
+module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
+  var Base = global[NAME];
+  var C = Base;
+  var ADDER = IS_MAP ? 'set' : 'add';
+  var proto = C && C.prototype;
+  var O = {};
+  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
+    new C().entries().next();
+  }))) {
+    // create collection constructor
+    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
+    redefineAll(C.prototype, methods);
+    meta.NEED = true;
+  } else {
+    C = wrapper(function (target, iterable) {
+      anInstance(target, C, NAME, '_c');
+      target._c = new Base();
+      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);
+    });
+    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {
+      var IS_ADDER = KEY == 'add' || KEY == 'set';
+      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {
+        anInstance(this, C, KEY);
+        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
+        var result = this._c[KEY](a === 0 ? 0 : a, b);
+        return IS_ADDER ? this : result;
+      });
+    });
+    IS_WEAK || dP(C.prototype, 'size', {
+      get: function () {
+        return this._c.size;
+      }
+    });
+  }
+
+  setToStringTag(C, NAME);
+
+  O[NAME] = C;
+  $export($export.G + $export.W + $export.F, O);
+
+  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
+
+  return C;
+};
+
+
+/***/ }),
+
+/***/ "v6xn":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var speciesConstructor = __webpack_require__("C2SN");
+
+module.exports = function (original, length) {
+  return new (speciesConstructor(original))(length);
+};
+
+
+/***/ }),
+
 /***/ "yLiY":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1456,7 +1679,7 @@ function () {
                   scriptRoute = scriptRoute.replace(/\.js$/, '.module.js');
                 }
 
-                url = _this2.assetPrefix + (isDependency ? route : "/_next/static/" + encodeURIComponent(_this2.buildId) + "/pages" + scriptRoute); // n.b. If preload is not supported, we fall back to `loadPage` which has
+                url = isDependency ? route : _this2.assetPrefix + "/_next/static/" + encodeURIComponent(_this2.buildId) + "/pages" + scriptRoute; // n.b. If preload is not supported, we fall back to `loadPage` which has
                 // its own deduping mechanism.
 
                 if (!document.querySelector("link[rel=\"preload\"][href^=\"" + url + "\"], script[data-next-page=\"" + route + "\"]")) {
Diff for main-HASH.module.js
@@ -95,6 +95,66 @@ exports.DataManager = DataManager;
 
 /***/ }),
 
+/***/ "6/1s":
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__("YqAc")('meta');
+var isObject = __webpack_require__("93I4");
+var has = __webpack_require__("B+OT");
+var setDesc = __webpack_require__("2faE").f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+  return true;
+};
+var FREEZE = !__webpack_require__("KUxP")(function () {
+  return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+  setDesc(it, META, { value: {
+    i: 'O' + ++id, // object ID
+    w: {}          // weak collections IDs
+  } });
+};
+var fastKey = function (it, create) {
+  // return primitive with prefix
+  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+  if (!has(it, META)) {
+    // can't set metadata to uncaught frozen object
+    if (!isExtensible(it)) return 'F';
+    // not necessary to add metadata
+    if (!create) return 'E';
+    // add missing metadata
+    setMeta(it);
+  // return object ID
+  } return it[META].i;
+};
+var getWeak = function (it, create) {
+  if (!has(it, META)) {
+    // can't set metadata to uncaught frozen object
+    if (!isExtensible(it)) return true;
+    // not necessary to add metadata
+    if (!create) return false;
+    // add missing metadata
+    setMeta(it);
+  // return hash weak collections IDs
+  } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+  return it;
+};
+var meta = module.exports = {
+  KEY: META,
+  NEED: false,
+  fastKey: fastKey,
+  getWeak: getWeak,
+  onFreeze: onFreeze
+};
+
+
+/***/ }),
+
 /***/ "8iia":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -128,6 +188,29 @@ window.next = next;
 
 /***/ }),
 
+/***/ "C2SN":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+var isArray = __webpack_require__("kAMH");
+var SPECIES = __webpack_require__("UWiX")('species');
+
+module.exports = function (original) {
+  var C;
+  if (isArray(original)) {
+    C = original.constructor;
+    // cross-realm fallback
+    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
+    if (isObject(C)) {
+      C = C[SPECIES];
+      if (C === null) C = undefined;
+    }
+  } return C === undefined ? Array : C;
+};
+
+
+/***/ }),
+
 /***/ "DqTX":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -141,7 +224,7 @@ exports.default = void 0;
 
 var _promise = _interopRequireDefault(__webpack_require__("eVuF"));
 
-var DOMAttributeNames = {
+const DOMAttributeNames = {
   acceptCharset: 'accept-charset',
   className: 'class',
   htmlFor: 'for',
@@ -151,7 +234,7 @@ var DOMAttributeNames = {
 class HeadManager {
   constructor() {
     this.updateHead = head => {
-      var promise = this.updatePromise = _promise.default.resolve().then(() => {
+      const promise = this.updatePromise = _promise.default.resolve().then(() => {
         if (promise !== this.updatePromise) return;
         this.updatePromise = null;
         this.doUpdateHead(head);
@@ -162,24 +245,24 @@ class HeadManager {
   }
 
   doUpdateHead(head) {
-    var tags = {};
+    const tags = {};
     head.forEach(h => {
-      var components = tags[h.type] || [];
+      const components = tags[h.type] || [];
       components.push(h);
       tags[h.type] = components;
     });
     this.updateTitle(tags.title ? tags.title[0] : null);
-    var types = ['meta', 'base', 'link', 'style', 'script'];
+    const types = ['meta', 'base', 'link', 'style', 'script'];
     types.forEach(type => {
       this.updateElements(type, tags[type] || []);
     });
   }
 
   updateTitle(component) {
-    var title = '';
+    let title = '';
 
     if (component) {
-      var {
+      const {
         children
       } = component.props;
       title = typeof children === 'string' ? children : children.join('');
@@ -189,23 +272,23 @@ class HeadManager {
   }
 
   updateElements(type, components) {
-    var headEl = document.getElementsByTagName('head')[0];
-    var headCountEl = headEl.querySelector('meta[name=next-head-count]');
+    const headEl = document.getElementsByTagName('head')[0];
+    const headCountEl = headEl.querySelector('meta[name=next-head-count]');
 
     if (false) {}
 
-    var headCount = Number(headCountEl.content);
-    var oldTags = [];
+    const headCount = Number(headCountEl.content);
+    const oldTags = [];
 
-    for (var i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = j.previousElementSibling) {
+    for (let i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = j.previousElementSibling) {
       if (j.tagName.toLowerCase() === type) {
         oldTags.push(j);
       }
     }
 
-    var newTags = components.map(reactElementToDOM).filter(newTag => {
-      for (var k = 0, len = oldTags.length; k < len; k++) {
-        var oldTag = oldTags[k];
+    const newTags = components.map(reactElementToDOM).filter(newTag => {
+      for (let k = 0, len = oldTags.length; k < len; k++) {
+        const oldTag = oldTags[k];
 
         if (oldTag.isEqualNode(newTag)) {
           oldTags.splice(k, 1);
@@ -225,20 +308,20 @@ class HeadManager {
 exports.default = HeadManager;
 
 function reactElementToDOM(_ref) {
-  var {
+  let {
     type,
     props
   } = _ref;
-  var el = document.createElement(type);
+  const el = document.createElement(type);
 
-  for (var p in props) {
+  for (const p in props) {
     if (!props.hasOwnProperty(p)) continue;
     if (p === 'children' || p === 'dangerouslySetInnerHTML') continue;
-    var attr = DOMAttributeNames[p] || p.toLowerCase();
+    const attr = DOMAttributeNames[p] || p.toLowerCase();
     el.setAttribute(attr, props[p]);
   }
 
-  var {
+  const {
     children,
     dangerouslySetInnerHTML
   } = props;
@@ -265,9 +348,7 @@ var _Object$defineProperty = __webpack_require__("hfKm");
 var __importStar = this && this.__importStar || function (mod) {
   if (mod && mod.__esModule) return mod;
   var result = {};
-  if (mod != null) for (var k in mod) {
-    if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-  }
+  if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
   result["default"] = mod;
   return result;
 };
@@ -276,7 +357,7 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var React = __importStar(__webpack_require__("q1tI"));
+const React = __importStar(__webpack_require__("q1tI"));
 
 exports.HeadManagerContext = React.createContext(null);
 
@@ -331,17 +412,22 @@ var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
 /* global location */
+// Polyfill Promise globally
+// This is needed because Webpack's dynamic loading(common chunks) code
+// depends on Promise.
+// So, we need to polyfill it.
+// See: https://webpack.js.org/guides/code-splitting/#dynamic-imports
 
 
 if (!window.Promise) {
   window.Promise = _promise.default;
 }
 
-var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
+const data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
 window.__NEXT_DATA__ = data;
-var version = "9.1.3-canary.0";
+const version = "9.1.2-canary.7";
 exports.version = version;
-var {
+const {
   props,
   err,
   page,
@@ -351,10 +437,10 @@ var {
   runtimeConfig,
   dynamicIds
 } = data;
-var d = JSON.parse(window.__NEXT_DATA__.dataManager);
-var dataManager = new _dataManager.DataManager(d);
+const d = JSON.parse(window.__NEXT_DATA__.dataManager);
+const dataManager = new _dataManager.DataManager(d);
 exports.dataManager = dataManager;
-var prefix = assetPrefix || ''; // With dynamic assetPrefix it's no longer possible to set assetPrefix at the build time
+const prefix = assetPrefix || ''; // With dynamic assetPrefix it's no longer possible to set assetPrefix at the build time
 // So, this is how we do it in the client side at runtime
 
 __webpack_require__.p = prefix + "/_next/"; //eslint-disable-line
@@ -364,11 +450,11 @@ envConfig.setConfig({
   serverRuntimeConfig: {},
   publicRuntimeConfig: runtimeConfig || {}
 });
-var asPath = (0, _utils.getURL)();
-var pageLoader = new _pageLoader.default(buildId, prefix);
+const asPath = (0, _utils.getURL)();
+const pageLoader = new _pageLoader.default(buildId, prefix);
 
-var register = _ref => {
-  var [r, f] = _ref;
+const register = _ref => {
+  let [r, f] = _ref;
   return pageLoader.registerPage(r, f);
 };
 
@@ -378,16 +464,16 @@ if (window.__NEXT_P) {
 
 window.__NEXT_P = [];
 window.__NEXT_P.push = register;
-var headManager = new _headManager.default();
-var appElement = document.getElementById('__next');
-var lastAppProps;
-var webpackHMR;
-var router;
+const headManager = new _headManager.default();
+const appElement = document.getElementById('__next');
+let lastAppProps;
+let webpackHMR;
+let router;
 exports.router = router;
-var ErrorComponent;
+let ErrorComponent;
 exports.ErrorComponent = ErrorComponent;
-var Component;
-var App, onPerfEntry;
+let Component;
+let App, onPerfEntry;
 
 class Container extends _react.default.Component {
   componentDidCatch(err, info) {
@@ -400,7 +486,7 @@ class Container extends _react.default.Component {
 
     if (data.nextExport && ((0, _isDynamic.isDynamicRoute)(router.pathname) || location.search || data.skeleton)) {
       // update query on mount for exported pages
-      router.replace(router.pathname + '?' + (0, _querystring.stringify)((0, _extends2.default)({}, router.query, {}, (0, _querystring.parse)(location.search.substr(1)))), asPath, {
+      router.replace(router.pathname + '?' + (0, _querystring.stringify)((0, _extends2.default)({}, router.query, (0, _querystring.parse)(location.search.substr(1)))), asPath, {
         // WARNING: `_h` is an internal option for handing Next.js
         // client-side hydration. Your app should _never_ use this property.
         // It may change at any time without notice.
@@ -414,12 +500,12 @@ class Container extends _react.default.Component {
   }
 
   scrollToHash() {
-    var {
+    let {
       hash
     } = location;
     hash = hash && hash.substring(1);
     if (!hash) return;
-    var el = document.getElementById(hash);
+    const el = document.getElementById(hash);
     if (!el) return; // If we call scrollIntoView() in here without a setTimeout
     // it won't scroll properly.
 
@@ -432,20 +518,20 @@ class Container extends _react.default.Component {
 
 }
 
-var emitter = (0, _mitt.default)();
+const emitter = (0, _mitt.default)();
 exports.emitter = emitter;
 
 var _default =
 /*#__PURE__*/
 function () {
   var _ref2 = (0, _asyncToGenerator2.default)(function* (_temp) {
-    var {
+    let {
       webpackHMR: passedWebpackHMR
     } = _temp === void 0 ? {} : _temp; // This makes sure this specific lines are removed in production
 
     if (false) {}
 
-    var {
+    const {
       page: app,
       mod
     } = yield pageLoader.loadPageScript('/_app');
@@ -453,7 +539,7 @@ function () {
 
     if (mod && mod.unstable_onPerformanceData) {
       onPerfEntry = function onPerfEntry(_ref3) {
-        var {
+        let {
           name,
           startTime,
           value
@@ -466,12 +552,12 @@ function () {
       };
     }
 
-    var initialErr = err;
+    let initialErr = err;
 
     try {
       Component = yield pageLoader.loadPage(page);
 
-      if (false) { var isValidElementType; }
+      if (false) {}
     } catch (error) {
       // This catches errors like throwing in the top level of a module
       initialErr = error;
@@ -489,7 +575,7 @@ function () {
       wrapApp,
       err: initialErr,
       subscription: (_ref4, App) => {
-        var {
+        let {
           Component,
           props,
           err
@@ -503,7 +589,7 @@ function () {
         });
       }
     });
-    var renderCtx = {
+    const renderCtx = {
       App,
       Component,
       props,
@@ -553,7 +639,7 @@ function renderError(_x3) {
 
 function _renderError() {
   _renderError = (0, _asyncToGenerator2.default)(function* (props) {
-    var {
+    const {
       App,
       err
     } = props; // In development runtime errors are caught by react-error-overlay
@@ -567,8 +653,8 @@ function _renderError() {
     // If we've gotten here upon initial render, we can use the props from the server.
     // Otherwise, we need to call `getInitialProps` on `App` before mounting.
 
-    var AppTree = wrapApp(App);
-    var appCtx = {
+    const AppTree = wrapApp(App);
+    const appCtx = {
       Component: ErrorComponent,
       AppTree,
       router,
@@ -580,7 +666,7 @@ function _renderError() {
         AppTree
       }
     };
-    var initProps = props.props ? props.props : yield (0, _utils.loadGetInitialProps)(App, appCtx);
+    const initProps = props.props ? props.props : yield (0, _utils.loadGetInitialProps)(App, appCtx);
     yield doRender((0, _extends2.default)({}, props, {
       err,
       Component: ErrorComponent,
@@ -590,24 +676,21 @@ function _renderError() {
   return _renderError.apply(this, arguments);
 }
 
-var isInitialRender = typeof _reactDom.default.hydrate === 'function';
-var reactRoot = null;
+let isInitialRender = typeof _reactDom.default.hydrate === 'function';
 
 function renderReactElement(reactEl, domEl) {
   // mark start of hydrate/render
   if (_utils.SUPPORTS_PERFORMANCE_USER_TIMING) {
     performance.mark('beforeRender');
-  }
+  } // The check for `.hydrate` is there to support React alternatives like preact
 
-  if (false) { var opts, callback; } else {
-    // The check for `.hydrate` is there to support React alternatives like preact
-    if (isInitialRender) {
-      _reactDom.default.hydrate(reactEl, domEl, markHydrateComplete);
 
-      isInitialRender = false;
-    } else {
-      _reactDom.default.render(reactEl, domEl, markRenderComplete);
-    }
+  if (isInitialRender) {
+    _reactDom.default.hydrate(reactEl, domEl, markHydrateComplete);
+
+    isInitialRender = false;
+  } else {
+    _reactDom.default.render(reactEl, domEl, markRenderComplete);
   }
 
   if (onPerfEntry) {
@@ -634,7 +717,7 @@ function markRenderComplete() {
   if (!_utils.SUPPORTS_PERFORMANCE_USER_TIMING) return;
   performance.mark('afterRender'); // mark end of render
 
-  var navStartEntries = performance.getEntriesByName('routeChange', 'mark');
+  const navStartEntries = performance.getEntriesByName('routeChange', 'mark');
 
   if (!navStartEntries.length) {
     return;
@@ -658,7 +741,7 @@ function clearMarks() {
 }
 
 function AppContainer(_ref5) {
-  var {
+  let {
     children
   } = _ref5;
   return _react.default.createElement(Container, {
@@ -675,8 +758,8 @@ function AppContainer(_ref5) {
   }, children))));
 }
 
-var wrapApp = App => props => {
-  var appProps = (0, _extends2.default)({}, props, {
+const wrapApp = App => props => {
+  const appProps = (0, _extends2.default)({}, props, {
     Component,
     err,
     router
@@ -690,7 +773,7 @@ function doRender(_x4) {
 
 function _doRender() {
   _doRender = (0, _asyncToGenerator2.default)(function* (_ref6) {
-    var {
+    let {
       App,
       Component,
       props,
@@ -699,21 +782,21 @@ function _doRender() {
     // this is for when ErrorComponent gets replaced by Component by HMR
 
     if (!props && Component && Component !== ErrorComponent && lastAppProps.Component === ErrorComponent) {
-      var {
+      const {
         pathname,
-        query: _query,
-        asPath: _asPath
+        query,
+        asPath
       } = router;
-      var AppTree = wrapApp(App);
-      var appCtx = {
+      const AppTree = wrapApp(App);
+      const appCtx = {
         router,
         AppTree,
         Component: ErrorComponent,
         ctx: {
           err,
           pathname,
-          query: _query,
-          asPath: _asPath,
+          query,
+          asPath,
           AppTree
         }
       };
@@ -722,23 +805,20 @@ function _doRender() {
 
     Component = Component || lastAppProps.Component;
     props = props || lastAppProps.props;
-    var appProps = (0, _extends2.default)({}, props, {
+    const appProps = (0, _extends2.default)({}, props, {
       Component,
       err,
-      router
-    }); // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.
+      router // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.
 
+    });
     lastAppProps = appProps;
     emitter.emit('before-reactdom-render', {
       Component,
       ErrorComponent,
       appProps
-    });
-
-    var elem = _react.default.createElement(AppContainer, null, _react.default.createElement(App, appProps)); // We catch runtime errors using componentDidCatch which will trigger renderError
+    }); // We catch runtime errors using componentDidCatch which will trigger renderError
 
-
-    renderReactElement( false ? undefined : elem, appElement);
+    renderReactElement(_react.default.createElement(AppContainer, null, _react.default.createElement(App, appProps)), appElement);
     emitter.emit('after-reactdom-render', {
       Component,
       ErrorComponent,
@@ -786,6 +866,57 @@ module.exports = __webpack_require__("WEpk").Map;
 
 /***/ }),
 
+/***/ "V7Et":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 0 -> Array#forEach
+// 1 -> Array#map
+// 2 -> Array#filter
+// 3 -> Array#some
+// 4 -> Array#every
+// 5 -> Array#find
+// 6 -> Array#findIndex
+var ctx = __webpack_require__("2GTP");
+var IObject = __webpack_require__("M1xp");
+var toObject = __webpack_require__("JB68");
+var toLength = __webpack_require__("tEej");
+var asc = __webpack_require__("v6xn");
+module.exports = function (TYPE, $create) {
+  var IS_MAP = TYPE == 1;
+  var IS_FILTER = TYPE == 2;
+  var IS_SOME = TYPE == 3;
+  var IS_EVERY = TYPE == 4;
+  var IS_FIND_INDEX = TYPE == 6;
+  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
+  var create = $create || asc;
+  return function ($this, callbackfn, that) {
+    var O = toObject($this);
+    var self = IObject(O);
+    var f = ctx(callbackfn, that, 3);
+    var length = toLength(self.length);
+    var index = 0;
+    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
+    var val, res;
+    for (;length > index; index++) if (NO_HOLES || index in self) {
+      val = self[index];
+      res = f(val, index, O);
+      if (TYPE) {
+        if (IS_MAP) result[index] = res;   // map
+        else if (res) switch (TYPE) {
+          case 3: return true;             // some
+          case 5: return val;              // find
+          case 6: return index;            // findIndex
+          case 2: result.push(val);        // filter
+        } else if (IS_EVERY) return false; // every
+      }
+    }
+    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
+  };
+};
+
+
+/***/ }),
+
 /***/ "Wu5q":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -949,6 +1080,62 @@ $export($export.P + $export.R, 'Map', { toJSON: __webpack_require__("8iia")('Map
 
 /***/ }),
 
+/***/ "aPfg":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+var aFunction = __webpack_require__("eaoh");
+var ctx = __webpack_require__("2GTP");
+var forOf = __webpack_require__("oioR");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
+    var mapFn = arguments[1];
+    var mapping, A, n, cb;
+    aFunction(this);
+    mapping = mapFn !== undefined;
+    if (mapping) aFunction(mapFn);
+    if (source == undefined) return new this();
+    A = [];
+    if (mapping) {
+      n = 0;
+      cb = ctx(mapFn, arguments[2], 2);
+      forOf(source, false, function (nextItem) {
+        A.push(cb(nextItem, n++));
+      });
+    } else {
+      forOf(source, false, A.push, A);
+    }
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
+/***/ "cHUd":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { of: function of() {
+    var length = arguments.length;
+    var A = new Array(length);
+    while (length--) A[length] = arguments[length];
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
 /***/ "dVTT":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -985,6 +1172,30 @@ module.exports = __webpack_require__("raTm")(MAP, function (get) {
 
 /***/ }),
 
+/***/ "kAMH":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__("a0xu");
+module.exports = Array.isArray || function isArray(arg) {
+  return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+
+/***/ "n3ko":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+module.exports = function (it, TYPE) {
+  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
+  return it;
+};
+
+
+/***/ }),
+
 /***/ "qArv":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -996,9 +1207,7 @@ var _Object$defineProperty = __webpack_require__("hfKm");
 var __importStar = this && this.__importStar || function (mod) {
   if (mod && mod.__esModule) return mod;
   var result = {};
-  if (mod != null) for (var k in mod) {
-    if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-  }
+  if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
   result["default"] = mod;
   return result;
 };
@@ -1007,12 +1216,92 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var React = __importStar(__webpack_require__("q1tI"));
+const React = __importStar(__webpack_require__("q1tI"));
 
 exports.DataManagerContext = React.createContext(null);
 
 /***/ }),
 
+/***/ "raTm":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var global = __webpack_require__("5T2Y");
+var $export = __webpack_require__("Y7ZC");
+var meta = __webpack_require__("6/1s");
+var fails = __webpack_require__("KUxP");
+var hide = __webpack_require__("NegM");
+var redefineAll = __webpack_require__("XJU/");
+var forOf = __webpack_require__("oioR");
+var anInstance = __webpack_require__("EXMj");
+var isObject = __webpack_require__("93I4");
+var setToStringTag = __webpack_require__("RfKB");
+var dP = __webpack_require__("2faE").f;
+var each = __webpack_require__("V7Et")(0);
+var DESCRIPTORS = __webpack_require__("jmDH");
+
+module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
+  var Base = global[NAME];
+  var C = Base;
+  var ADDER = IS_MAP ? 'set' : 'add';
+  var proto = C && C.prototype;
+  var O = {};
+  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
+    new C().entries().next();
+  }))) {
+    // create collection constructor
+    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
+    redefineAll(C.prototype, methods);
+    meta.NEED = true;
+  } else {
+    C = wrapper(function (target, iterable) {
+      anInstance(target, C, NAME, '_c');
+      target._c = new Base();
+      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);
+    });
+    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {
+      var IS_ADDER = KEY == 'add' || KEY == 'set';
+      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {
+        anInstance(this, C, KEY);
+        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
+        var result = this._c[KEY](a === 0 ? 0 : a, b);
+        return IS_ADDER ? this : result;
+      });
+    });
+    IS_WEAK || dP(C.prototype, 'size', {
+      get: function () {
+        return this._c.size;
+      }
+    });
+  }
+
+  setToStringTag(C, NAME);
+
+  O[NAME] = C;
+  $export($export.G + $export.W + $export.F, O);
+
+  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
+
+  return C;
+};
+
+
+/***/ }),
+
+/***/ "v6xn":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var speciesConstructor = __webpack_require__("C2SN");
+
+module.exports = function (original, length) {
+  return new (speciesConstructor(original))(length);
+};
+
+
+/***/ }),
+
 /***/ "yLiY":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1025,7 +1314,7 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var runtimeConfig;
+let runtimeConfig;
 
 exports.default = () => {
   return runtimeConfig;
@@ -1066,10 +1355,10 @@ function supportsPreload(el) {
   }
 }
 
-var hasPreload = supportsPreload(document.createElement('link'));
+const hasPreload = supportsPreload(document.createElement('link'));
 
 function preloadScript(url) {
-  var link = document.createElement('link');
+  const link = document.createElement('link');
   link.rel = 'preload';
   link.crossOrigin = "anonymous";
   link.href = encodeURI(url);
@@ -1120,8 +1409,8 @@ class PageLoader {
   loadPageScript(route) {
     route = this.normalizeRoute(route);
     return new _promise.default((resolve, reject) => {
-      var fire = _ref => {
-        var {
+      const fire = _ref => {
+        let {
           error,
           page,
           mod
@@ -1140,10 +1429,10 @@ class PageLoader {
       }; // If there's a cached version of the page, let's use it.
 
 
-      var cachedPage = this.pageCache[route];
+      const cachedPage = this.pageCache[route];
 
       if (cachedPage) {
-        var {
+        const {
           error,
           page,
           mod
@@ -1184,15 +1473,15 @@ class PageLoader {
 
     return (0, _asyncToGenerator2.default)(function* () {
       route = _this.normalizeRoute(route);
-      var scriptRoute = route === '/' ? '/index.js' : route + ".js";
-      var url = _this.assetPrefix + "/_next/static/" + encodeURIComponent(_this.buildId) + "/pages" + scriptRoute;
+      let scriptRoute = route === '/' ? '/index.js' : route + ".js";
+      const url = _this.assetPrefix + "/_next/static/" + encodeURIComponent(_this.buildId) + "/pages" + scriptRoute;
 
       _this.loadScript(url, route, true);
     })();
   }
 
   loadScript(url, route, isPage) {
-    var script = document.createElement('script');
+    const script = document.createElement('script');
 
     if ( true && 'noModule' in script) {
       script.type = 'module'; // Only page bundle scripts need to have .module added to url,
@@ -1205,7 +1494,7 @@ class PageLoader {
     script.src = encodeURI(url);
 
     script.onerror = () => {
-      var error = new Error("Error loading script " + url);
+      const error = new Error("Error loading script " + url);
       error.code = 'PAGE_LOAD_ERROR';
       this.pageRegisterEvents.emit(route, {
         error
@@ -1217,10 +1506,10 @@ class PageLoader {
 
 
   registerPage(route, regFn) {
-    var register = () => {
+    const register = () => {
       try {
-        var mod = regFn();
-        var pageData = {
+        const mod = regFn();
+        const pageData = {
           page: mod.default || mod,
           mod
         };
@@ -1236,7 +1525,7 @@ class PageLoader {
       }
     };
 
-    if (false) { var check; }
+    if (false) {}
 
     register();
   }
@@ -1246,13 +1535,13 @@ class PageLoader {
 
     return (0, _asyncToGenerator2.default)(function* () {
       route = _this2.normalizeRoute(route);
-      var scriptRoute = (route === '/' ? '/index' : route) + ".js";
+      let scriptRoute = (route === '/' ? '/index' : route) + ".js";
 
       if ( true && 'noModule' in document.createElement('script')) {
         scriptRoute = scriptRoute.replace(/\.js$/, '.module.js');
       }
 
-      var url = _this2.assetPrefix + (isDependency ? route : "/_next/static/" + encodeURIComponent(_this2.buildId) + "/pages" + scriptRoute); // n.b. If preload is not supported, we fall back to `loadPage` which has
+      const url = isDependency ? route : _this2.assetPrefix + "/_next/static/" + encodeURIComponent(_this2.buildId) + "/pages" + scriptRoute; // n.b. If preload is not supported, we fall back to `loadPage` which has
       // its own deduping mechanism.
 
       if (document.querySelector("link[rel=\"preload\"][href^=\"" + url + "\"], script[data-next-page=\"" + route + "\"]")) {
@@ -1260,7 +1549,7 @@ class PageLoader {
       } // Inspired by quicklink, license: https://github.com/GoogleChromeLabs/quicklink/blob/master/LICENSE
 
 
-      var cn;
+      let cn;
 
       if (cn = navigator.connection) {
         // Don't prefetch if the user is on 2G or if Save-Data is enabled.
Diff for hooks.js
@@ -19,18 +19,9 @@ function _arrayWithHoles(arr) {
 var get_iterator = __webpack_require__("XXOK");
 var get_iterator_default = /*#__PURE__*/__webpack_require__.n(get_iterator);
 
-// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs2/core-js/is-iterable.js
-var is_iterable = __webpack_require__("yLu3");
-var is_iterable_default = /*#__PURE__*/__webpack_require__.n(is_iterable);
-
 // CONCATENATED MODULE: ./node_modules/@babel/runtime-corejs2/helpers/esm/iterableToArrayLimit.js
 
-
 function _iterableToArrayLimit(arr, i) {
-  if (!(is_iterable_default()(Object(arr)) || Object.prototype.toString.call(arr) === "[object Arguments]")) {
-    return;
-  }
-
   var _arr = [];
   var _n = true;
   var _d = false;
@@ -129,16 +120,6 @@ module.exports = __webpack_require__("fXsU");
 
 /***/ }),
 
-/***/ "VKFn":
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__("bBy9");
-__webpack_require__("FlQf");
-module.exports = __webpack_require__("ldVq");
-
-
-/***/ }),
-
 /***/ "XXOK":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -173,35 +154,11 @@ module.exports = __webpack_require__("WEpk").getIterator = function (it) {
 
 /***/ }),
 
-/***/ "ldVq":
-/***/ (function(module, exports, __webpack_require__) {
-
-var classof = __webpack_require__("QMMT");
-var ITERATOR = __webpack_require__("UWiX")('iterator');
-var Iterators = __webpack_require__("SBuE");
-module.exports = __webpack_require__("WEpk").isIterable = function (it) {
-  var O = Object(it);
-  return O[ITERATOR] !== undefined
-    || '@@iterator' in O
-    // eslint-disable-next-line no-prototype-builtins
-    || Iterators.hasOwnProperty(classof(O));
-};
-
-
-/***/ }),
-
 /***/ "p0XB":
 /***/ (function(module, exports, __webpack_require__) {
 
 module.exports = __webpack_require__("9BDd");
 
-/***/ }),
-
-/***/ "yLu3":
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__("VKFn");
-
 /***/ })
 
 },[["g1vQ",0,2,1]]]);
\ No newline at end of file
Diff for link.js
@@ -25,6 +25,29 @@ module.exports = function (NAME) {
 
 /***/ }),
 
+/***/ "C2SN":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+var isArray = __webpack_require__("kAMH");
+var SPECIES = __webpack_require__("UWiX")('species');
+
+module.exports = function (original) {
+  var C;
+  if (isArray(original)) {
+    C = original.constructor;
+    // cross-realm fallback
+    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
+    if (isObject(C)) {
+      C = C[SPECIES];
+      if (C === null) C = undefined;
+    }
+  } return C === undefined ? Array : C;
+};
+
+
+/***/ }),
+
 /***/ "LX0d":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -88,6 +111,57 @@ module.exports = __webpack_require__("WEpk").Map;
 
 /***/ }),
 
+/***/ "V7Et":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 0 -> Array#forEach
+// 1 -> Array#map
+// 2 -> Array#filter
+// 3 -> Array#some
+// 4 -> Array#every
+// 5 -> Array#find
+// 6 -> Array#findIndex
+var ctx = __webpack_require__("2GTP");
+var IObject = __webpack_require__("M1xp");
+var toObject = __webpack_require__("JB68");
+var toLength = __webpack_require__("tEej");
+var asc = __webpack_require__("v6xn");
+module.exports = function (TYPE, $create) {
+  var IS_MAP = TYPE == 1;
+  var IS_FILTER = TYPE == 2;
+  var IS_SOME = TYPE == 3;
+  var IS_EVERY = TYPE == 4;
+  var IS_FIND_INDEX = TYPE == 6;
+  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
+  var create = $create || asc;
+  return function ($this, callbackfn, that) {
+    var O = toObject($this);
+    var self = IObject(O);
+    var f = ctx(callbackfn, that, 3);
+    var length = toLength(self.length);
+    var index = 0;
+    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
+    var val, res;
+    for (;length > index; index++) if (NO_HOLES || index in self) {
+      val = self[index];
+      res = f(val, index, O);
+      if (TYPE) {
+        if (IS_MAP) result[index] = res;   // map
+        else if (res) switch (TYPE) {
+          case 3: return true;             // some
+          case 5: return val;              // find
+          case 6: return index;            // findIndex
+          case 2: result.push(val);        // filter
+        } else if (IS_EVERY) return false; // every
+      }
+    }
+    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
+  };
+};
+
+
+/***/ }),
+
 /***/ "V8Sf":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -272,6 +346,62 @@ module.exports = __webpack_require__("cTJO")
 
 /***/ }),
 
+/***/ "aPfg":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+var aFunction = __webpack_require__("eaoh");
+var ctx = __webpack_require__("2GTP");
+var forOf = __webpack_require__("oioR");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
+    var mapFn = arguments[1];
+    var mapping, A, n, cb;
+    aFunction(this);
+    mapping = mapFn !== undefined;
+    if (mapping) aFunction(mapFn);
+    if (source == undefined) return new this();
+    A = [];
+    if (mapping) {
+      n = 0;
+      cb = ctx(mapFn, arguments[2], 2);
+      forOf(source, false, function (nextItem) {
+        A.push(cb(nextItem, n++));
+      });
+    } else {
+      forOf(source, false, A.push, A);
+    }
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
+/***/ "cHUd":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { of: function of() {
+    var length = arguments.length;
+    var A = new Array(length);
+    while (length--) A[length] = arguments[length];
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
 /***/ "cTJO":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -541,9 +671,10 @@ function (_react$Component) {
           if (!e.defaultPrevented) {
             _this3.linkClicked(e);
           }
-        }
-      }; // If child is an <a> tag and doesn't have a href attribute, or if the 'passHref' property is
-      // defined, we specify the current 'href', so that repetition is not needed by the user
+        } // If child is an <a> tag and doesn't have a href attribute, or if the 'passHref' property is
+        // defined, we specify the current 'href', so that repetition is not needed by the user
+
+      };
 
       if (this.props.passHref || child.type === 'a' && !('href' in child.props)) {
         props.href = as || href;
@@ -603,6 +734,98 @@ module.exports = __webpack_require__("raTm")(MAP, function (get) {
 }, strong, true);
 
 
+/***/ }),
+
+/***/ "n3ko":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+module.exports = function (it, TYPE) {
+  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
+  return it;
+};
+
+
+/***/ }),
+
+/***/ "raTm":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var global = __webpack_require__("5T2Y");
+var $export = __webpack_require__("Y7ZC");
+var meta = __webpack_require__("6/1s");
+var fails = __webpack_require__("KUxP");
+var hide = __webpack_require__("NegM");
+var redefineAll = __webpack_require__("XJU/");
+var forOf = __webpack_require__("oioR");
+var anInstance = __webpack_require__("EXMj");
+var isObject = __webpack_require__("93I4");
+var setToStringTag = __webpack_require__("RfKB");
+var dP = __webpack_require__("2faE").f;
+var each = __webpack_require__("V7Et")(0);
+var DESCRIPTORS = __webpack_require__("jmDH");
+
+module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
+  var Base = global[NAME];
+  var C = Base;
+  var ADDER = IS_MAP ? 'set' : 'add';
+  var proto = C && C.prototype;
+  var O = {};
+  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
+    new C().entries().next();
+  }))) {
+    // create collection constructor
+    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
+    redefineAll(C.prototype, methods);
+    meta.NEED = true;
+  } else {
+    C = wrapper(function (target, iterable) {
+      anInstance(target, C, NAME, '_c');
+      target._c = new Base();
+      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);
+    });
+    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {
+      var IS_ADDER = KEY == 'add' || KEY == 'set';
+      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {
+        anInstance(this, C, KEY);
+        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
+        var result = this._c[KEY](a === 0 ? 0 : a, b);
+        return IS_ADDER ? this : result;
+      });
+    });
+    IS_WEAK || dP(C.prototype, 'size', {
+      get: function () {
+        return this._c.size;
+      }
+    });
+  }
+
+  setToStringTag(C, NAME);
+
+  O[NAME] = C;
+  $export($export.G + $export.W + $export.F, O);
+
+  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
+
+  return C;
+};
+
+
+/***/ }),
+
+/***/ "v6xn":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var speciesConstructor = __webpack_require__("C2SN");
+
+module.exports = function (original, length) {
+  return new (speciesConstructor(original))(length);
+};
+
+
 /***/ })
 
 },[["V8Sf",0,2,1,3,4,5]]]);
\ No newline at end of file
Diff for _app.module.js
@@ -78,11 +78,11 @@ function appGetInitialProps(_x) {
 
 function _appGetInitialProps() {
   _appGetInitialProps = (0, _asyncToGenerator2.default)(function* (_ref) {
-    var {
+    let {
       Component,
       ctx
     } = _ref;
-    var pageProps = yield (0, _utils.loadGetInitialProps)(Component, ctx);
+    const pageProps = yield (0, _utils.loadGetInitialProps)(Component, ctx);
     return {
       pageProps
     };
@@ -99,12 +99,12 @@ class App extends _react.default.Component {
   }
 
   render() {
-    var {
+    const {
       router,
       Component,
       pageProps
     } = this.props;
-    var url = createUrl(router);
+    const url = createUrl(router);
     return _react.default.createElement(Component, (0, _extends2.default)({}, pageProps, {
       url: url
     }));
@@ -115,8 +115,8 @@ class App extends _react.default.Component {
 exports.default = App;
 App.origGetInitialProps = appGetInitialProps;
 App.getInitialProps = appGetInitialProps;
-var warnContainer;
-var warnUrl;
+let warnContainer;
+let warnUrl;
 
 if (false) {} // @deprecated noop for now until removal
 
@@ -128,7 +128,7 @@ function Container(p) {
 
 function createUrl(router) {
   // This is to make sure we don't references the router object at call time
-  var {
+  const {
     pathname,
     asPath,
     query
@@ -159,8 +159,8 @@ function createUrl(router) {
     },
     pushTo: (href, as) => {
       if (false) {}
-      var pushRoute = as ? href : '';
-      var pushUrl = as || href;
+      const pushRoute = as ? href : '';
+      const pushUrl = as || href;
       return router.push(pushRoute, pushUrl);
     },
     replace: (url, as) => {
@@ -169,8 +169,8 @@ function createUrl(router) {
     },
     replaceTo: (href, as) => {
       if (false) {}
-      var replaceRoute = as ? href : '';
-      var replaceUrl = as || href;
+      const replaceRoute = as ? href : '';
+      const replaceUrl = as || href;
       return router.replace(replaceRoute, replaceUrl);
     }
   };
Diff for _error.module.js
@@ -33,12 +33,12 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var react_1 = __importDefault(__webpack_require__("q1tI"));
+const react_1 = __importDefault(__webpack_require__("q1tI"));
 
-var amp_context_1 = __webpack_require__("lwAK");
+const amp_context_1 = __webpack_require__("lwAK");
 
 function isInAmpMode() {
-  var {
+  let {
     ampFirst = false,
     hybrid = false,
     hasQuery = false
@@ -72,7 +72,7 @@ var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
 var _head = _interopRequireDefault(__webpack_require__("8Kt/"));
 
-var statusCodes = {
+const statusCodes = {
   400: 'Bad Request',
   404: 'This page could not be found',
   405: 'Method Not Allowed',
@@ -84,21 +84,21 @@ var statusCodes = {
 
 class Error extends _react.default.Component {
   static getInitialProps(_ref) {
-    var {
+    let {
       res,
       err
     } = _ref;
-    var statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;
+    const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;
     return {
       statusCode
     };
   }
 
   render() {
-    var {
+    const {
       statusCode
     } = this.props;
-    var title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';
+    const title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';
     return _react.default.createElement("div", {
       style: styles.error
     }, _react.default.createElement(_head.default, null, _react.default.createElement("title", null, statusCode, ": ", title)), _react.default.createElement("div", null, _react.default.createElement("style", {
@@ -118,7 +118,7 @@ class Error extends _react.default.Component {
 
 exports.default = Error;
 Error.displayName = 'ErrorPage';
-var styles = {
+const styles = {
   error: {
     color: '#000',
     background: '#fff',
@@ -251,19 +251,19 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var react_1 = __importDefault(__webpack_require__("q1tI"));
+const react_1 = __importDefault(__webpack_require__("q1tI"));
 
-var side_effect_1 = __importDefault(__webpack_require__("Xuae"));
+const side_effect_1 = __importDefault(__webpack_require__("Xuae"));
 
-var amp_context_1 = __webpack_require__("lwAK");
+const amp_context_1 = __webpack_require__("lwAK");
 
-var head_manager_context_1 = __webpack_require__("FYa8");
+const head_manager_context_1 = __webpack_require__("FYa8");
 
-var amp_1 = __webpack_require__("/0+H");
+const amp_1 = __webpack_require__("/0+H");
 
 function defaultHead() {
-  var inAmpMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
-  var head = [react_1.default.createElement("meta", {
+  let inAmpMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+  const head = [react_1.default.createElement("meta", {
     key: "charSet",
     charSet: "utf-8"
   })];
@@ -301,7 +301,7 @@ function onlyReactElement(list, child) {
   return list.concat(child);
 }
 
-var METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp'];
+const METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp'];
 /*
  returns a function for filtering head child elements
  which shouldn't be duplicated, like <title/>
@@ -309,10 +309,10 @@ var METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp'];
 */
 
 function unique() {
-  var keys = new _Set();
-  var tags = new _Set();
-  var metaTypes = new _Set();
-  var metaCategories = {};
+  const keys = new _Set();
+  const tags = new _Set();
+  const metaTypes = new _Set();
+  const metaCategories = {};
   return h => {
     if (h.key && typeof h.key !== 'number' && h.key.indexOf('.$') === 0) {
       if (keys.has(h.key)) return false;
@@ -333,16 +333,16 @@ function unique() {
         break;
 
       case 'meta':
-        for (var i = 0, len = METATYPES.length; i < len; i++) {
-          var metatype = METATYPES[i];
+        for (let i = 0, len = METATYPES.length; i < len; i++) {
+          const metatype = METATYPES[i];
           if (!h.props.hasOwnProperty(metatype)) continue;
 
           if (metatype === 'charSet') {
             if (metaTypes.has(metatype)) return false;
             metaTypes.add(metatype);
           } else {
-            var category = h.props[metatype];
-            var categories = metaCategories[metatype] || new _Set();
+            const category = h.props[metatype];
+            const categories = metaCategories[metatype] || new _Set();
             if (categories.has(category)) return false;
             categories.add(category);
             metaCategories[metatype] = categories;
@@ -363,24 +363,24 @@ function unique() {
 
 function reduceComponents(headElements, props) {
   return headElements.reduce((list, headElement) => {
-    var headElementChildren = react_1.default.Children.toArray(headElement.props.children);
+    const headElementChildren = react_1.default.Children.toArray(headElement.props.children);
     return list.concat(headElementChildren);
   }, []).reduce(onlyReactElement, []).reverse().concat(defaultHead(props.inAmpMode)).filter(unique()).reverse().map((c, i) => {
-    var key = c.key || i;
+    const key = c.key || i;
     return react_1.default.cloneElement(c, {
       key
     });
   });
 }
 
-var Effect = side_effect_1.default();
+const Effect = side_effect_1.default();
 /**
  * This component injects elements to `<head>` of your page.
  * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.
  */
 
 function Head(_ref) {
-  var {
+  let {
     children
   } = _ref;
   return react_1.default.createElement(amp_context_1.AmpStateContext.Consumer, null, ampState => react_1.default.createElement(head_manager_context_1.HeadManagerContext.Consumer, null, updateHead => react_1.default.createElement(Effect, {
@@ -467,9 +467,7 @@ var _Object$defineProperty = __webpack_require__("hfKm");
 var __importStar = this && this.__importStar || function (mod) {
   if (mod && mod.__esModule) return mod;
   var result = {};
-  if (mod != null) for (var k in mod) {
-    if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-  }
+  if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
   result["default"] = mod;
   return result;
 };
@@ -478,7 +476,7 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var React = __importStar(__webpack_require__("q1tI"));
+const React = __importStar(__webpack_require__("q1tI"));
 
 exports.HeadManagerContext = React.createContext(null);
 
@@ -724,13 +722,13 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var react_1 = __webpack_require__("q1tI");
+const react_1 = __webpack_require__("q1tI");
 
-var isServer = false;
+const isServer = false;
 
 exports.default = () => {
-  var mountedInstances = new _Set();
-  var state;
+  const mountedInstances = new _Set();
+  let state;
 
   function emitChange(component) {
     state = component.props.reduceComponentsToState([...mountedInstances], component.props);
@@ -743,7 +741,7 @@ exports.default = () => {
   return class extends react_1.Component {
     // Used when server rendering
     static rewind() {
-      var recordedState = state;
+      const recordedState = state;
       state = undefined;
       mountedInstances.clear();
       return recordedState;
@@ -871,9 +869,7 @@ var _Object$defineProperty = __webpack_require__("hfKm");
 var __importStar = this && this.__importStar || function (mod) {
   if (mod && mod.__esModule) return mod;
   var result = {};
-  if (mod != null) for (var k in mod) {
-    if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-  }
+  if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
   result["default"] = mod;
   return result;
 };
@@ -882,7 +878,7 @@ _Object$defineProperty(exports, "__esModule", {
   value: true
 });
 
-var React = __importStar(__webpack_require__("q1tI"));
+const React = __importStar(__webpack_require__("q1tI"));
 
 exports.AmpStateContext = React.createContext({});
Diff for hooks.module.js
@@ -10,15 +10,15 @@ __webpack_require__.r(__webpack_exports__);
 var __jsx = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement;
 
 /* harmony default export */ __webpack_exports__["default"] = (() => {
-  var [clicks1, setClicks1] = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(0);
-  var {
+  const [clicks1, setClicks1] = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(0);
+  const {
     0: clicks2,
     1: setClicks2
   } = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(0);
-  var doClick1 = react__WEBPACK_IMPORTED_MODULE_0___default.a.useCallback(() => {
+  const doClick1 = react__WEBPACK_IMPORTED_MODULE_0___default.a.useCallback(() => {
     setClicks1(clicks1 + 1);
   }, [clicks1]);
-  var doClick2 = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(() => {
+  const doClick2 = Object(react__WEBPACK_IMPORTED_MODULE_0__["useCallback"])(() => {
     setClicks2(clicks2 + 1);
   }, [clicks2]);
   return __jsx(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, __jsx("h3", null, "Clicks ", clicks1), __jsx("button", {
Diff for index.module.js
@@ -5,7 +5,7 @@
 
 "use strict";
 __webpack_require__.r(__webpack_exports__);
-var Page = () => 'Hello world 👋';
+const Page = () => 'Hello world 👋';
 
 Page.getInitialProps = () => ({});
Diff for link.module.js
@@ -9,6 +9,66 @@ __webpack_require__("cHUd")('Map');
 
 /***/ }),
 
+/***/ "6/1s":
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__("YqAc")('meta');
+var isObject = __webpack_require__("93I4");
+var has = __webpack_require__("B+OT");
+var setDesc = __webpack_require__("2faE").f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+  return true;
+};
+var FREEZE = !__webpack_require__("KUxP")(function () {
+  return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+  setDesc(it, META, { value: {
+    i: 'O' + ++id, // object ID
+    w: {}          // weak collections IDs
+  } });
+};
+var fastKey = function (it, create) {
+  // return primitive with prefix
+  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+  if (!has(it, META)) {
+    // can't set metadata to uncaught frozen object
+    if (!isExtensible(it)) return 'F';
+    // not necessary to add metadata
+    if (!create) return 'E';
+    // add missing metadata
+    setMeta(it);
+  // return object ID
+  } return it[META].i;
+};
+var getWeak = function (it, create) {
+  if (!has(it, META)) {
+    // can't set metadata to uncaught frozen object
+    if (!isExtensible(it)) return true;
+    // not necessary to add metadata
+    if (!create) return false;
+    // add missing metadata
+    setMeta(it);
+  // return hash weak collections IDs
+  } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+  return it;
+};
+var meta = module.exports = {
+  KEY: META,
+  NEED: false,
+  fastKey: fastKey,
+  getWeak: getWeak,
+  onFreeze: onFreeze
+};
+
+
+/***/ }),
+
 /***/ "8iia":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -25,6 +85,29 @@ module.exports = function (NAME) {
 
 /***/ }),
 
+/***/ "C2SN":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+var isArray = __webpack_require__("kAMH");
+var SPECIES = __webpack_require__("UWiX")('species');
+
+module.exports = function (original) {
+  var C;
+  if (isArray(original)) {
+    C = original.constructor;
+    // cross-realm fallback
+    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
+    if (isObject(C)) {
+      C = C[SPECIES];
+      if (C === null) C = undefined;
+    }
+  } return C === undefined ? Array : C;
+};
+
+
+/***/ }),
+
 /***/ "LX0d":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -86,6 +169,57 @@ module.exports = __webpack_require__("WEpk").Map;
 
 /***/ }),
 
+/***/ "V7Et":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 0 -> Array#forEach
+// 1 -> Array#map
+// 2 -> Array#filter
+// 3 -> Array#some
+// 4 -> Array#every
+// 5 -> Array#find
+// 6 -> Array#findIndex
+var ctx = __webpack_require__("2GTP");
+var IObject = __webpack_require__("M1xp");
+var toObject = __webpack_require__("JB68");
+var toLength = __webpack_require__("tEej");
+var asc = __webpack_require__("v6xn");
+module.exports = function (TYPE, $create) {
+  var IS_MAP = TYPE == 1;
+  var IS_FILTER = TYPE == 2;
+  var IS_SOME = TYPE == 3;
+  var IS_EVERY = TYPE == 4;
+  var IS_FIND_INDEX = TYPE == 6;
+  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
+  var create = $create || asc;
+  return function ($this, callbackfn, that) {
+    var O = toObject($this);
+    var self = IObject(O);
+    var f = ctx(callbackfn, that, 3);
+    var length = toLength(self.length);
+    var index = 0;
+    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
+    var val, res;
+    for (;length > index; index++) if (NO_HOLES || index in self) {
+      val = self[index];
+      res = f(val, index, O);
+      if (TYPE) {
+        if (IS_MAP) result[index] = res;   // map
+        else if (res) switch (TYPE) {
+          case 3: return true;             // some
+          case 5: return val;              // find
+          case 6: return index;            // findIndex
+          case 2: result.push(val);        // filter
+        } else if (IS_EVERY) return false; // every
+      }
+    }
+    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
+  };
+};
+
+
+/***/ }),
+
 /***/ "V8Sf":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -270,6 +404,62 @@ module.exports = __webpack_require__("cTJO")
 
 /***/ }),
 
+/***/ "aPfg":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+var aFunction = __webpack_require__("eaoh");
+var ctx = __webpack_require__("2GTP");
+var forOf = __webpack_require__("oioR");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
+    var mapFn = arguments[1];
+    var mapping, A, n, cb;
+    aFunction(this);
+    mapping = mapFn !== undefined;
+    if (mapping) aFunction(mapFn);
+    if (source == undefined) return new this();
+    A = [];
+    if (mapping) {
+      n = 0;
+      cb = ctx(mapFn, arguments[2], 2);
+      forOf(source, false, function (nextItem) {
+        A.push(cb(nextItem, n++));
+      });
+    } else {
+      forOf(source, false, A.push, A);
+    }
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
+/***/ "cHUd":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// https://tc39.github.io/proposal-setmap-offrom/
+var $export = __webpack_require__("Y7ZC");
+
+module.exports = function (COLLECTION) {
+  $export($export.S, COLLECTION, { of: function of() {
+    var length = arguments.length;
+    var A = new Array(length);
+    while (length--) A[length] = arguments[length];
+    return new this(A);
+  } });
+};
+
+
+/***/ }),
+
 /***/ "cTJO":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -300,21 +490,21 @@ var _utils = __webpack_require__("g/15");
 
 
 function isLocal(href) {
-  var url = (0, _url.parse)(href, false, true);
-  var origin = (0, _url.parse)((0, _utils.getLocationOrigin)(), false, true);
+  const url = (0, _url.parse)(href, false, true);
+  const origin = (0, _url.parse)((0, _utils.getLocationOrigin)(), false, true);
   return !url.host || url.protocol === origin.protocol && url.host === origin.host;
 }
 
 function memoizedFormatUrl(formatFunc) {
-  var lastHref = null;
-  var lastAs = null;
-  var lastResult = null;
+  let lastHref = null;
+  let lastAs = null;
+  let lastResult = null;
   return (href, as) => {
     if (lastResult && href === lastHref && as === lastAs) {
       return lastResult;
     }
 
-    var result = formatFunc(href, as);
+    const result = formatFunc(href, as);
     lastHref = href;
     lastAs = as;
     lastResult = result;
@@ -326,9 +516,9 @@ function formatUrl(url) {
   return url && typeof url === 'object' ? (0, _utils.formatWithValidation)(url) : url;
 }
 
-var observer;
-var listeners = new _map.default();
-var IntersectionObserver = true ? window.IntersectionObserver : undefined;
+let observer;
+const listeners = new _map.default();
+const IntersectionObserver = true ? window.IntersectionObserver : undefined;
 
 function getObserver() {
   // Return shared instance of IntersectionObserver if already created
@@ -347,7 +537,7 @@ function getObserver() {
         return;
       }
 
-      var cb = listeners.get(entry.target);
+      const cb = listeners.get(entry.target);
 
       if (entry.isIntersecting || entry.intersectionRatio > 0) {
         observer.unobserve(entry.target);
@@ -360,8 +550,8 @@ function getObserver() {
   });
 }
 
-var listenToIntersections = (el, cb) => {
-  var observer = getObserver();
+const listenToIntersections = (el, cb) => {
+  const observer = getObserver();
 
   if (!observer) {
     return () => {};
@@ -396,7 +586,7 @@ class Link extends _react.Component {
 
     this.linkClicked = e => {
       // @ts-ignore target exists on currentTarget
-      var {
+      const {
         nodeName,
         target
       } = e.currentTarget;
@@ -406,7 +596,7 @@ class Link extends _react.Component {
         return;
       }
 
-      var {
+      let {
         href,
         as
       } = this.formatUrls(this.props.href, this.props.as);
@@ -416,14 +606,14 @@ class Link extends _react.Component {
         return;
       }
 
-      var {
+      const {
         pathname
       } = window.location;
       href = (0, _url.resolve)(pathname, href);
       as = as ? (0, _url.resolve)(pathname, as) : href;
       e.preventDefault(); //  avoid scroll for urls with anchor refs
 
-      var {
+      let {
         scroll
       } = this.props;
 
@@ -467,22 +657,22 @@ class Link extends _react.Component {
   prefetch() {
     if (!this.p || false) return; // Prefetch the JSON page if asked (only in the client)
 
-    var {
+    const {
       pathname
     } = window.location;
-    var {
+    const {
       href: parsedHref
     } = this.formatUrls(this.props.href, this.props.as);
-    var href = (0, _url.resolve)(pathname, parsedHref);
+    const href = (0, _url.resolve)(pathname, parsedHref);
 
     _router.default.prefetch(href);
   }
 
   render() {
-    var {
+    let {
       children
     } = this.props;
-    var {
+    const {
       href,
       as
     } = this.formatUrls(this.props.href, this.props.as); // Deprecated. Warning shown by propType check. If the children provided is a string (<Link>example</Link>) we wrap it in an <a> tag
@@ -492,9 +682,9 @@ class Link extends _react.Component {
     } // This will return the first child, if multiple are provided it will throw an error
 
 
-    var child = _react.Children.only(children);
+    const child = _react.Children.only(children);
 
-    var props = {
+    const props = {
       ref: el => {
         this.handleRef(el);
 
@@ -519,9 +709,10 @@ class Link extends _react.Component {
         if (!e.defaultPrevented) {
           this.linkClicked(e);
         }
-      }
-    }; // If child is an <a> tag and doesn't have a href attribute, or if the 'passHref' property is
-    // defined, we specify the current 'href', so that repetition is not needed by the user
+      } // If child is an <a> tag and doesn't have a href attribute, or if the 'passHref' property is
+      // defined, we specify the current 'href', so that repetition is not needed by the user
+
+    };
 
     if (this.props.passHref || child.type === 'a' && !('href' in child.props)) {
       props.href = as || href;
@@ -538,7 +729,7 @@ class Link extends _react.Component {
 
 Link.propTypes = void 0;
 
-if (false) { var exact, warn; }
+if (false) {}
 
 var _default = Link;
 exports.default = _default;
@@ -579,6 +770,110 @@ module.exports = __webpack_require__("raTm")(MAP, function (get) {
 }, strong, true);
 
 
+/***/ }),
+
+/***/ "kAMH":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__("a0xu");
+module.exports = Array.isArray || function isArray(arg) {
+  return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+
+/***/ "n3ko":
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__("93I4");
+module.exports = function (it, TYPE) {
+  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
+  return it;
+};
+
+
+/***/ }),
+
+/***/ "raTm":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var global = __webpack_require__("5T2Y");
+var $export = __webpack_require__("Y7ZC");
+var meta = __webpack_require__("6/1s");
+var fails = __webpack_require__("KUxP");
+var hide = __webpack_require__("NegM");
+var redefineAll = __webpack_require__("XJU/");
+var forOf = __webpack_require__("oioR");
+var anInstance = __webpack_require__("EXMj");
+var isObject = __webpack_require__("93I4");
+var setToStringTag = __webpack_require__("RfKB");
+var dP = __webpack_require__("2faE").f;
+var each = __webpack_require__("V7Et")(0);
+var DESCRIPTORS = __webpack_require__("jmDH");
+
+module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
+  var Base = global[NAME];
+  var C = Base;
+  var ADDER = IS_MAP ? 'set' : 'add';
+  var proto = C && C.prototype;
+  var O = {};
+  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
+    new C().entries().next();
+  }))) {
+    // create collection constructor
+    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
+    redefineAll(C.prototype, methods);
+    meta.NEED = true;
+  } else {
+    C = wrapper(function (target, iterable) {
+      anInstance(target, C, NAME, '_c');
+      target._c = new Base();
+      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);
+    });
+    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {
+      var IS_ADDER = KEY == 'add' || KEY == 'set';
+      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {
+        anInstance(this, C, KEY);
+        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
+        var result = this._c[KEY](a === 0 ? 0 : a, b);
+        return IS_ADDER ? this : result;
+      });
+    });
+    IS_WEAK || dP(C.prototype, 'size', {
+      get: function () {
+        return this._c.size;
+      }
+    });
+  }
+
+  setToStringTag(C, NAME);
+
+  O[NAME] = C;
+  $export($export.G + $export.W + $export.F, O);
+
+  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
+
+  return C;
+};
+
+
+/***/ }),
+
+/***/ "v6xn":
+/***/ (function(module, exports, __webpack_require__) {
+
+// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var speciesConstructor = __webpack_require__("C2SN");
+
+module.exports = function (original, length) {
+  return new (speciesConstructor(original))(length);
+};
+
+
 /***/ })
 
 },[["V8Sf",0,1,2,3,4]]]);
\ No newline at end of file
Diff for _buildManifest.js
@@ -1 +1 @@
-self.__BUILD_MANIFEST = (function(a){return {"/link":[a],"/routerDirect":[a],"/withRouter":[a]}}("static\u002Fchunks\u002F16b1a72255206b7853bf6603dc58ec83de39b142.b45ed1163cffb8de5382.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
\ No newline at end of file
+self.__BUILD_MANIFEST = (function(a){return {"/link":[a],"/routerDirect":[a],"/withRouter":[a]}}("static\u002Fchunks\u002F16b1a72255206b7853bf6603dc58ec83de39b142.21ad3dce19c312862985.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
\ No newline at end of file
Diff for _buildManifest.module.js
@@ -1 +1 @@
-self.__BUILD_MANIFEST = (function(a){return {"/link":[a],"/routerDirect":[a],"/withRouter":[a]}}("static\u002Fchunks\u002F16b1a72255206b7853bf6603dc58ec83de39b142.6676b8996c653de03131.module.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
\ No newline at end of file
+self.__BUILD_MANIFEST = (function(a){return {"/link":[a],"/routerDirect":[a],"/withRouter":[a]}}("static\u002Fchunks\u002F16b1a72255206b7853bf6603dc58ec83de39b142.1ab508e424ce83e585d1.module.js"));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
\ No newline at end of file
Diff for index.html
@@ -12,13 +12,13 @@
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/runtime/webpack-7928590be3ef2e55b835.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/runtime/main-f59e55f2f069a03aa793.module.js"
+        <link rel="preload" href="/_next/static/runtime/main-17a15de615367928cdd6.module.js"
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/chunks/framework.cdb73e402d876d4ac87f.module.js"
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.89ebf3e33b855a0478ce.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.710f68a91537b45d6153.module.js"
+        <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e859d76b9dfffa4e32d.module.js"
         as="script" crossorigin="anonymous" />
     </head>
     
@@ -43,9 +43,9 @@
         async="" crossorigin="anonymous" nomodule=""></script>
         <script src="/_next/static/runtime/webpack-7928590be3ef2e55b835.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/runtime/main-30f56449cfbe7044b21b.js"
+        <script src="/_next/static/runtime/main-4af5767a503c9eced959.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/runtime/main-f59e55f2f069a03aa793.module.js"
+        <script src="/_next/static/runtime/main-17a15de615367928cdd6.module.js"
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/chunks/framework.219514909c9db8a9ff76.js"
         async="" crossorigin="anonymous" nomodule=""></script>
@@ -59,7 +59,7 @@
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.4c2a53afddb0008e3250.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.710f68a91537b45d6153.module.js"
+        <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e859d76b9dfffa4e32d.module.js"
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/BUILD_ID/_buildManifest.js" async=""
         crossorigin="anonymous" nomodule=""></script>
Diff for link.html
@@ -16,11 +16,11 @@
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.89ebf3e33b855a0478ce.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.710f68a91537b45d6153.module.js"
+        <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e859d76b9dfffa4e32d.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.6676b8996c653de03131.module.js"
+        <link rel="preload" href="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.1ab508e424ce83e585d1.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/runtime/main-f59e55f2f069a03aa793.module.js"
+        <link rel="preload" href="/_next/static/runtime/main-17a15de615367928cdd6.module.js"
         as="script" crossorigin="anonymous" />
     </head>
     
@@ -60,15 +60,15 @@
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.4c2a53afddb0008e3250.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.710f68a91537b45d6153.module.js"
+        <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e859d76b9dfffa4e32d.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.b45ed1163cffb8de5382.js"
+        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.21ad3dce19c312862985.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.6676b8996c653de03131.module.js"
+        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.1ab508e424ce83e585d1.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/runtime/main-30f56449cfbe7044b21b.js"
+        <script src="/_next/static/runtime/main-4af5767a503c9eced959.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/runtime/main-f59e55f2f069a03aa793.module.js"
+        <script src="/_next/static/runtime/main-17a15de615367928cdd6.module.js"
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/BUILD_ID/_buildManifest.js" async=""
         crossorigin="anonymous" nomodule=""></script>
Diff for withRouter.html
@@ -16,11 +16,11 @@
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.89ebf3e33b855a0478ce.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.710f68a91537b45d6153.module.js"
+        <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e859d76b9dfffa4e32d.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.6676b8996c653de03131.module.js"
+        <link rel="preload" href="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.1ab508e424ce83e585d1.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/runtime/main-f59e55f2f069a03aa793.module.js"
+        <link rel="preload" href="/_next/static/runtime/main-17a15de615367928cdd6.module.js"
         as="script" crossorigin="anonymous" />
     </head>
     
@@ -58,15 +58,15 @@
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.4c2a53afddb0008e3250.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.710f68a91537b45d6153.module.js"
+        <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.3e859d76b9dfffa4e32d.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.b45ed1163cffb8de5382.js"
+        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.21ad3dce19c312862985.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.6676b8996c653de03131.module.js"
+        <script src="/_next/static/chunks/16b1a72255206b7853bf6603dc58ec83de39b142.1ab508e424ce83e585d1.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/runtime/main-30f56449cfbe7044b21b.js"
+        <script src="/_next/static/runtime/main-4af5767a503c9eced959.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/runtime/main-f59e55f2f069a03aa793.module.js"
+        <script src="/_next/static/runtime/main-17a15de615367928cdd6.module.js"
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/BUILD_ID/_buildManifest.js" async=""
         crossorigin="anonymous" nomodule=""></script>

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
buildDuration 17.3s 14.8s -2.4s
nodeModulesSize 48.4 MB 48.4 MB ⚠️ +10 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.js 16.6 kB 18.9 kB ⚠️ +2.33 kB
main-HASH.js gzip 5.86 kB 6.79 kB ⚠️ +927 B
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
16b1a7225520..63e75d588.js 19.7 kB N/A N/A
16b1a7225520..d588.js gzip 7.23 kB N/A N/A
4952ddcd88e7..bfe360fe6.js 10.5 kB 10.5 kB
4952ddcd88e7..0fe6.js gzip 4.06 kB 4.06 kB
commons.HASH.js 11.3 kB 11.3 kB
commons.HASH.js gzip 4.23 kB 4.23 kB
de003c3a9d30..9e9c1d310.js 28.6 kB 28.6 kB
de003c3a9d30..d310.js gzip 10.8 kB 10.8 kB
framework.1b..cdcfe1283.js 125 kB 125 kB
framework.1b..1283.js gzip 39.4 kB 39.4 kB
16b1a7225520..4a7b46563.js N/A 14.9 kB N/A
16b1a7225520..6563.js gzip N/A 5.38 kB N/A
Overall change 214 kB 211 kB ⚠️ +2.33 kB
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.module.js 14 kB 17.2 kB ⚠️ +3.18 kB
main-HASH.module.js gzip 5.26 kB 6.55 kB ⚠️ +1.29 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
16b1a7225520..51.module.js 15.8 kB N/A N/A
16b1a7225520..dule.js gzip 6.06 kB N/A N/A
4952ddcd88e7..4a.module.js 12.8 kB 12.8 kB
4952ddcd88e7..dule.js gzip 4.75 kB 4.75 kB
de003c3a9d30..c0.module.js 22.1 kB N/A N/A
de003c3a9d30..dule.js gzip 8.67 kB N/A N/A
framework.5b..d3.module.js 125 kB 125 kB ⚠️ +37 B
framework.5b..dule.js gzip 39.4 kB 39.4 kB ⚠️ +8 B
16b1a7225520..d2.module.js N/A 10.8 kB N/A
16b1a7225520..dule.js gzip N/A 4.06 kB N/A
de003c3a9d30..11.module.js N/A 22.1 kB N/A
de003c3a9d30..dule.js gzip N/A 8.69 kB N/A
Overall change 192 kB 190 kB ⚠️ +3.21 kB
Client Pages Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.js 1.63 kB 1.63 kB
_app.js gzip 788 B 788 B
_error.js 12.3 kB 12.3 kB
_error.js gzip 4.79 kB 4.79 kB
hooks.js 1.92 kB 1.51 kB -400 B
hooks.js gzip 941 B 789 B -152 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 5.81 kB 8.15 kB ⚠️ +2.34 kB
link.js gzip 2.56 kB 3.5 kB ⚠️ +938 B
routerDirect.js 413 B 413 B
routerDirect.js gzip 285 B 285 B
withRouter.js 423 B 423 B
withRouter.js gzip 284 B 284 B
Overall change 22.8 kB 24.7 kB ⚠️ +1.94 kB
Client Pages Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.module.js 1.53 kB 1.55 kB ⚠️ +17 B
_app.module.js gzip 749 B 764 B ⚠️ +15 B
_error.module.js 10.5 kB 10.6 kB ⚠️ +48 B
_error.module.js gzip 4.26 kB 4.28 kB ⚠️ +13 B
hooks.module.js 1.52 kB 1.52 kB ⚠️ +2 B
hooks.module.js gzip 792 B 794 B ⚠️ +2 B
index.module.js 292 B 294 B ⚠️ +2 B
index.module.js gzip 223 B 223 B
link.module.js 5.47 kB 8.55 kB ⚠️ +3.09 kB
link.module.js gzip 2.46 kB 3.69 kB ⚠️ +1.24 kB
routerDirect.module.js 399 B 399 B
routerDirect..dule.js gzip 285 B 285 B
withRouter.module.js 409 B 409 B
withRouter.m..dule.js gzip 282 B 282 B
Overall change 20.1 kB 23.3 kB ⚠️ +3.15 kB
Client Build Manifests
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_buildManifest.js 244 B 244 B
_buildManifest.js gzip 199 B 200 B ⚠️ +1 B
_buildManifest.module.js 251 B 251 B
_buildManife..dule.js gzip 210 B 209 B -1 B
Overall change 495 B 495 B
Serverless bundles Overall decrease ✓
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_error.js 241 kB 234 kB -6.69 kB
_error.js gzip 64.4 kB 62.8 kB -1.56 kB
hooks.html 4.08 kB 4.08 kB
hooks.html gzip 1.03 kB 1.03 kB -2 B
index.js 241 kB 235 kB -6.69 kB
index.js gzip 64.5 kB 62.9 kB -1.54 kB
link.js 274 kB 267 kB -6.85 kB
link.js gzip 73.5 kB 71.9 kB -1.64 kB
routerDirect.js 267 kB 260 kB -6.86 kB
routerDirect.js gzip 71.5 kB 69.9 kB -1.66 kB
withRouter.js 267 kB 260 kB -6.86 kB
withRouter.js gzip 71.6 kB 69.8 kB -1.79 kB
Overall change 1.29 MB 1.26 MB -33.9 kB

Commit: a897605

@ijjk
Copy link
Member

ijjk commented Oct 30, 2019

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
buildDuration 15.7s 14.5s -1.2s
nodeModulesSize 48.4 MB 48.4 MB ⚠️ +1.19 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.js 16.6 kB 16.6 kB
main-HASH.js gzip 5.86 kB 5.86 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
16b1a7225520..63e75d588.js 19.7 kB 19.7 kB
16b1a7225520..d588.js gzip 7.23 kB 7.23 kB
4952ddcd88e7..bfe360fe6.js 10.5 kB 10.5 kB
4952ddcd88e7..0fe6.js gzip 4.06 kB 4.06 kB
commons.HASH.js 11.3 kB 11.3 kB
commons.HASH.js gzip 4.23 kB 4.23 kB
de003c3a9d30..9e9c1d310.js 28.6 kB 28.6 kB
de003c3a9d30..d310.js gzip 10.8 kB 10.8 kB
framework.1b..cdcfe1283.js 125 kB 125 kB
framework.1b..1283.js gzip 39.4 kB 39.4 kB
Overall change 214 kB 214 kB
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.module.js 14 kB 14.1 kB ⚠️ +36 B
main-HASH.module.js gzip 5.26 kB 5.28 kB ⚠️ +27 B
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
16b1a7225520..51.module.js 15.8 kB 15.8 kB ⚠️ +8 B
16b1a7225520..dule.js gzip 6.06 kB 6.07 kB ⚠️ +11 B
4952ddcd88e7..4a.module.js 12.8 kB 12.8 kB
4952ddcd88e7..dule.js gzip 4.75 kB 4.75 kB
de003c3a9d30..c0.module.js 22.1 kB 22.1 kB ⚠️ +2 B
de003c3a9d30..dule.js gzip 8.67 kB 8.68 kB ⚠️ +11 B
framework.5b..d3.module.js 125 kB 125 kB ⚠️ +37 B
framework.5b..dule.js gzip 39.4 kB 39.4 kB ⚠️ +8 B
Overall change 192 kB 192 kB ⚠️ +83 B
Client Pages
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.js 1.63 kB 1.63 kB
_app.js gzip 788 B 788 B
_error.js 12.3 kB 12.3 kB
_error.js gzip 4.79 kB 4.79 kB
hooks.js 1.92 kB 1.92 kB
hooks.js gzip 941 B 941 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 5.81 kB 5.81 kB
link.js gzip 2.56 kB 2.56 kB
routerDirect.js 413 B 413 B
routerDirect.js gzip 285 B 285 B
withRouter.js 423 B 423 B
withRouter.js gzip 284 B 284 B
Overall change 22.8 kB 22.8 kB
Client Pages Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.module.js 1.53 kB 1.54 kB ⚠️ +9 B
_app.module.js gzip 749 B 759 B ⚠️ +10 B
_error.module.js 10.5 kB 10.5 kB
_error.module.js gzip 4.26 kB 4.26 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 792 B 792 B
index.module.js 292 B 292 B
index.module.js gzip 223 B 223 B
link.module.js 5.47 kB 5.49 kB ⚠️ +23 B
link.module.js gzip 2.46 kB 2.47 kB ⚠️ +9 B
routerDirect.module.js 399 B 399 B
routerDirect..dule.js gzip 285 B 285 B
withRouter.module.js 409 B 409 B
withRouter.m..dule.js gzip 282 B 282 B
Overall change 20.1 kB 20.2 kB ⚠️ +32 B
Client Build Manifests
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_buildManifest.js 244 B 244 B
_buildManifest.js gzip 199 B 199 B
_buildManifest.module.js 251 B 251 B
_buildManife..dule.js gzip 210 B 210 B
Overall change 495 B 495 B
Rendered Page Sizes
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
index.html 3.94 kB 3.94 kB
index.html gzip 1 kB 1 kB
link.html 4.47 kB 4.47 kB
link.html gzip 1.08 kB 1.08 kB
withRouter.html 4.47 kB 4.47 kB
withRouter.html gzip 1.07 kB 1.07 kB
Overall change 12.9 kB 12.9 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
buildDuration 16.2s 14.3s -1.8s
nodeModulesSize 48.4 MB 48.4 MB ⚠️ +1.19 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.js 16.6 kB 16.6 kB
main-HASH.js gzip 5.86 kB 5.86 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
16b1a7225520..63e75d588.js 19.7 kB 19.7 kB
16b1a7225520..d588.js gzip 7.23 kB 7.23 kB
4952ddcd88e7..bfe360fe6.js 10.5 kB 10.5 kB
4952ddcd88e7..0fe6.js gzip 4.06 kB 4.06 kB
commons.HASH.js 11.3 kB 11.3 kB
commons.HASH.js gzip 4.23 kB 4.23 kB
de003c3a9d30..9e9c1d310.js 28.6 kB 28.6 kB
de003c3a9d30..d310.js gzip 10.8 kB 10.8 kB
framework.1b..cdcfe1283.js 125 kB 125 kB
framework.1b..1283.js gzip 39.4 kB 39.4 kB
Overall change 214 kB 214 kB
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
main-HASH.module.js 14 kB 14.1 kB ⚠️ +36 B
main-HASH.module.js gzip 5.26 kB 5.28 kB ⚠️ +27 B
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
16b1a7225520..51.module.js 15.8 kB 15.8 kB ⚠️ +8 B
16b1a7225520..dule.js gzip 6.06 kB 6.07 kB ⚠️ +11 B
4952ddcd88e7..4a.module.js 12.8 kB 12.8 kB
4952ddcd88e7..dule.js gzip 4.75 kB 4.75 kB
de003c3a9d30..c0.module.js 22.1 kB 22.1 kB ⚠️ +2 B
de003c3a9d30..dule.js gzip 8.67 kB 8.68 kB ⚠️ +11 B
framework.5b..d3.module.js 125 kB 125 kB ⚠️ +37 B
framework.5b..dule.js gzip 39.4 kB 39.4 kB ⚠️ +8 B
Overall change 192 kB 192 kB ⚠️ +83 B
Client Pages
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.js 1.63 kB 1.63 kB
_app.js gzip 788 B 788 B
_error.js 12.3 kB 12.3 kB
_error.js gzip 4.79 kB 4.79 kB
hooks.js 1.92 kB 1.92 kB
hooks.js gzip 941 B 941 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 5.81 kB 5.81 kB
link.js gzip 2.56 kB 2.56 kB
routerDirect.js 413 B 413 B
routerDirect.js gzip 285 B 285 B
withRouter.js 423 B 423 B
withRouter.js gzip 284 B 284 B
Overall change 22.8 kB 22.8 kB
Client Pages Modern Overall increase ⚠️
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_app.module.js 1.53 kB 1.54 kB ⚠️ +9 B
_app.module.js gzip 749 B 759 B ⚠️ +10 B
_error.module.js 10.5 kB 10.5 kB
_error.module.js gzip 4.26 kB 4.26 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 792 B 792 B
index.module.js 292 B 292 B
index.module.js gzip 223 B 223 B
link.module.js 5.47 kB 5.49 kB ⚠️ +23 B
link.module.js gzip 2.46 kB 2.47 kB ⚠️ +9 B
routerDirect.module.js 399 B 399 B
routerDirect..dule.js gzip 285 B 285 B
withRouter.module.js 409 B 409 B
withRouter.m..dule.js gzip 282 B 282 B
Overall change 20.1 kB 20.2 kB ⚠️ +32 B
Client Build Manifests
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_buildManifest.js 244 B 244 B
_buildManifest.js gzip 199 B 199 B
_buildManifest.module.js 251 B 251 B
_buildManife..dule.js gzip 210 B 210 B
Overall change 495 B 495 B
Serverless bundles
zeit/next.js canary developit/next.js earlier-modern-child-compiler Change
_error.js 241 kB 241 kB
_error.js gzip 64.4 kB 64.4 kB
hooks.html 4.08 kB 4.08 kB
hooks.html gzip 1.03 kB 1.03 kB
index.js 241 kB 241 kB
index.js gzip 64.5 kB 64.5 kB
link.js 274 kB 274 kB
link.js gzip 73.5 kB 73.5 kB
routerDirect.js 267 kB 267 kB
routerDirect.js gzip 71.5 kB 71.5 kB
withRouter.js 267 kB 267 kB
withRouter.js gzip 71.6 kB 71.6 kB
Overall change 1.29 MB 1.29 MB

Commit: f07cf20

@developit
Copy link
Contributor Author

developit commented Oct 31, 2019

Seems to be a nice build time reduction (11%) :)

@timneutkens timneutkens merged commit c966900 into vercel:canary Oct 31, 2019
@Timer Timer added this to the 9.1.3 milestone Oct 31, 2019
@Timer Timer added Type: Bug and removed Type: Bug labels Oct 31, 2019
@vercel vercel locked as resolved and limited conversation to collaborators Jan 31, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants