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

Add next-head-count & remove next-head class #8020

Merged
merged 3 commits into from
Jul 25, 2019
Merged

Add next-head-count & remove next-head class #8020

merged 3 commits into from
Jul 25, 2019

Conversation

devknoll
Copy link
Contributor

Fixes #3494

Removes class="next-head" from the children of the <Head> component. Instead, a single sentinel meta element named next-head-count is appended. The content is the number of contiguous elements immediately preceding the sentinel that would have had the class="next-head" attribute.

During an update, instead of searching for class="next-head", the sentinel is located and the N previous elements are considered candidates for oldTags. New elements are inserted before the sentinel, and finally the sentinel is updated to reflect the new count.

@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 12.5s 11.9s -603ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +403 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 296 B 296 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.36 kB 1.36 kB ⚠️ +6 B
Build Dir Size 737 kB 740 kB ⚠️ +2.49 kB
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 13.2s 13.1s -63ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +403 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 296 B 296 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 338 kB 338 kB -190 B
Serverless pages/link gzip Size 86.9 kB 86.8 kB -37 B
Serverless pages/index Size Error getting size Error getting size
Serverless pages/index gzip Size Error getting size Error getting size
Serverless pages/_error Size 329 kB 328 kB -190 B
Serverless pages/_error gzip Size 84.2 kB 84.1 kB -40 B
Serverless pages/routerDirect Size 330 kB 329 kB -190 B
Serverless pages/routerDirect gzip Size 84.4 kB 84.4 kB -41 B
Serverless pages/withRouter Size 330 kB 329 kB -190 B
Serverless pages/withRouter gzip Size 84.4 kB 84.3 kB -42 B
Build Dir Size 1.94 MB 1.94 MB ⚠️ +1.54 kB

@devknoll devknoll marked this pull request as ready for review July 17, 2019 22:27
@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 14.2s 14.1s -78ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +443 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 296 B 296 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.36 kB 1.36 kB ⚠️ +6 B
Build Dir Size 737 kB 739 kB ⚠️ +2.42 kB
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 15.4s 15.2s -220ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +443 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 296 B 296 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 338 kB 338 kB -224 B
Serverless pages/link gzip Size 86.9 kB 86.8 kB -47 B
Serverless pages/index Size Error getting size Error getting size
Serverless pages/index gzip Size Error getting size Error getting size
Serverless pages/_error Size 329 kB 328 kB -224 B
Serverless pages/_error gzip Size 84.2 kB 84.1 kB -47 B
Serverless pages/routerDirect Size 330 kB 329 kB -224 B
Serverless pages/routerDirect gzip Size 84.4 kB 84.4 kB -49 B
Serverless pages/withRouter Size 330 kB 329 kB -224 B
Serverless pages/withRouter gzip Size 84.4 kB 84.3 kB -50 B
Build Dir Size 1.94 MB 1.94 MB ⚠️ +1.36 kB

Copy link
Member

@timneutkens timneutkens left a comment

Choose a reason for hiding this comment

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

I wonder if the bundle size increase is needed 🤔

@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 14s 14s ⚠️ +71ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +443 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.34 kB 1.35 kB ⚠️ +6 B
Build Dir Size 699 kB 702 kB ⚠️ +2.38 kB
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 15.7s 15.1s -583ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +443 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 251 kB 251 kB -151 B
Serverless pages/link gzip Size 67.6 kB 67.5 kB -58 B
Serverless pages/index Size 243 kB 243 kB -151 B
Serverless pages/index gzip Size 65.3 kB 65.3 kB -54 B
Serverless pages/_error Size 243 kB 243 kB -151 B
Serverless pages/_error gzip Size 65.1 kB 65 kB -54 B
Serverless pages/routerDirect Size 244 kB 244 kB -151 B
Serverless pages/routerDirect gzip Size 65.3 kB 65.2 kB -54 B
Serverless pages/withRouter Size 244 kB 244 kB -151 B
Serverless pages/withRouter gzip Size 65.4 kB 65.4 kB -55 B
Build Dir Size 1.88 MB 1.89 MB ⚠️ +1.18 kB

@devknoll
Copy link
Contributor Author

Ping @timneutkens. Not sure why these changes would affect the size like that. Any ideas?

@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 13.8s 13.9s ⚠️ +50ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +401 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.34 kB 1.35 kB ⚠️ +6 B
Build Dir Size 699 kB 702 kB ⚠️ +2.38 kB
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 15s 15.5s ⚠️ +423ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +401 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +507 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 251 kB 251 kB -151 B
Serverless pages/link gzip Size 67.6 kB 67.5 kB -59 B
Serverless pages/index Size 243 kB 243 kB -151 B
Serverless pages/index gzip Size 65.3 kB 65.3 kB -55 B
Serverless pages/_error Size 243 kB 243 kB -151 B
Serverless pages/_error gzip Size 65.1 kB 65 kB -55 B
Serverless pages/routerDirect Size 244 kB 244 kB -151 B
Serverless pages/routerDirect gzip Size 65.3 kB 65.2 kB -55 B
Serverless pages/withRouter Size 244 kB 244 kB -151 B
Serverless pages/withRouter gzip Size 65.4 kB 65.4 kB -55 B
Build Dir Size 1.88 MB 1.89 MB ⚠️ +1.18 kB
Diff for main.js
@@ -98,6 +98,22 @@ __webpack_require__("cHUd")('Map');
 
 /***/ }),
 
+/***/ "5pKv":
+/***/ (function(module, exports) {
+
+module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+  '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+
+
+/***/ }),
+
+/***/ "6BQ9":
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__("uekQ");
+
+/***/ }),
+
 /***/ "B9jh":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -154,6 +170,8 @@ var _interopRequireDefault = __webpack_require__("KI45");
 exports.__esModule = true;
 exports["default"] = void 0;
 
+var _parseInt2 = _interopRequireDefault(__webpack_require__("6BQ9"));
+
 var _promise = _interopRequireDefault(__webpack_require__("eVuF"));
 
 var DOMAttributeNames = {
@@ -216,13 +234,25 @@ function () {
     key: "updateElements",
     value: function updateElements(type, components) {
       var headEl = document.getElementsByTagName('head')[0];
-      var oldTags = Array.prototype.slice.call(headEl.querySelectorAll(type + '.next-head'));
+      var headCountEl = headEl.querySelector('meta[name=next-head-count]');
+      var headCount = (0, _parseInt2["default"])(headCountEl.content);
+      var oldTags = [];
+      var currentEl = headCountEl.previousElementSibling;
+
+      for (var i = 0; i < headCount; i++) {
+        if (currentEl.tagName.toLowerCase() === type) {
+          oldTags.push(currentEl);
+        }
+
+        currentEl = currentEl.previousElementSibling;
+      }
+
       var newTags = components.map(reactElementToDOM).filter(function (newTag) {
-        for (var i = 0, len = oldTags.length; i < len; i++) {
-          var oldTag = oldTags[i];
+        for (var _i = 0, len = oldTags.length; _i < len; _i++) {
+          var oldTag = oldTags[_i];
 
           if (oldTag.isEqualNode(newTag)) {
-            oldTags.splice(i, 1);
+            oldTags.splice(_i, 1);
             return false;
           }
         }
@@ -233,8 +263,9 @@ function () {
         return t.parentNode.removeChild(t);
       });
       newTags.forEach(function (t) {
-        return headEl.appendChild(t);
+        return headEl.insertBefore(t, headCountEl);
       });
+      headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
     }
   }]);
   return HeadManager;
@@ -927,6 +958,22 @@ $export($export.P + $export.R, 'Map', { toJSON: __webpack_require__("8iia")('Map
 
 /***/ }),
 
+/***/ "XWtR":
+/***/ (function(module, exports, __webpack_require__) {
+
+var $parseInt = __webpack_require__("5T2Y").parseInt;
+var $trim = __webpack_require__("oc46").trim;
+var ws = __webpack_require__("5pKv");
+var hex = /^[-+]?0[xX]/;
+
+module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {
+  var string = $trim(String(str), 3);
+  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
+} : $parseInt;
+
+
+/***/ }),
+
 /***/ "cuFY":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -983,6 +1030,17 @@ exports.DataManager = DataManager;
 
 /***/ }),
 
+/***/ "dEVD":
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__("Y7ZC");
+var $parseInt = __webpack_require__("XWtR");
+// 18.2.5 parseInt(string, radix)
+$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });
+
+
+/***/ }),
+
 /***/ "dL40":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1041,6 +1099,43 @@ __webpack_require__.r(__webpack_exports__);
 
 /***/ }),
 
+/***/ "oc46":
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__("Y7ZC");
+var defined = __webpack_require__("Jes0");
+var fails = __webpack_require__("KUxP");
+var spaces = __webpack_require__("5pKv");
+var space = '[' + spaces + ']';
+var non = '\u200b\u0085';
+var ltrim = RegExp('^' + space + space + '*');
+var rtrim = RegExp(space + space + '*$');
+
+var exporter = function (KEY, exec, ALIAS) {
+  var exp = {};
+  var FORCE = fails(function () {
+    return !!spaces[KEY]() || non[KEY]() != non;
+  });
+  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
+  if (ALIAS) exp[ALIAS] = fn;
+  $export($export.P + $export.F * FORCE, 'String', exp);
+};
+
+// 1 -> String#trimLeft
+// 2 -> String#trimRight
+// 3 -> String#trim
+var trim = exporter.trim = function (string, TYPE) {
+  string = String(defined(string));
+  if (TYPE & 1) string = string.replace(ltrim, '');
+  if (TYPE & 2) string = string.replace(rtrim, '');
+  return string;
+};
+
+module.exports = exporter;
+
+
+/***/ }),
+
 /***/ "qS9g":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1078,6 +1173,15 @@ module.exports = __webpack_require__("+iuc");
 
 /***/ }),
 
+/***/ "uekQ":
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__("dEVD");
+module.exports = __webpack_require__("WEpk").parseInt;
+
+
+/***/ }),
+
 /***/ "xvv9":
 /***/ (function(module, exports, __webpack_require__) {
 

@Timer
Copy link
Member

Timer commented Jul 24, 2019

@devknoll looks like a polyfill for parseInt is being added. I wonder if the changes in #8091 would fix this?

@devknoll
Copy link
Contributor Author

D'oh... I could also just use the Number constructor, since I'm not relying on any of the other behavior of parseInt.

@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 13.2s 13.4s ⚠️ +224ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +443 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +506 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB -1 B
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 300 B -1 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +507 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.34 kB 1.35 kB ⚠️ +6 B
Build Dir Size 699 kB 702 kB ⚠️ +2.38 kB
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 15s 15s ⚠️ +75ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +443 B
Total Bundle (main, webpack, commons) Size 206 kB 207 kB ⚠️ +1.14 kB
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 68.3 kB ⚠️ +509 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB ⚠️ +1 B
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 300 B 301 B ⚠️ +1 B
Client main Size 19.8 kB 20.9 kB ⚠️ +1.14 kB
Client main gzip Size 6.78 kB 7.29 kB ⚠️ +508 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 251 kB 251 kB -151 B
Serverless pages/link gzip Size 67.6 kB 67.5 kB -57 B
Serverless pages/index Size 243 kB 243 kB -151 B
Serverless pages/index gzip Size 65.3 kB 65.3 kB -55 B
Serverless pages/_error Size 243 kB 243 kB -151 B
Serverless pages/_error gzip Size 65.1 kB 65 kB -54 B
Serverless pages/routerDirect Size 244 kB 244 kB -151 B
Serverless pages/routerDirect gzip Size 65.3 kB 65.2 kB -53 B
Serverless pages/withRouter Size 244 kB 244 kB -151 B
Serverless pages/withRouter gzip Size 65.4 kB 65.4 kB -53 B
Build Dir Size 1.88 MB 1.89 MB ⚠️ +1.18 kB
Diff for main.js
@@ -1,4 +1,4 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[2],{
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[8],{
 
 /***/ "+iuc":
 /***/ (function(module, exports, __webpack_require__) {
@@ -98,6 +98,22 @@ __webpack_require__("cHUd")('Map');
 
 /***/ }),
 
+/***/ "5pKv":
+/***/ (function(module, exports) {
+
+module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+  '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+
+
+/***/ }),
+
+/***/ "6BQ9":
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__("uekQ");
+
+/***/ }),
+
 /***/ "B9jh":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -154,6 +170,8 @@ var _interopRequireDefault = __webpack_require__("KI45");
 exports.__esModule = true;
 exports["default"] = void 0;
 
+var _parseInt2 = _interopRequireDefault(__webpack_require__("6BQ9"));
+
 var _promise = _interopRequireDefault(__webpack_require__("eVuF"));
 
 var DOMAttributeNames = {
@@ -216,13 +234,25 @@ function () {
     key: "updateElements",
     value: function updateElements(type, components) {
       var headEl = document.getElementsByTagName('head')[0];
-      var oldTags = Array.prototype.slice.call(headEl.querySelectorAll(type + '.next-head'));
+      var headCountEl = headEl.querySelector('meta[name=next-head-count]');
+      var headCount = (0, _parseInt2["default"])(headCountEl.content);
+      var oldTags = [];
+      var currentEl = headCountEl.previousElementSibling;
+
+      for (var i = 0; i < headCount; i++) {
+        if (currentEl.tagName.toLowerCase() === type) {
+          oldTags.push(currentEl);
+        }
+
+        currentEl = currentEl.previousElementSibling;
+      }
+
       var newTags = components.map(reactElementToDOM).filter(function (newTag) {
-        for (var i = 0, len = oldTags.length; i < len; i++) {
-          var oldTag = oldTags[i];
+        for (var _i = 0, len = oldTags.length; _i < len; _i++) {
+          var oldTag = oldTags[_i];
 
           if (oldTag.isEqualNode(newTag)) {
-            oldTags.splice(i, 1);
+            oldTags.splice(_i, 1);
             return false;
           }
         }
@@ -233,8 +263,9 @@ function () {
         return t.parentNode.removeChild(t);
       });
       newTags.forEach(function (t) {
-        return headEl.appendChild(t);
+        return headEl.insertBefore(t, headCountEl);
       });
+      headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
     }
   }]);
   return HeadManager;
@@ -927,6 +958,22 @@ $export($export.P + $export.R, 'Map', { toJSON: __webpack_require__("8iia")('Map
 
 /***/ }),
 
+/***/ "XWtR":
+/***/ (function(module, exports, __webpack_require__) {
+
+var $parseInt = __webpack_require__("5T2Y").parseInt;
+var $trim = __webpack_require__("oc46").trim;
+var ws = __webpack_require__("5pKv");
+var hex = /^[-+]?0[xX]/;
+
+module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {
+  var string = $trim(String(str), 3);
+  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
+} : $parseInt;
+
+
+/***/ }),
+
 /***/ "cuFY":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -983,6 +1030,17 @@ exports.DataManager = DataManager;
 
 /***/ }),
 
+/***/ "dEVD":
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__("Y7ZC");
+var $parseInt = __webpack_require__("XWtR");
+// 18.2.5 parseInt(string, radix)
+$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });
+
+
+/***/ }),
+
 /***/ "dL40":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1041,6 +1099,43 @@ __webpack_require__.r(__webpack_exports__);
 
 /***/ }),
 
+/***/ "oc46":
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__("Y7ZC");
+var defined = __webpack_require__("Jes0");
+var fails = __webpack_require__("KUxP");
+var spaces = __webpack_require__("5pKv");
+var space = '[' + spaces + ']';
+var non = '\u200b\u0085';
+var ltrim = RegExp('^' + space + space + '*');
+var rtrim = RegExp(space + space + '*$');
+
+var exporter = function (KEY, exec, ALIAS) {
+  var exp = {};
+  var FORCE = fails(function () {
+    return !!spaces[KEY]() || non[KEY]() != non;
+  });
+  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
+  if (ALIAS) exp[ALIAS] = fn;
+  $export($export.P + $export.F * FORCE, 'String', exp);
+};
+
+// 1 -> String#trimLeft
+// 2 -> String#trimRight
+// 3 -> String#trim
+var trim = exporter.trim = function (string, TYPE) {
+  string = String(defined(string));
+  if (TYPE & 1) string = string.replace(ltrim, '');
+  if (TYPE & 2) string = string.replace(rtrim, '');
+  return string;
+};
+
+module.exports = exporter;
+
+
+/***/ }),
+
 /***/ "qS9g":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1078,6 +1173,15 @@ module.exports = __webpack_require__("+iuc");
 
 /***/ }),
 
+/***/ "uekQ":
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__("dEVD");
+module.exports = __webpack_require__("WEpk").parseInt;
+
+
+/***/ }),
+
 /***/ "xvv9":
 /***/ (function(module, exports, __webpack_require__) {
 

@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 13.8s 13.1s -780ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +334 B
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +74 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +74 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.34 kB 1.35 kB ⚠️ +6 B
Build Dir Size 699 kB 699 kB ⚠️ +227 B
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 15.1s 15s -79ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +334 B
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +74 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +74 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 251 kB 251 kB -151 B
Serverless pages/link gzip Size 67.6 kB 67.5 kB -60 B
Serverless pages/index Size 243 kB 243 kB -151 B
Serverless pages/index gzip Size 65.3 kB 65.3 kB -57 B
Serverless pages/_error Size 243 kB 243 kB -151 B
Serverless pages/_error gzip Size 65.1 kB 65 kB -57 B
Serverless pages/routerDirect Size 244 kB 244 kB -151 B
Serverless pages/routerDirect gzip Size 65.3 kB 65.2 kB -56 B
Serverless pages/withRouter Size 244 kB 244 kB -151 B
Serverless pages/withRouter gzip Size 65.4 kB 65.4 kB -56 B
Build Dir Size 1.88 MB 1.88 MB -969 B
Diff for main.js
@@ -216,13 +216,25 @@ function () {
     key: "updateElements",
     value: function updateElements(type, components) {
       var headEl = document.getElementsByTagName('head')[0];
-      var oldTags = Array.prototype.slice.call(headEl.querySelectorAll(type + '.next-head'));
+      var headCountEl = headEl.querySelector('meta[name=next-head-count]');
+      var headCount = Number(headCountEl.content);
+      var oldTags = [];
+      var currentEl = headCountEl.previousElementSibling;
+
+      for (var i = 0; i < headCount; i++) {
+        if (currentEl.tagName.toLowerCase() === type) {
+          oldTags.push(currentEl);
+        }
+
+        currentEl = currentEl.previousElementSibling;
+      }
+
       var newTags = components.map(reactElementToDOM).filter(function (newTag) {
-        for (var i = 0, len = oldTags.length; i < len; i++) {
-          var oldTag = oldTags[i];
+        for (var _i = 0, len = oldTags.length; _i < len; _i++) {
+          var oldTag = oldTags[_i];
 
           if (oldTag.isEqualNode(newTag)) {
-            oldTags.splice(i, 1);
+            oldTags.splice(_i, 1);
             return false;
           }
         }
@@ -233,8 +245,9 @@ function () {
         return t.parentNode.removeChild(t);
       });
       newTags.forEach(function (t) {
-        return headEl.appendChild(t);
+        return headEl.insertBefore(t, headCountEl);
       });
+      headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
     }
   }]);
   return HeadManager;

@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 13.5s 13.1s -419ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +262 B
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +73 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +73 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.34 kB 1.35 kB ⚠️ +6 B
Build Dir Size 699 kB 699 kB ⚠️ +165 B
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 14.8s 15s ⚠️ +212ms
node_modules Size 45.4 MB 45.4 MB ⚠️ +262 B
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +73 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +73 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 251 kB 251 kB -151 B
Serverless pages/link gzip Size 67.6 kB 67.5 kB -59 B
Serverless pages/index Size 243 kB 243 kB -151 B
Serverless pages/index gzip Size 65.3 kB 65.3 kB -56 B
Serverless pages/_error Size 243 kB 243 kB -151 B
Serverless pages/_error gzip Size 65.1 kB 65 kB -54 B
Serverless pages/routerDirect Size 244 kB 244 kB -151 B
Serverless pages/routerDirect gzip Size 65.3 kB 65.2 kB -56 B
Serverless pages/withRouter Size 244 kB 244 kB -151 B
Serverless pages/withRouter gzip Size 65.4 kB 65.4 kB -55 B
Build Dir Size 1.88 MB 1.88 MB -1.03 kB
Diff for main.js
@@ -1,4 +1,4 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[8],{
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[2],{
 
 /***/ "+iuc":
 /***/ (function(module, exports, __webpack_require__) {
@@ -216,13 +216,22 @@ function () {
     key: "updateElements",
     value: function updateElements(type, components) {
       var headEl = document.getElementsByTagName('head')[0];
-      var oldTags = Array.prototype.slice.call(headEl.querySelectorAll(type + '.next-head'));
+      var headCountEl = headEl.querySelector('meta[name=next-head-count]');
+      var headCount = Number(headCountEl.content);
+      var oldTags = [];
+
+      for (var 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(function (newTag) {
-        for (var i = 0, len = oldTags.length; i < len; i++) {
-          var oldTag = oldTags[i];
+        for (var _i = 0, len = oldTags.length; _i < len; _i++) {
+          var oldTag = oldTags[_i];
 
           if (oldTag.isEqualNode(newTag)) {
-            oldTags.splice(i, 1);
+            oldTags.splice(_i, 1);
             return false;
           }
         }
@@ -233,8 +242,9 @@ function () {
         return t.parentNode.removeChild(t);
       });
       newTags.forEach(function (t) {
-        return headEl.appendChild(t);
+        return headEl.insertBefore(t, headCountEl);
       });
+      headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
     }
   }]);
   return HeadManager;

@Timer Timer added this to the 9.0.3 milestone Jul 25, 2019
@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 13.4s 12.5s -876ms
node_modules Size 45.5 MB 45.4 MB -29.7 kB
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +71 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 301 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +71 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.34 kB 1.35 kB ⚠️ +6 B
Build Dir Size 704 kB 699 kB -4.95 kB
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 14.6s 14.1s -474ms
node_modules Size 45.5 MB 45.4 MB -29.7 kB
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +73 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB ⚠️ +1 B
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 300 B 301 B ⚠️ +1 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +72 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 252 kB 251 kB -1.6 kB
Serverless pages/link gzip Size 68 kB 67.5 kB -471 B
Serverless pages/index Size 245 kB 243 kB -1.6 kB
Serverless pages/index gzip Size 65.8 kB 65.3 kB -488 B
Serverless pages/_error Size 244 kB 243 kB -1.6 kB
Serverless pages/_error gzip Size 65.5 kB 65 kB -484 B
Serverless pages/routerDirect Size 245 kB 244 kB -1.6 kB
Serverless pages/routerDirect gzip Size 65.7 kB 65.2 kB -486 B
Serverless pages/withRouter Size 245 kB 244 kB -1.6 kB
Serverless pages/withRouter gzip Size 65.9 kB 65.4 kB -484 B
Build Dir Size 1.89 MB 1.88 MB -12 kB
Diff for main.js
@@ -216,13 +216,22 @@ function () {
     key: "updateElements",
     value: function updateElements(type, components) {
       var headEl = document.getElementsByTagName('head')[0];
-      var oldTags = Array.prototype.slice.call(headEl.querySelectorAll(type + '.next-head'));
+      var headCountEl = headEl.querySelector('meta[name=next-head-count]');
+      var headCount = Number(headCountEl.content);
+      var oldTags = [];
+
+      for (var 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(function (newTag) {
-        for (var i = 0, len = oldTags.length; i < len; i++) {
-          var oldTag = oldTags[i];
+        for (var k = 0, len = oldTags.length; k < len; k++) {
+          var oldTag = oldTags[k];
 
           if (oldTag.isEqualNode(newTag)) {
-            oldTags.splice(i, 1);
+            oldTags.splice(k, 1);
             return false;
           }
         }
@@ -233,8 +242,9 @@ function () {
         return t.parentNode.removeChild(t);
       });
       newTags.forEach(function (t) {
-        return headEl.appendChild(t);
+        return headEl.insertBefore(t, headCountEl);
       });
+      headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
     }
   }]);
   return HeadManager;
@@ -1252,9 +1262,6 @@ function () {
                 route = _this.normalizeRoute(route);
                 scriptRoute = route === '/' ? '/index.js' : route + ".js";
                 script = document.createElement('script');
-
-                if (false) {}
-
                 url = _this.assetPrefix + "/_next/static/" + encodeURIComponent(_this.buildId) + "/pages" + scriptRoute;
                 script.crossOrigin = undefined;
                 script.src = url;
@@ -1270,7 +1277,7 @@ function () {
 
                 document.body.appendChild(script);
 
-              case 11:
+              case 10:
               case "end":
                 return _context.stop();
             }
@@ -1330,42 +1337,40 @@ function () {
                 route = _this2.normalizeRoute(route);
                 scriptRoute = (route === '/' ? '/index' : route) + ".js";
 
-                if (false) {}
-
                 if (!(_this2.prefetchCache.has(scriptRoute) || document.getElementById("__NEXT_PAGE__" + route))) {
-                  _context2.next = 5;
+                  _context2.next = 4;
                   break;
                 }
 
                 return _context2.abrupt("return");
 
-              case 5:
+              case 4:
                 _this2.prefetchCache.add(scriptRoute); // Inspired by quicklink, license: https://github.com/GoogleChromeLabs/quicklink/blob/master/LICENSE
                 // Don't prefetch if the user is on 2G / Don't prefetch if Save-Data is enabled
 
 
                 if (!('connection' in navigator)) {
-                  _context2.next = 9;
+                  _context2.next = 8;
                   break;
                 }
 
                 if (!((navigator.connection.effectiveType || '').indexOf('2g') !== -1 || navigator.connection.saveData)) {
-                  _context2.next = 9;
+                  _context2.next = 8;
                   break;
                 }
 
                 return _context2.abrupt("return");
 
-              case 9:
+              case 8:
                 if (!hasPreload) {
-                  _context2.next = 19;
+                  _context2.next = 18;
                   break;
                 }
 
-                _context2.next = 12;
+                _context2.next = 11;
                 return _this2.promisedBuildId;
 
-              case 12:
+              case 11:
                 link = document.createElement('link');
                 link.rel = 'preload';
                 link.crossOrigin = undefined;
@@ -1374,15 +1379,15 @@ function () {
                 document.head.appendChild(link);
                 return _context2.abrupt("return");
 
-              case 19:
+              case 18:
                 if (!(document.readyState === 'complete')) {
-                  _context2.next = 23;
+                  _context2.next = 22;
                   break;
                 }
 
                 return _context2.abrupt("return", _this2.loadPage(route)["catch"](function () {}));
 
-              case 23:
+              case 22:
                 return _context2.abrupt("return", new _promise["default"](function (resolve) {
                   window.addEventListener('load', function () {
                     _this2.loadPage(route).then(function () {
@@ -1393,7 +1398,7 @@ function () {
                   });
                 }));
 
-              case 24:
+              case 23:
               case "end":
                 return _context2.stop();
             }

@devknoll
Copy link
Contributor Author

The diff view from the bot is super handy BTW, thanks!

@Timer Timer added the lgtm label Jul 25, 2019
@Timer
Copy link
Member

Timer commented Jul 25, 2019

Thanks for these changes, @devknoll!

@github-actions
Copy link
Contributor

Stats from current PR

Click to expand stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 13.4s 13.1s -336ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +262 B
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +72 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB -1 B
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 300 B -1 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +73 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Base Rendered Size 1.34 kB 1.35 kB ⚠️ +6 B
Build Dir Size 704 kB 704 kB ⚠️ +160 B
Click to expand serverless stats ⚠️ Total Bundle Size Increase ⚠️
zeit/next.js canary devknoll/next.js next-head Change
Build Duration 14.2s 14.5s ⚠️ +262ms
node_modules Size 45.5 MB 45.5 MB ⚠️ +262 B
Total Bundle (main, webpack, commons) Size 206 kB 206 kB ⚠️ +167 B
Total Bundle (main, webpack, commons) gzip Size 67.8 kB 67.9 kB ⚠️ +72 B
Client _app Size 2.39 kB 2.39 kB
Client _app gzip Size 1.08 kB 1.08 kB -1 B
Client _error Size 8.45 kB 8.22 kB -228 B
Client _error gzip Size 3.24 kB 3.16 kB -75 B
Client pages/index Size 343 B 343 B
Client pages/index gzip Size 246 B 246 B
Client pages/link Size 4.14 kB 4.14 kB
Client pages/link gzip Size 1.82 kB 1.82 kB
Client pages/routerDirect Size 423 B 423 B
Client pages/routerDirect gzip Size 306 B 306 B
Client pages/withRouter Size 435 B 435 B
Client pages/withRouter gzip Size 301 B 300 B -1 B
Client main Size 19.8 kB 20 kB ⚠️ +167 B
Client main gzip Size 6.78 kB 6.85 kB ⚠️ +73 B
Client commons Size 184 kB 184 kB
Client commons gzip Size 59.7 kB 59.7 kB
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 770 B 770 B
Serverless pages/link Size 252 kB 252 kB -151 B
Serverless pages/link gzip Size 68 kB 67.9 kB -51 B
Serverless pages/index Size 245 kB 245 kB -151 B
Serverless pages/index gzip Size 65.8 kB 65.7 kB -51 B
Serverless pages/_error Size 244 kB 244 kB -151 B
Serverless pages/_error gzip Size 65.5 kB 65.5 kB -53 B
Serverless pages/routerDirect Size 245 kB 245 kB -151 B
Serverless pages/routerDirect gzip Size 65.7 kB 65.7 kB -55 B
Serverless pages/withRouter Size 245 kB 245 kB -151 B
Serverless pages/withRouter gzip Size 65.9 kB 65.8 kB -52 B
Build Dir Size 1.89 MB 1.89 MB -1.04 kB
Diff for main.js
@@ -216,13 +216,22 @@ function () {
     key: "updateElements",
     value: function updateElements(type, components) {
       var headEl = document.getElementsByTagName('head')[0];
-      var oldTags = Array.prototype.slice.call(headEl.querySelectorAll(type + '.next-head'));
+      var headCountEl = headEl.querySelector('meta[name=next-head-count]');
+      var headCount = Number(headCountEl.content);
+      var oldTags = [];
+
+      for (var 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(function (newTag) {
-        for (var i = 0, len = oldTags.length; i < len; i++) {
-          var oldTag = oldTags[i];
+        for (var k = 0, len = oldTags.length; k < len; k++) {
+          var oldTag = oldTags[k];
 
           if (oldTag.isEqualNode(newTag)) {
-            oldTags.splice(i, 1);
+            oldTags.splice(k, 1);
             return false;
           }
         }
@@ -233,8 +242,9 @@ function () {
         return t.parentNode.removeChild(t);
       });
       newTags.forEach(function (t) {
-        return headEl.appendChild(t);
+        return headEl.insertBefore(t, headCountEl);
       });
+      headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
     }
   }]);
   return HeadManager;

@kodiakhq kodiakhq bot merged commit e68307d into vercel:canary Jul 25, 2019
kodiakhq bot pushed a commit to mcansh/connection that referenced this pull request Aug 1, 2019
## The dependency [next](https://github.com/zeit/next.js) was updated from `9.0.2` to `9.0.3`.
This version is **not covered** by your **current version range**.

If you don’t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.

---

**Publisher:** [zeit-bot](https://www.npmjs.com/~zeit-bot)
**License:** MIT

<details>
<summary>Release Notes for v9.0.3</summary>

<h3>Minor Changes</h3>
<ul>
<li>Experimental module/nomodule support: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="462231644" data-permission-text="Issue title is private" data-url="vercel/next.js#7704" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7704/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7704">#7704</a></li>
</ul>
<h3>Patches</h3>
<ul>
<li>Modern JS for SSR Bundles: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="467869135" data-permission-text="Issue title is private" data-url="vercel/next.js#7961" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7961/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7961">#7961</a></li>
<li>Add .gitignore: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="466739863" data-permission-text="Issue title is private" data-url="vercel/next.js#7893" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7893/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7893">#7893</a></li>
<li>Import isomorphic-unfetch in data fetching example: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="466886896" data-permission-text="Issue title is private" data-url="vercel/next.js#7895" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7895/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7895">#7895</a></li>
<li>Make tests for both async and sync GIP: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="468706447" data-permission-text="Issue title is private" data-url="vercel/next.js#7999" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7999/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7999">#7999</a></li>
<li>Rework dynamic routing &lt;Link&gt; documentation: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="468803528" data-permission-text="Issue title is private" data-url="vercel/next.js#8001" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8001/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8001">#8001</a></li>
<li>Avoid sending user errors to client: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="468848773" data-permission-text="Issue title is private" data-url="vercel/next.js#8005" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8005/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8005">#8005</a></li>
<li>Replace fs.exists with fs.access: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="463627067" data-permission-text="Issue title is private" data-url="vercel/next.js#7742" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7742/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7742">#7742</a></li>
<li>Fix children key in with-typescript-styled-components example: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="468834696" data-permission-text="Issue title is private" data-url="vercel/next.js#8003" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8003/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8003">#8003</a></li>
<li>Handle windows backslashes when checking ssr-prepass: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="469319954" data-permission-text="Issue title is private" data-url="vercel/next.js#8016" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8016/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8016">#8016</a></li>
<li>Add Create Next App package: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="469418599" data-permission-text="Issue title is private" data-url="vercel/next.js#8018" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8018/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8018">#8018</a></li>
<li>Reference correct repository: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/7f5f9818009c8cd90e1e5bd17d5517b45558dc5d/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/7f5f9818009c8cd90e1e5bd17d5517b45558dc5d"><tt>7f5f981</tt></a></li>
<li>Remove old media images: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/d486152b98b481afd2d6e6e013e8a0cefda93350/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/d486152b98b481afd2d6e6e013e8a0cefda93350"><tt>d486152</tt></a></li>
<li>Update CNA links to examples: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/bcd8eb6b784cc167507c8768c55fd8ea3735fee7/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/bcd8eb6b784cc167507c8768c55fd8ea3735fee7"><tt>bcd8eb6</tt></a></li>
<li>Fix CNA README typo: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/8fb32de0ab7399ace08d4832173942c1452e4241/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/8fb32de0ab7399ace08d4832173942c1452e4241"><tt>8fb32de</tt></a></li>
<li>Fix syntax error in ie11 from next-server/amp: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="470024207" data-permission-text="Issue title is private" data-url="vercel/next.js#8032" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8032/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8032">#8032</a></li>
<li>Rewrite Create Next App: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="470000615" data-permission-text="Issue title is private" data-url="vercel/next.js#8030" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8030/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8030">#8030</a></li>
<li>Comment out GIP in Custom &lt;App&gt;: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="471135868" data-permission-text="Issue title is private" data-url="vercel/next.js#8055" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8055/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8055">#8055</a></li>
<li>Remove public/ file example: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="471136710" data-permission-text="Issue title is private" data-url="vercel/next.js#8056" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8056/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8056">#8056</a></li>
<li>Remove <code>now.json</code> from examples: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="471137313" data-permission-text="Issue title is private" data-url="vercel/next.js#8057" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8057/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8057">#8057</a></li>
<li>Fix userAgent type error in README.md: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="470826188" data-permission-text="Issue title is private" data-url="vercel/next.js#8048" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8048/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8048">#8048</a></li>
<li>Apply missing formatting: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="471849421" data-permission-text="Issue title is private" data-url="vercel/next.js#8079" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8079/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8079">#8079</a></li>
<li>Updated "firebase-admin" module and added "firebase-functions-t…: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="471838215" data-permission-text="Issue title is private" data-url="vercel/next.js#8078" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8078/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8078">#8078</a></li>
<li>Enable Kodiak bot: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="472617792" data-permission-text="Issue title is private" data-url="vercel/next.js#8096" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8096/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8096">#8096</a></li>
<li>Disable notify on conflict: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/427a02a468ca6c8b101ab3229742f2c1ab1ced69/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/427a02a468ca6c8b101ab3229742f2c1ab1ced69"><tt>427a02a</tt></a></li>
<li>Improve types: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="472623488" data-permission-text="Issue title is private" data-url="vercel/next.js#8097" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8097/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8097">#8097</a></li>
<li>Allow automatic static optimization in with-sentry-simple examp…: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="472766378" data-permission-text="Issue title is private" data-url="vercel/next.js#8102" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8102/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8102">#8102</a></li>
<li>Require label to merge for now: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/d006a24d8f9d70ad92f59c41a42b2ecb7c46cbf6/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/d006a24d8f9d70ad92f59c41a42b2ecb7c46cbf6"><tt>d006a24</tt></a></li>
<li>Revert "Improve type definitions": <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="472653248" data-permission-text="Issue title is private" data-url="vercel/next.js#8098" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8098/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8098">#8098</a></li>
<li>HTTP methods docs and REST example: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="472906101" data-permission-text="Issue title is private" data-url="vercel/next.js#8108" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8108/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8108">#8108</a></li>
<li>Configuration for body parsing size limit: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="466971206" data-permission-text="Issue title is private" data-url="vercel/next.js#7896" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7896/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7896">#7896</a></li>
<li>Add next-head-count &amp; remove next-head class: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="469465078" data-permission-text="Issue title is private" data-url="vercel/next.js#8020" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8020/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8020">#8020</a></li>
<li>Fix extension for module/nomodule: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/8b0a93b0edf06d46da4839d5be426133810c8bad/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/8b0a93b0edf06d46da4839d5be426133810c8bad"><tt>8b0a93b</tt></a></li>
<li>Dynamic routes clarification: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="472934525" data-permission-text="Issue title is private" data-url="vercel/next.js#8110" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8110/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8110">#8110</a></li>
<li>Fix index.js for API routes: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="472976319" data-permission-text="Issue title is private" data-url="vercel/next.js#8112" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8112/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8112">#8112</a></li>
<li>Fix onError prop-type warning in Link: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="469483279" data-permission-text="Issue title is private" data-url="vercel/next.js#8021" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8021/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8021">#8021</a></li>
<li>Auth example with api routes: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473108272" data-permission-text="Issue title is private" data-url="vercel/next.js#8118" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8118/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8118">#8118</a></li>
<li>Fixes problem with API and wrong regex: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473364571" data-permission-text="Issue title is private" data-url="vercel/next.js#8126" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8126/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8126">#8126</a></li>
<li>Update example with firebase auth: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473391249" data-permission-text="Issue title is private" data-url="vercel/next.js#8127" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8127/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8127">#8127</a></li>
<li>Improve type definitions: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473103574" data-permission-text="Issue title is private" data-url="vercel/next.js#8117" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8117/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8117">#8117</a></li>
<li>Docs: Fix comments in with-sentry example (server.js): <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473330715" data-permission-text="Issue title is private" data-url="vercel/next.js#8125" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8125/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8125">#8125</a></li>
<li>Add missing key prop for array elements in _document: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473585040" data-permission-text="Issue title is private" data-url="vercel/next.js#8132" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8132/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8132">#8132</a></li>
<li>Update README.md for with-http2 example: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473528809" data-permission-text="Issue title is private" data-url="vercel/next.js#8131" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8131/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8131">#8131</a></li>
<li>Fix spelling in  tsconfig.js of readme.md: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473650878" data-permission-text="Issue title is private" data-url="vercel/next.js#8138" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8138/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8138">#8138</a></li>
<li>Remove next.config.js: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473651232" data-permission-text="Issue title is private" data-url="vercel/next.js#8139" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8139/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8139">#8139</a></li>
<li>Upgrade with-mdx example from mdx 0.16 → 1.1: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473661737" data-permission-text="Issue title is private" data-url="vercel/next.js#8142" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8142/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8142">#8142</a></li>
<li>Remove kodiak: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/482f454c7afc6a2d5a94c1a78ea0917e0fa80dc8/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/482f454c7afc6a2d5a94c1a78ea0917e0fa80dc8"><tt>482f454</tt></a></li>
<li>Fix regex to not match any string with double underscore: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473812706" data-permission-text="Issue title is private" data-url="vercel/next.js#8153" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8153/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8153">#8153</a></li>
<li>Improve docs for API: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473932328" data-permission-text="Issue title is private" data-url="vercel/next.js#8155" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8155/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8155">#8155</a></li>
<li>Add 2 AWS Amplify SSR examples one with JS and one with TS: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="471699809" data-permission-text="Issue title is private" data-url="vercel/next.js#8073" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8073/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8073">#8073</a></li>
<li>Update webpack to 4.38.0: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473713215" data-permission-text="Issue title is private" data-url="vercel/next.js#8147" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8147/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8147">#8147</a></li>
<li>Docs: Document change concerning api-routes: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473203773" data-permission-text="Issue title is private" data-url="vercel/next.js#8121" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8121/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8121">#8121</a></li>
<li>Update missed lockfile: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/zeit/next.js/commit/25fd3f86a3f7b7ad9075563f6f4a5dddf3079f00/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/commit/25fd3f86a3f7b7ad9075563f6f4a5dddf3079f00"><tt>25fd3f8</tt></a></li>
<li>Refactor(webpack): extract splitChunksConfig: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474132203" data-permission-text="Issue title is private" data-url="vercel/next.js#8161" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8161/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8161">#8161</a></li>
<li>Include <code>scheduler</code> in React bundle: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474156253" data-permission-text="Issue title is private" data-url="vercel/next.js#8164" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8164/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8164">#8164</a></li>
<li>Optional Server Compression: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="471351178" data-permission-text="Issue title is private" data-url="vercel/next.js#8066" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8066/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8066">#8066</a></li>
<li>Fix build only server-side <code>/api/index.js</code>: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474247771" data-permission-text="Issue title is private" data-url="vercel/next.js#8167" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8167/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8167">#8167</a></li>
<li>Fix a typo in README: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474647513" data-permission-text="Issue title is private" data-url="vercel/next.js#8177" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8177/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8177">#8177</a></li>
<li>Provide AppTree to getInitialProps for getDataFromTree: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="463422020" data-permission-text="Issue title is private" data-url="vercel/next.js#7732" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/7732/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/7732">#7732</a></li>
<li>Test environment code should target Node: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474767437" data-permission-text="Issue title is private" data-url="vercel/next.js#8181" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8181/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8181">#8181</a></li>
<li>Fix: Add error message for duplicate route param name: <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="470807151" data-permission-text="Issue title is private" data-url="vercel/next.js#8047" data-hovercard-type="pull_request" data-hovercard-url="/vercel/next.js/pull/8047/hovercard" href="https://urls.greenkeeper.io/zeit/next.js/pull/8047">#8047</a></li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=1270909" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/rakannimer">@rakannimer</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=4323180" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/adamwathan">@adamwathan</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=5691926" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/huv1k">@huv1k</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=4278345" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/lfades">@lfades</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=2252473" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/imdreamrunner">@imdreamrunner</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=14829154" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/dmytro-lymarenko">@dmytro-lymarenko</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=22380829" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/ijjk">@ijjk</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=105127" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/developit">@developit</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=6142074" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/janicklas-ralph">@janicklas-ralph</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=29964919" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/ikeryo1182">@ikeryo1182</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=18068142" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/chaitanyareddyk">@chaitanyareddyk</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=156628" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/adam187">@adam187</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=1265681" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/HaNdTriX">@HaNdTriX</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=1477230" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/devknoll">@devknoll</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=675812" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/sgmonda">@sgmonda</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=3165635" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/oliviertassinari">@oliviertassinari</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=1193520" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/0x80">@0x80</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=10408485" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/bapjiws">@bapjiws</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=3652404" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/oguzzkilic">@oguzzkilic</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=12414212" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/partyKyoung">@partyKyoung</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=5074763" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/lachlanjc">@lachlanjc</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=503795" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/tomasikp">@tomasikp</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=9304194" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/felixmosh">@felixmosh</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=12292047" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/eps1lon">@eps1lon</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=616428" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/Timer">@Timer</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=2817762" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/OttlikG">@OttlikG</a>, and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/hovercards?user_id=31798108" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://urls.greenkeeper.io/nataliemarleny">@nataliemarleny</a> for helping!</p>
</details>

<details>
<summary>Commits</summary>
<p>The new version differs by 73 commits.</p>
<ul>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/00b56c6ede6fce26c300d3864f70ce1ecbe5fb1d"><code>00b56c6</code></a> <code>v9.0.3</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/dc9e2708984bc6bc7e87724fb5193e7f788c89a3"><code>dc9e270</code></a> <code>Update examples for Apollo with AppTree (#8180)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/22aee7f246cd90d32027009808d732eb01335710"><code>22aee7f</code></a> <code>tests(circleci): Update chromedriver to latest (#8192)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/6c2534362e3e77830be9af2ace9b72b008eae947"><code>6c25343</code></a> <code>Fix typo within blog-starter example (#8182)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/858f4eb8eca024fc0e4e20c5bb7c3bfcc4a7e265"><code>858f4eb</code></a> <code>v9.0.3-canary.6</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/b8aee7af77288554d36841148da2f0f65416364a"><code>b8aee7a</code></a> <code>fix: Add error message for duplicate route param name (#8047)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/c61f6c1200f86a1dab72b983d7d8274d4de90160"><code>c61f6c1</code></a> <code>Test environment code should target Node (#8181)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/4850bd03ef113de3e306099049cd7241ba9ca798"><code>4850bd0</code></a> <code>Provide AppTree to getInitialProps for getDataFromTree (#7732)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/72098328cfcc36dcadb0fbc7848f5020c5939213"><code>7209832</code></a> <code>Fix a typo in README (#8177)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/3e03fee2787b6b33fdef89a1d7abdce253e58a02"><code>3e03fee</code></a> <code>Fix build only server-side <code>/api/index.js</code> (#8167)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/9659b4b555fc99edde717e5607c6a4ee8c46b22b"><code>9659b4b</code></a> <code>Optional Server Compression (#8066)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/df213f7aabc2c598a194a7a161d1f6c22dc90e58"><code>df213f7</code></a> <code>Include <code>scheduler</code> in React bundle (#8164)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/7b33fbbfe677f7fa1a6e1ab1c41c732fa2d62da4"><code>7b33fbb</code></a> <code>v9.0.3-canary.5</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/91f60cdadf54c71db3749f4aa02a99c21702b93f"><code>91f60cd</code></a> <code>refactor(webpack): extract splitChunksConfig (#8161)</code></li>
<li><a href="https://urls.greenkeeper.io/zeit/next.js/commit/25fd3f86a3f7b7ad9075563f6f4a5dddf3079f00"><code>25fd3f8</code></a> <code>Update missed lockfile</code></li>
</ul>
<p>There are 73 commits in total.</p>
<p>See the <a href="https://urls.greenkeeper.io/zeit/next.js/compare/becd07402e6ed0145618972e80e81657050dadae...00b56c6ede6fce26c300d3864f70ce1ecbe5fb1d">full diff</a></p>
</details>

---

<details>
  <summary>FAQ and help</summary>

  There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html). If those don’t help, you can always [ask the humans behind Greenkeeper](https://github.com/greenkeeperio/greenkeeper/issues/new).
</details>

---


Your [Greenkeeper](https://greenkeeper.io) bot 🌴
@vercel vercel locked as resolved and limited conversation to collaborators Feb 1, 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.

'next-head' class being added to all the items in the the <HEAD>
3 participants