Skip to content

Commit

Permalink
v12.1.3-canary.2
Browse files Browse the repository at this point in the history
  • Loading branch information
timneutkens committed Mar 30, 2022
1 parent 9fc1904 commit eef557d
Show file tree
Hide file tree
Showing 15 changed files with 22 additions and 22 deletions.
2 changes: 1 addition & 1 deletion lerna.json
Expand Up @@ -16,5 +16,5 @@
"registry": "https://registry.npmjs.org/"
}
},
"version": "12.1.3-canary.1"
"version": "12.1.3-canary.2"
}
2 changes: 1 addition & 1 deletion packages/create-next-app/package.json
@@ -1,6 +1,6 @@
{
"name": "create-next-app",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"keywords": [
"react",
"next",
Expand Down
4 changes: 2 additions & 2 deletions packages/eslint-config-next/package.json
@@ -1,6 +1,6 @@
{
"name": "eslint-config-next",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"description": "ESLint configuration used by NextJS.",
"main": "index.js",
"license": "MIT",
Expand All @@ -9,7 +9,7 @@
"directory": "packages/eslint-config-next"
},
"dependencies": {
"@next/eslint-plugin-next": "12.1.3-canary.1",
"@next/eslint-plugin-next": "12.1.3-canary.2",
"@rushstack/eslint-patch": "1.0.8",
"@typescript-eslint/parser": "5.10.1",
"eslint-import-resolver-node": "0.3.4",
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-plugin-next/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/eslint-plugin-next",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"description": "ESLint plugin for NextJS.",
"main": "lib/index.js",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-bundle-analyzer/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/bundle-analyzer",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"main": "index.js",
"license": "MIT",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion packages/next-codemod/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/codemod",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"license": "MIT",
"dependencies": {
"chalk": "4.1.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-env/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/env",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"keywords": [
"react",
"next",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-mdx/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/mdx",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"main": "index.js",
"license": "MIT",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion packages/next-plugin-storybook/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/plugin-storybook",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"repository": {
"url": "vercel/next.js",
"directory": "packages/next-plugin-storybook"
Expand Down
2 changes: 1 addition & 1 deletion packages/next-polyfill-module/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/polyfill-module",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)",
"main": "dist/polyfill-module.js",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-polyfill-nomodule/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/polyfill-nomodule",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"description": "A polyfill for non-dead, nomodule browsers.",
"main": "dist/polyfill-nomodule.js",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-swc/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/swc",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"private": true,
"scripts": {
"build-native": "napi build --platform --cargo-name next_swc_napi native",
Expand Down
14 changes: 7 additions & 7 deletions packages/next/package.json
@@ -1,6 +1,6 @@
{
"name": "next",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"description": "The React Framework",
"main": "./dist/server/next.js",
"license": "MIT",
Expand Down Expand Up @@ -69,7 +69,7 @@
]
},
"dependencies": {
"@next/env": "12.1.3-canary.1",
"@next/env": "12.1.3-canary.2",
"caniuse-lite": "^1.0.30001283",
"postcss": "8.4.5",
"styled-jsx": "5.0.1",
Expand Down Expand Up @@ -118,11 +118,11 @@
"@hapi/accept": "5.0.2",
"@napi-rs/cli": "2.4.4",
"@napi-rs/triples": "1.1.0",
"@next/polyfill-module": "12.1.3-canary.1",
"@next/polyfill-nomodule": "12.1.3-canary.1",
"@next/react-dev-overlay": "12.1.3-canary.1",
"@next/react-refresh-utils": "12.1.3-canary.1",
"@next/swc": "12.1.3-canary.1",
"@next/polyfill-module": "12.1.3-canary.2",
"@next/polyfill-nomodule": "12.1.3-canary.2",
"@next/react-dev-overlay": "12.1.3-canary.2",
"@next/react-refresh-utils": "12.1.3-canary.2",
"@next/swc": "12.1.3-canary.2",
"@peculiar/webcrypto": "1.3.1",
"@taskr/clear": "1.1.0",
"@taskr/esnext": "1.1.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/react-dev-overlay/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/react-dev-overlay",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"description": "A development-only overlay for developing React applications.",
"repository": {
"url": "vercel/next.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/react-refresh-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/react-refresh-utils",
"version": "12.1.3-canary.1",
"version": "12.1.3-canary.2",
"description": "An experimental package providing utilities for React Refresh.",
"repository": {
"url": "vercel/next.js",
Expand Down

1 comment on commit eef557d

@ijjk
Copy link
Member

@ijjk ijjk commented on eef557d Mar 30, 2022

Choose a reason for hiding this comment

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

Stats from current release

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
buildDuration 15.7s 15.7s ⚠️ +34ms
buildDurationCached 6.1s 6.1s -8ms
nodeModulesSize 467 MB 467 MB ⚠️ +17 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
/ failed reqs 0 0
/ total time (seconds) 3.053 3.07 ⚠️ +0.02
/ avg req/sec 818.97 814.22 ⚠️ -4.75
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.26 1.259 0
/error-in-render avg req/sec 1984.12 1985.57 +1.45
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
925.HASH.js gzip 179 B 179 B
framework-HASH.js gzip 42 kB 42 kB
main-HASH.js gzip 27.9 kB 28.4 kB ⚠️ +497 B
webpack-HASH.js gzip 1.44 kB 1.44 kB
Overall change 71.6 kB 72.1 kB ⚠️ +497 B
Legacy Client Bundles (polyfills)
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
_app-HASH.js gzip 1.36 kB 1.36 kB
_error-HASH.js gzip 192 B 192 B
amp-HASH.js gzip 309 B 309 B
css-HASH.js gzip 327 B 327 B
dynamic-HASH.js gzip 2.57 kB 2.57 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 920 B 920 B
image-HASH.js gzip 5.48 kB 5.48 kB
index-HASH.js gzip 263 B 263 B
link-HASH.js gzip 2.26 kB 2.26 kB
routerDirect..HASH.js gzip 320 B 320 B
script-HASH.js gzip 387 B 387 B
withRouter-HASH.js gzip 319 B 319 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 15.2 kB 15.2 kB
Client Build Manifests
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
_buildManifest.js gzip 460 B 460 B
Overall change 460 B 460 B
Rendered Page Sizes
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
index.html gzip 532 B 532 B
link.html gzip 545 B 545 B
withRouter.html gzip 525 B 525 B
Overall change 1.6 kB 1.6 kB

Diffs

Diff for main-HASH.js
@@ -473,7 +473,7 @@
       var _routeAnnouncer = __webpack_require__(8483);
       var _router1 = __webpack_require__(880);
       var _isError = __webpack_require__(676);
-      var _vitals = __webpack_require__(7185);
+      var _vitals = __webpack_require__(4564);
       var _refresh = __webpack_require__(2129);
       var _imageConfigContext = __webpack_require__(8730);
       function asyncGeneratorStep(
@@ -624,7 +624,7 @@
         }
         return target;
       }
-      var version = "12.1.2";
+      var version = "12.1.3-canary.2";
       exports.version = version;
       var router;
       exports.router = router;
@@ -3197,7 +3197,7 @@
       /***/
     },
 
-    /***/ 7185: /***/ function(
+    /***/ 4564: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -4351,8 +4351,8 @@
       var _resolveRewrites = _interopRequireDefault1(__webpack_require__(2431));
       var _routeMatcher = __webpack_require__(3156);
       var _routeRegex = __webpack_require__(4903);
-      var _getMiddlewareRegex = __webpack_require__(3072);
       var _formatUrl = __webpack_require__(7795);
+      var _routingItems = __webpack_require__(7185);
       function _interopRequireDefault1(obj) {
         return obj && obj.__esModule
           ? obj
@@ -6378,8 +6378,16 @@
                 _runtimeJs.default.mark(function _callee() {
                   var asPathname,
                     cleanedAs,
-                    fns,
+                    middlewareList,
+                    middleware,
+                    routingItems,
                     requiresPreflight,
+                    _iteratorNormalCompletion,
+                    _didIteratorError,
+                    _iteratorError,
+                    _iterator,
+                    _step,
+                    item,
                     preflight,
                     parsed,
                     fsPathname,
@@ -6404,58 +6412,116 @@
                             _ctx.next = 4;
                             return _this.pageLoader.getMiddlewareList();
                           case 4:
-                            fns = _ctx.sent;
-                            requiresPreflight = fns.some(function(param) {
+                            middlewareList = _ctx.sent;
+                            middleware = middlewareList.map(function(param) {
                               var _param = _slicedToArray(param, 2),
-                                middleware = _param[0],
-                                isSSR = _param[1];
-                              return (0, _routeMatcher).getRouteMatcher(
-                                (0, _getMiddlewareRegex).getMiddlewareRegex(
-                                  middleware,
-                                  !isSSR
-                                )
-                              )(cleanedAs);
+                                page = _param[0],
+                                ssr = _param[1];
+                              return {
+                                page: page,
+                                ssr: ssr
+                              };
                             });
+                            routingItems = (0, _routingItems).getRoutingItems(
+                              options.pages,
+                              middleware
+                            );
+                            requiresPreflight = false;
+                            (_iteratorNormalCompletion = true),
+                              (_didIteratorError = false),
+                              (_iteratorError = undefined);
+                            _ctx.prev = 9;
+                            _iterator = routingItems[Symbol.iterator]();
+                          case 11:
+                            if (
+                              (_iteratorNormalCompletion = (_step = _iterator.next())
+                                .done)
+                            ) {
+                              _ctx.next = 19;
+                              break;
+                            }
+                            item = _step.value;
+                            if (!item.match(cleanedAs)) {
+                              _ctx.next = 16;
+                              break;
+                            }
+                            if (item.isMiddleware) {
+                              requiresPreflight = true;
+                            }
+                            return _ctx.abrupt("break", 19);
+                          case 16:
+                            _iteratorNormalCompletion = true;
+                            _ctx.next = 11;
+                            break;
+                          case 19:
+                            _ctx.next = 25;
+                            break;
+                          case 21:
+                            _ctx.prev = 21;
+                            _ctx.t0 = _ctx["catch"](9);
+                            _didIteratorError = true;
+                            _iteratorError = _ctx.t0;
+                          case 25:
+                            _ctx.prev = 25;
+                            _ctx.prev = 26;
+                            if (
+                              !_iteratorNormalCompletion &&
+                              _iterator.return != null
+                            ) {
+                              _iterator.return();
+                            }
+                          case 28:
+                            _ctx.prev = 28;
+                            if (!_didIteratorError) {
+                              _ctx.next = 31;
+                              break;
+                            }
+                            throw _iteratorError;
+                          case 31:
+                            return _ctx.finish(28);
+                          case 32:
+                            return _ctx.finish(25);
+                          case 33:
                             if (requiresPreflight) {
-                              _ctx.next = 8;
+                              _ctx.next = 35;
                               break;
                             }
                             return _ctx.abrupt("return", {
                               type: "next"
                             });
-                          case 8:
-                            _ctx.prev = 9;
-                            _ctx.next = 12;
+                          case 35:
+                            _ctx.prev = 36;
+                            _ctx.next = 39;
                             return _this._getPreflightData({
                               preflightHref: options.as,
                               shouldCache: options.cache,
                               isPreview: options.isPreview
                             });
-                          case 12:
+                          case 39:
                             preflight = _ctx.sent;
-                            _ctx.next = 18;
+                            _ctx.next = 45;
                             break;
-                          case 15:
-                            _ctx.prev = 15;
-                            _ctx.t0 = _ctx["catch"](9);
+                          case 42:
+                            _ctx.prev = 42;
+                            _ctx.t1 = _ctx["catch"](36);
                             return _ctx.abrupt("return", {
                               type: "redirect",
                               destination: options.as
                             });
-                          case 18:
+                          case 45:
                             if (!preflight.rewrite) {
-                              _ctx.next = 27;
+                              _ctx.next = 54;
                               break;
                             }
                             if (preflight.rewrite.startsWith("/")) {
-                              _ctx.next = 21;
+                              _ctx.next = 48;
                               break;
                             }
                             return _ctx.abrupt("return", {
                               type: "redirect",
                               destination: options.as
                             });
-                          case 21:
+                          case 48:
                             parsed = (0, _parseRelativeUrl).parseRelativeUrl(
                               (0, _normalizeLocalePath).normalizeLocalePath(
                                 hasBasePath(preflight.rewrite)
@@ -6490,13 +6556,13 @@
                               matchedPage: matchedPage,
                               resolvedHref: resolvedHref
                             });
-                          case 27:
+                          case 54:
                             if (!preflight.redirect) {
-                              _ctx.next = 33;
+                              _ctx.next = 60;
                               break;
                             }
                             if (!preflight.redirect.startsWith("/")) {
-                              _ctx.next = 32;
+                              _ctx.next = 59;
                               break;
                             }
                             cleanRedirect = (0,
@@ -6520,31 +6586,35 @@
                               newUrl: newUrl,
                               newAs: newAs
                             });
-                          case 32:
+                          case 59:
                             return _ctx.abrupt("return", {
                               type: "redirect",
                               destination: preflight.redirect
                             });
-                          case 33:
+                          case 60:
                             if (!(preflight.refresh && !preflight.ssr)) {
-                              _ctx.next = 35;
+                              _ctx.next = 62;
                               break;
                             }
                             return _ctx.abrupt("return", {
                               type: "refresh"
                             });
-                          case 35:
+                          case 62:
                             return _ctx.abrupt("return", {
                               type: "next"
                             });
-                          case 36:
+                          case 63:
                           case "end":
                             return _ctx.stop();
                         }
                     },
                     _callee,
                     null,
-                    [[9, 15]]
+                    [
+                      [9, 21, 25, 33],
+                      [26, , 28, 32],
+                      [36, 42]
+                    ]
                   );
                 })
               )();
@@ -6816,11 +6886,17 @@
       });
       exports.getMiddlewareRegex = getMiddlewareRegex;
       var _routeRegex = __webpack_require__(4903);
+      // Identify ^/[param]/ in route string
+      var FIRST_SEGMENT_DYNAMIC = /^\/\[[^/]+?\](?=\/|$)/;
+      var NOT_API_ROUTE = "(?!/api(?:/|$))";
       function getMiddlewareRegex(normalizedRoute) {
         var catchAll =
           arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
         var result = (0, _routeRegex).getParametrizedRoute(normalizedRoute);
-        var catchAllRegex = catchAll ? "(?!_next).*" : "";
+        var notApiRegex = FIRST_SEGMENT_DYNAMIC.test(normalizedRoute)
+          ? NOT_API_ROUTE
+          : "";
+        var catchAllRegex = catchAll ? "(?!_next($|/)).*" : "";
         var catchAllGroupedRegex = catchAll ? "(?:(/.*)?)" : "";
         if ("routeKeys" in result) {
           if (result.parameterizedRoute === "/") {
@@ -6834,10 +6910,12 @@
           return {
             groups: result.groups,
             namedRegex: "^"
+              .concat(notApiRegex)
               .concat(result.namedParameterizedRoute)
               .concat(catchAllGroupedRegex, "$"),
             re: new RegExp(
               "^"
+                .concat(notApiRegex)
                 .concat(result.parameterizedRoute)
                 .concat(catchAllGroupedRegex, "$")
             ),
@@ -6854,6 +6932,7 @@
           groups: {},
           re: new RegExp(
             "^"
+              .concat(notApiRegex)
               .concat(result.parameterizedRoute)
               .concat(catchAllGroupedRegex, "$")
           )
@@ -6891,6 +6970,18 @@
           return _routeRegex.getRouteRegex;
         }
       });
+      Object.defineProperty(exports, "getRoutingItems", {
+        enumerable: true,
+        get: function get() {
+          return _routingItems.getRoutingItems;
+        }
+      });
+      Object.defineProperty(exports, "RoutingItem", {
+        enumerable: true,
+        get: function get() {
+          return _routingItems.RoutingItem;
+        }
+      });
       Object.defineProperty(exports, "getSortedRoutes", {
         enumerable: true,
         get: function get() {
@@ -6906,6 +6997,7 @@
       var _getMiddlewareRegex = __webpack_require__(3072);
       var _routeMatcher = __webpack_require__(3156);
       var _routeRegex = __webpack_require__(4903);
+      var _routingItems = __webpack_require__(7185);
       var _sortedRoutes = __webpack_require__(566);
       var _isDynamic = __webpack_require__(6238); //# sourceMappingURL=index.js.map
 
@@ -7237,6 +7329,101 @@
       /***/
     },
 
+    /***/ 7185: /***/ function(
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) {
+      "use strict";
+
+      function _arrayLikeToArray(arr, len) {
+        if (len == null || len > arr.length) len = arr.length;
+        for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+        return arr2;
+      }
+      function _arrayWithoutHoles(arr) {
+        if (Array.isArray(arr)) return _arrayLikeToArray(arr);
+      }
+      function _iterableToArray(iter) {
+        if (
+          (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null) ||
+          iter["@@iterator"] != null
+        )
+          return Array.from(iter);
+      }
+      function _nonIterableSpread() {
+        throw new TypeError(
+          "Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."
+        );
+      }
+      function _toConsumableArray(arr) {
+        return (
+          _arrayWithoutHoles(arr) ||
+          _iterableToArray(arr) ||
+          _unsupportedIterableToArray(arr) ||
+          _nonIterableSpread()
+        );
+      }
+      function _unsupportedIterableToArray(o, minLen) {
+        if (!o) return;
+        if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+        var n = Object.prototype.toString.call(o).slice(8, -1);
+        if (n === "Object" && o.constructor) n = o.constructor.name;
+        if (n === "Map" || n === "Set") return Array.from(n);
+        if (
+          n === "Arguments" ||
+          /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)
+        )
+          return _arrayLikeToArray(o, minLen);
+      }
+      Object.defineProperty(exports, "__esModule", {
+        value: true
+      });
+      exports.getRoutingItems = getRoutingItems;
+      var _getMiddlewareRegex = __webpack_require__(3072);
+      var _routeMatcher = __webpack_require__(3156);
+      var _routeRegex = __webpack_require__(4903);
+      var _sortedRoutes = __webpack_require__(566);
+      var MIDDLEWARE_SUFFIX = "/_middleware";
+      function getRoutingItems(pages, middleware) {
+        // append the suffix so that `getSortedRoutes()` can handle middleware properly
+        var middlewarePages = middleware.map(function(m) {
+          return "".concat(m.page).concat(MIDDLEWARE_SUFFIX);
+        });
+        var middlewareMap = new Map(
+          middleware.map(function(m) {
+            return [m.page, m];
+          })
+        );
+        var sortedRoutes = (0, _sortedRoutes).getSortedRoutes(
+          _toConsumableArray(pages).concat(_toConsumableArray(middlewarePages))
+        );
+        return sortedRoutes.map(function(page) {
+          if (page.endsWith(MIDDLEWARE_SUFFIX)) {
+            var p = page.slice(0, -MIDDLEWARE_SUFFIX.length) || "/";
+            var ssr = middlewareMap.get(p).ssr;
+            return {
+              match: (0, _routeMatcher).getRouteMatcher(
+                (0, _getMiddlewareRegex).getMiddlewareRegex(p, !ssr)
+              ),
+              page: p,
+              ssr: ssr,
+              isMiddleware: true
+            };
+          } else {
+            return {
+              match: (0, _routeMatcher).getRouteMatcher(
+                (0, _routeRegex).getRouteRegex(page)
+              ),
+              page: page
+            };
+          }
+        });
+      } //# sourceMappingURL=routing-items.js.map
+
+      /***/
+    },
+
     /***/ 566: /***/ function(__unused_webpack_module, exports) {
       "use strict";
 
@@ -7311,6 +7498,7 @@
           this.slugName = null;
           this.restSlugName = null;
           this.optionalRestSlugName = null;
+          this.isMiddleware = false;
         }
         _createClass(UrlNode, [
           {
@@ -7345,6 +7533,9 @@
               if (this.optionalRestSlugName !== null) {
                 childrenPaths.splice(childrenPaths.indexOf("[[...]]"), 1);
               }
+              if (this.isMiddleware) {
+                childrenPaths.splice(childrenPaths.indexOf("_middleware"), 1);
+              }
               var routes = childrenPaths
                 .map(function(c) {
                   return _this.children
@@ -7381,10 +7572,21 @@
                 }
                 routes.unshift(r);
               }
-              if (this.restSlugName !== null) {
+              if (this.isMiddleware) {
                 var _routes1;
-                (_routes1 = routes).push.apply(
+                (_routes1 = routes).unshift.apply(
                   _routes1,
+                  _toConsumableArray(
+                    this.children
+                      .get("_middleware")
+                      ._smoosh("".concat(prefix, "_middleware/"))
+                  )
+                );
+              }
+              if (this.restSlugName !== null) {
+                var _routes2;
+                (_routes2 = routes).push.apply(
+                  _routes2,
                   _toConsumableArray(
                     this.children
                       .get("[...]")
@@ -7397,9 +7599,9 @@
                 );
               }
               if (this.optionalRestSlugName !== null) {
-                var _routes2;
-                (_routes2 = routes).push.apply(
-                  _routes2,
+                var _routes3;
+                (_routes3 = routes).push.apply(
+                  _routes3,
                   _toConsumableArray(
                     this.children
                       .get("[[...]]")
@@ -7540,6 +7742,11 @@
                   // nextSegment is overwritten to [] so that it can later be sorted specifically
                   nextSegment = "[]";
                 }
+              } else if (
+                nextSegment === "_middleware" &&
+                urlPaths.length === 1
+              ) {
+                this.isMiddleware = true;
               }
               // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode
               if (!this.children.has(nextSegment)) {
Diff for index.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-31e3f2e995c2cb43.js"
+      src="/_next/static/chunks/main-7f7e98d10f84bc97.js"
       defer=""
     ></script>
     <script
Diff for link.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-31e3f2e995c2cb43.js"
+      src="/_next/static/chunks/main-7f7e98d10f84bc97.js"
       defer=""
     ></script>
     <script
Diff for withRouter.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-31e3f2e995c2cb43.js"
+      src="/_next/static/chunks/main-7f7e98d10f84bc97.js"
       defer=""
     ></script>
     <script

Default Build with SWC (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
buildDuration 18.9s 19.1s ⚠️ +220ms
buildDurationCached 6.2s 6.2s -9ms
nodeModulesSize 467 MB 467 MB ⚠️ +17 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
/ failed reqs 0 0
/ total time (seconds) 2.995 3.032 ⚠️ +0.04
/ avg req/sec 834.66 824.63 ⚠️ -10.03
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.21 1.244 ⚠️ +0.03
/error-in-render avg req/sec 2066.41 2010.42 ⚠️ -55.99
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
925.HASH.js gzip 178 B 178 B
framework-HASH.js gzip 42.3 kB 42.3 kB
main-HASH.js gzip 28.2 kB 28.8 kB ⚠️ +537 B
webpack-HASH.js gzip 1.45 kB 1.45 kB
Overall change 72.1 kB 72.7 kB ⚠️ +537 B
Legacy Client Bundles (polyfills)
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
_app-HASH.js gzip 1.35 kB 1.35 kB
_error-HASH.js gzip 179 B 179 B
amp-HASH.js gzip 313 B 313 B
css-HASH.js gzip 324 B 324 B
dynamic-HASH.js gzip 2.56 kB 2.56 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 921 B 921 B
image-HASH.js gzip 5.59 kB 5.59 kB
index-HASH.js gzip 261 B 261 B
link-HASH.js gzip 2.33 kB 2.33 kB
routerDirect..HASH.js gzip 322 B 322 B
script-HASH.js gzip 388 B 388 B
withRouter-HASH.js gzip 317 B 317 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 15.3 kB 15.3 kB
Client Build Manifests
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
_buildManifest.js gzip 458 B 458 B
Overall change 458 B 458 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary v12.1.2 vercel/next.js refs/heads/canary Change
index.html gzip 532 B 532 B
link.html gzip 547 B 546 B -1 B
withRouter.html gzip 528 B 527 B -1 B
Overall change 1.61 kB 1.6 kB -2 B

Diffs

Diff for main-HASH.js
@@ -473,7 +473,7 @@
       var _routeAnnouncer = __webpack_require__(8483);
       var _router1 = __webpack_require__(880);
       var _isError = __webpack_require__(676);
-      var _vitals = __webpack_require__(7185);
+      var _vitals = __webpack_require__(4564);
       var _refresh = __webpack_require__(2129);
       var _imageConfigContext = __webpack_require__(8730);
       function asyncGeneratorStep(
@@ -624,7 +624,7 @@
         }
         return target;
       }
-      var version = "12.1.2";
+      var version = "12.1.3-canary.2";
       exports.version = version;
       var router;
       exports.router = router;
@@ -3197,7 +3197,7 @@
       /***/
     },
 
-    /***/ 7185: /***/ function(
+    /***/ 4564: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -4351,8 +4351,8 @@
       var _resolveRewrites = _interopRequireDefault1(__webpack_require__(2431));
       var _routeMatcher = __webpack_require__(3156);
       var _routeRegex = __webpack_require__(4903);
-      var _getMiddlewareRegex = __webpack_require__(3072);
       var _formatUrl = __webpack_require__(7795);
+      var _routingItems = __webpack_require__(7185);
       function _interopRequireDefault1(obj) {
         return obj && obj.__esModule
           ? obj
@@ -6378,8 +6378,16 @@
                 _runtimeJs.default.mark(function _callee() {
                   var asPathname,
                     cleanedAs,
-                    fns,
+                    middlewareList,
+                    middleware,
+                    routingItems,
                     requiresPreflight,
+                    _iteratorNormalCompletion,
+                    _didIteratorError,
+                    _iteratorError,
+                    _iterator,
+                    _step,
+                    item,
                     preflight,
                     parsed,
                     fsPathname,
@@ -6404,58 +6412,116 @@
                             _ctx.next = 4;
                             return _this.pageLoader.getMiddlewareList();
                           case 4:
-                            fns = _ctx.sent;
-                            requiresPreflight = fns.some(function(param) {
+                            middlewareList = _ctx.sent;
+                            middleware = middlewareList.map(function(param) {
                               var _param = _slicedToArray(param, 2),
-                                middleware = _param[0],
-                                isSSR = _param[1];
-                              return (0, _routeMatcher).getRouteMatcher(
-                                (0, _getMiddlewareRegex).getMiddlewareRegex(
-                                  middleware,
-                                  !isSSR
-                                )
-                              )(cleanedAs);
+                                page = _param[0],
+                                ssr = _param[1];
+                              return {
+                                page: page,
+                                ssr: ssr
+                              };
                             });
+                            routingItems = (0, _routingItems).getRoutingItems(
+                              options.pages,
+                              middleware
+                            );
+                            requiresPreflight = false;
+                            (_iteratorNormalCompletion = true),
+                              (_didIteratorError = false),
+                              (_iteratorError = undefined);
+                            _ctx.prev = 9;
+                            _iterator = routingItems[Symbol.iterator]();
+                          case 11:
+                            if (
+                              (_iteratorNormalCompletion = (_step = _iterator.next())
+                                .done)
+                            ) {
+                              _ctx.next = 19;
+                              break;
+                            }
+                            item = _step.value;
+                            if (!item.match(cleanedAs)) {
+                              _ctx.next = 16;
+                              break;
+                            }
+                            if (item.isMiddleware) {
+                              requiresPreflight = true;
+                            }
+                            return _ctx.abrupt("break", 19);
+                          case 16:
+                            _iteratorNormalCompletion = true;
+                            _ctx.next = 11;
+                            break;
+                          case 19:
+                            _ctx.next = 25;
+                            break;
+                          case 21:
+                            _ctx.prev = 21;
+                            _ctx.t0 = _ctx["catch"](9);
+                            _didIteratorError = true;
+                            _iteratorError = _ctx.t0;
+                          case 25:
+                            _ctx.prev = 25;
+                            _ctx.prev = 26;
+                            if (
+                              !_iteratorNormalCompletion &&
+                              _iterator.return != null
+                            ) {
+                              _iterator.return();
+                            }
+                          case 28:
+                            _ctx.prev = 28;
+                            if (!_didIteratorError) {
+                              _ctx.next = 31;
+                              break;
+                            }
+                            throw _iteratorError;
+                          case 31:
+                            return _ctx.finish(28);
+                          case 32:
+                            return _ctx.finish(25);
+                          case 33:
                             if (requiresPreflight) {
-                              _ctx.next = 8;
+                              _ctx.next = 35;
                               break;
                             }
                             return _ctx.abrupt("return", {
                               type: "next"
                             });
-                          case 8:
-                            _ctx.prev = 9;
-                            _ctx.next = 12;
+                          case 35:
+                            _ctx.prev = 36;
+                            _ctx.next = 39;
                             return _this._getPreflightData({
                               preflightHref: options.as,
                               shouldCache: options.cache,
                               isPreview: options.isPreview
                             });
-                          case 12:
+                          case 39:
                             preflight = _ctx.sent;
-                            _ctx.next = 18;
+                            _ctx.next = 45;
                             break;
-                          case 15:
-                            _ctx.prev = 15;
-                            _ctx.t0 = _ctx["catch"](9);
+                          case 42:
+                            _ctx.prev = 42;
+                            _ctx.t1 = _ctx["catch"](36);
                             return _ctx.abrupt("return", {
                               type: "redirect",
                               destination: options.as
                             });
-                          case 18:
+                          case 45:
                             if (!preflight.rewrite) {
-                              _ctx.next = 27;
+                              _ctx.next = 54;
                               break;
                             }
                             if (preflight.rewrite.startsWith("/")) {
-                              _ctx.next = 21;
+                              _ctx.next = 48;
                               break;
                             }
                             return _ctx.abrupt("return", {
                               type: "redirect",
                               destination: options.as
                             });
-                          case 21:
+                          case 48:
                             parsed = (0, _parseRelativeUrl).parseRelativeUrl(
                               (0, _normalizeLocalePath).normalizeLocalePath(
                                 hasBasePath(preflight.rewrite)
@@ -6490,13 +6556,13 @@
                               matchedPage: matchedPage,
                               resolvedHref: resolvedHref
                             });
-                          case 27:
+                          case 54:
                             if (!preflight.redirect) {
-                              _ctx.next = 33;
+                              _ctx.next = 60;
                               break;
                             }
                             if (!preflight.redirect.startsWith("/")) {
-                              _ctx.next = 32;
+                              _ctx.next = 59;
                               break;
                             }
                             cleanRedirect = (0,
@@ -6520,31 +6586,35 @@
                               newUrl: newUrl,
                               newAs: newAs
                             });
-                          case 32:
+                          case 59:
                             return _ctx.abrupt("return", {
                               type: "redirect",
                               destination: preflight.redirect
                             });
-                          case 33:
+                          case 60:
                             if (!(preflight.refresh && !preflight.ssr)) {
-                              _ctx.next = 35;
+                              _ctx.next = 62;
                               break;
                             }
                             return _ctx.abrupt("return", {
                               type: "refresh"
                             });
-                          case 35:
+                          case 62:
                             return _ctx.abrupt("return", {
                               type: "next"
                             });
-                          case 36:
+                          case 63:
                           case "end":
                             return _ctx.stop();
                         }
                     },
                     _callee,
                     null,
-                    [[9, 15]]
+                    [
+                      [9, 21, 25, 33],
+                      [26, , 28, 32],
+                      [36, 42]
+                    ]
                   );
                 })
               )();
@@ -6816,11 +6886,17 @@
       });
       exports.getMiddlewareRegex = getMiddlewareRegex;
       var _routeRegex = __webpack_require__(4903);
+      // Identify ^/[param]/ in route string
+      var FIRST_SEGMENT_DYNAMIC = /^\/\[[^/]+?\](?=\/|$)/;
+      var NOT_API_ROUTE = "(?!/api(?:/|$))";
       function getMiddlewareRegex(normalizedRoute) {
         var catchAll =
           arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
         var result = (0, _routeRegex).getParametrizedRoute(normalizedRoute);
-        var catchAllRegex = catchAll ? "(?!_next).*" : "";
+        var notApiRegex = FIRST_SEGMENT_DYNAMIC.test(normalizedRoute)
+          ? NOT_API_ROUTE
+          : "";
+        var catchAllRegex = catchAll ? "(?!_next($|/)).*" : "";
         var catchAllGroupedRegex = catchAll ? "(?:(/.*)?)" : "";
         if ("routeKeys" in result) {
           if (result.parameterizedRoute === "/") {
@@ -6834,10 +6910,12 @@
           return {
             groups: result.groups,
             namedRegex: "^"
+              .concat(notApiRegex)
               .concat(result.namedParameterizedRoute)
               .concat(catchAllGroupedRegex, "$"),
             re: new RegExp(
               "^"
+                .concat(notApiRegex)
                 .concat(result.parameterizedRoute)
                 .concat(catchAllGroupedRegex, "$")
             ),
@@ -6854,6 +6932,7 @@
           groups: {},
           re: new RegExp(
             "^"
+              .concat(notApiRegex)
               .concat(result.parameterizedRoute)
               .concat(catchAllGroupedRegex, "$")
           )
@@ -6891,6 +6970,18 @@
           return _routeRegex.getRouteRegex;
         }
       });
+      Object.defineProperty(exports, "getRoutingItems", {
+        enumerable: true,
+        get: function get() {
+          return _routingItems.getRoutingItems;
+        }
+      });
+      Object.defineProperty(exports, "RoutingItem", {
+        enumerable: true,
+        get: function get() {
+          return _routingItems.RoutingItem;
+        }
+      });
       Object.defineProperty(exports, "getSortedRoutes", {
         enumerable: true,
         get: function get() {
@@ -6906,6 +6997,7 @@
       var _getMiddlewareRegex = __webpack_require__(3072);
       var _routeMatcher = __webpack_require__(3156);
       var _routeRegex = __webpack_require__(4903);
+      var _routingItems = __webpack_require__(7185);
       var _sortedRoutes = __webpack_require__(566);
       var _isDynamic = __webpack_require__(6238); //# sourceMappingURL=index.js.map
 
@@ -7237,6 +7329,101 @@
       /***/
     },
 
+    /***/ 7185: /***/ function(
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) {
+      "use strict";
+
+      function _arrayLikeToArray(arr, len) {
+        if (len == null || len > arr.length) len = arr.length;
+        for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+        return arr2;
+      }
+      function _arrayWithoutHoles(arr) {
+        if (Array.isArray(arr)) return _arrayLikeToArray(arr);
+      }
+      function _iterableToArray(iter) {
+        if (
+          (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null) ||
+          iter["@@iterator"] != null
+        )
+          return Array.from(iter);
+      }
+      function _nonIterableSpread() {
+        throw new TypeError(
+          "Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."
+        );
+      }
+      function _toConsumableArray(arr) {
+        return (
+          _arrayWithoutHoles(arr) ||
+          _iterableToArray(arr) ||
+          _unsupportedIterableToArray(arr) ||
+          _nonIterableSpread()
+        );
+      }
+      function _unsupportedIterableToArray(o, minLen) {
+        if (!o) return;
+        if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+        var n = Object.prototype.toString.call(o).slice(8, -1);
+        if (n === "Object" && o.constructor) n = o.constructor.name;
+        if (n === "Map" || n === "Set") return Array.from(n);
+        if (
+          n === "Arguments" ||
+          /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)
+        )
+          return _arrayLikeToArray(o, minLen);
+      }
+      Object.defineProperty(exports, "__esModule", {
+        value: true
+      });
+      exports.getRoutingItems = getRoutingItems;
+      var _getMiddlewareRegex = __webpack_require__(3072);
+      var _routeMatcher = __webpack_require__(3156);
+      var _routeRegex = __webpack_require__(4903);
+      var _sortedRoutes = __webpack_require__(566);
+      var MIDDLEWARE_SUFFIX = "/_middleware";
+      function getRoutingItems(pages, middleware) {
+        // append the suffix so that `getSortedRoutes()` can handle middleware properly
+        var middlewarePages = middleware.map(function(m) {
+          return "".concat(m.page).concat(MIDDLEWARE_SUFFIX);
+        });
+        var middlewareMap = new Map(
+          middleware.map(function(m) {
+            return [m.page, m];
+          })
+        );
+        var sortedRoutes = (0, _sortedRoutes).getSortedRoutes(
+          _toConsumableArray(pages).concat(_toConsumableArray(middlewarePages))
+        );
+        return sortedRoutes.map(function(page) {
+          if (page.endsWith(MIDDLEWARE_SUFFIX)) {
+            var p = page.slice(0, -MIDDLEWARE_SUFFIX.length) || "/";
+            var ssr = middlewareMap.get(p).ssr;
+            return {
+              match: (0, _routeMatcher).getRouteMatcher(
+                (0, _getMiddlewareRegex).getMiddlewareRegex(p, !ssr)
+              ),
+              page: p,
+              ssr: ssr,
+              isMiddleware: true
+            };
+          } else {
+            return {
+              match: (0, _routeMatcher).getRouteMatcher(
+                (0, _routeRegex).getRouteRegex(page)
+              ),
+              page: page
+            };
+          }
+        });
+      } //# sourceMappingURL=routing-items.js.map
+
+      /***/
+    },
+
     /***/ 566: /***/ function(__unused_webpack_module, exports) {
       "use strict";
 
@@ -7311,6 +7498,7 @@
           this.slugName = null;
           this.restSlugName = null;
           this.optionalRestSlugName = null;
+          this.isMiddleware = false;
         }
         _createClass(UrlNode, [
           {
@@ -7345,6 +7533,9 @@
               if (this.optionalRestSlugName !== null) {
                 childrenPaths.splice(childrenPaths.indexOf("[[...]]"), 1);
               }
+              if (this.isMiddleware) {
+                childrenPaths.splice(childrenPaths.indexOf("_middleware"), 1);
+              }
               var routes = childrenPaths
                 .map(function(c) {
                   return _this.children
@@ -7381,10 +7572,21 @@
                 }
                 routes.unshift(r);
               }
-              if (this.restSlugName !== null) {
+              if (this.isMiddleware) {
                 var _routes1;
-                (_routes1 = routes).push.apply(
+                (_routes1 = routes).unshift.apply(
                   _routes1,
+                  _toConsumableArray(
+                    this.children
+                      .get("_middleware")
+                      ._smoosh("".concat(prefix, "_middleware/"))
+                  )
+                );
+              }
+              if (this.restSlugName !== null) {
+                var _routes2;
+                (_routes2 = routes).push.apply(
+                  _routes2,
                   _toConsumableArray(
                     this.children
                       .get("[...]")
@@ -7397,9 +7599,9 @@
                 );
               }
               if (this.optionalRestSlugName !== null) {
-                var _routes2;
-                (_routes2 = routes).push.apply(
-                  _routes2,
+                var _routes3;
+                (_routes3 = routes).push.apply(
+                  _routes3,
                   _toConsumableArray(
                     this.children
                       .get("[[...]]")
@@ -7540,6 +7742,11 @@
                   // nextSegment is overwritten to [] so that it can later be sorted specifically
                   nextSegment = "[]";
                 }
+              } else if (
+                nextSegment === "_middleware" &&
+                urlPaths.length === 1
+              ) {
+                this.isMiddleware = true;
               }
               // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode
               if (!this.children.has(nextSegment)) {
Diff for index.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-31e3f2e995c2cb43.js"
+      src="/_next/static/chunks/main-7f7e98d10f84bc97.js"
       defer=""
     ></script>
     <script
Diff for link.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-31e3f2e995c2cb43.js"
+      src="/_next/static/chunks/main-7f7e98d10f84bc97.js"
       defer=""
     ></script>
     <script
Diff for withRouter.html
@@ -19,7 +19,7 @@
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-31e3f2e995c2cb43.js"
+      src="/_next/static/chunks/main-7f7e98d10f84bc97.js"
       defer=""
     ></script>
     <script

Please sign in to comment.