Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor parseRelativeUrl #17747

Closed
wants to merge 1 commit into from
Closed

Conversation

HaNdTriX
Copy link
Contributor

@HaNdTriX HaNdTriX commented Oct 9, 2020

Status: draft

Changes

  • removes unused base param
  • allow other schemes than http: and https:
  • removes unnecessary new URL parse roundtrips
  • makes parseRelativeUrl a pure function

Related

closes #17216
fixes #16456 #16650

Todo

  • add tests

@ijjk ijjk added the type: next label Oct 9, 2020
@ijjk
Copy link
Member

ijjk commented Oct 9, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall decrease ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
buildDuration 12.8s 12.9s ⚠️ +101ms
nodeModulesSize 63.4 MB 63.4 MB -1.85 kB
Page Load Tests Overall increase ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
/ failed reqs 0 0
/ total time (seconds) 2.403 2.367 -0.04
/ avg req/sec 1040.58 1056.07 +15.49
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.393 1.291 -0.1
/error-in-render avg req/sec 1794.69 1935.92 +141.23
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
677f882d2ed8..9b19.js gzip 11.1 kB 11 kB -75 B
framework.HASH.js gzip 39 kB 39 kB
main-ef5fcfe..d66c.js gzip 7.24 kB 7.24 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 57.9 kB -75 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
677f882d2ed8..dule.js gzip 6.9 kB 6.83 kB -74 B
framework.HA..dule.js gzip 39 kB 39 kB
main-1c7f28c..dule.js gzip 6.29 kB 6.29 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.8 kB -74 B
Legacy Client Bundles (polyfills)
vercel/next.js canary HaNdTriX/next.js router-urls Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary HaNdTriX/next.js router-urls Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary HaNdTriX/next.js router-urls Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary HaNdTriX/next.js router-urls Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Rendered Page Sizes Overall increase ⚠️
vercel/next.js canary HaNdTriX/next.js router-urls Change
index.html gzip 1 kB 1 kB -1 B
link.html gzip 1.01 kB 1.01 kB
withRouter.html gzip 995 B 997 B ⚠️ +2 B
Overall change 3.01 kB 3.01 kB ⚠️ +1 B

Diffs

Diff for 677f882d2ed8..4eeebf399.js
@@ -2588,45 +2588,27 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       exports.__esModule = true;
       exports.parseRelativeUrl = parseRelativeUrl;
 
-      var _utils = __webpack_require__("g/15");
-
       var _querystring = __webpack_require__("3WeD");
-
-      var DUMMY_BASE = new URL(
-        false ? undefined : (0, _utils.getLocationOrigin)()
-      );
       /**
-       * Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative
-       * (e.g. `./hello`) then at least base must be.
-       * Absolute urls are rejected with one exception, in the browser, absolute urls that are on
-       * the current origin will be parsed as relative
+       * Parses path-relative urls (e.g. `/hello/world?foo=bar`).
        */
 
-      function parseRelativeUrl(url, base) {
-        var resolvedBase = base ? new URL(base, DUMMY_BASE) : DUMMY_BASE;
+      function parseRelativeUrl(url) {
+        var fakeBase = "http://n";
 
-        var _URL = new URL(url, resolvedBase),
+        var _URL = new URL(url, fakeBase),
           pathname = _URL.pathname,
           searchParams = _URL.searchParams,
           search = _URL.search,
           hash = _URL.hash,
-          href = _URL.href,
-          origin = _URL.origin,
-          protocol = _URL.protocol;
-
-        if (
-          origin !== DUMMY_BASE.origin ||
-          (protocol !== "http:" && protocol !== "https:")
-        ) {
-          throw new Error("invariant: invalid relative URL");
-        }
+          href = _URL.href;
 
         return {
           pathname: pathname,
           query: (0, _querystring.searchParamsToUrlQuery)(searchParams),
           search: search,
           hash: hash,
-          href: href.slice(DUMMY_BASE.origin.length)
+          href: href.slice(fakeBase.length)
         };
       }
Diff for 677f882d2ed8..20.module.js
@@ -1850,45 +1850,23 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       exports.__esModule = true;
       exports.parseRelativeUrl = parseRelativeUrl;
 
-      var _utils = __webpack_require__("g/15");
-
       var _querystring = __webpack_require__("3WeD");
-
-      var DUMMY_BASE = new URL(
-        false ? undefined : (0, _utils.getLocationOrigin)()
-      );
       /**
-       * Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative
-       * (e.g. `./hello`) then at least base must be.
-       * Absolute urls are rejected with one exception, in the browser, absolute urls that are on
-       * the current origin will be parsed as relative
+       * Parses path-relative urls (e.g. `/hello/world?foo=bar`).
        */
 
-      function parseRelativeUrl(url, base) {
-        var resolvedBase = base ? new URL(base, DUMMY_BASE) : DUMMY_BASE;
-        var {
-          pathname,
-          searchParams,
-          search,
-          hash,
-          href,
-          origin,
-          protocol
-        } = new URL(url, resolvedBase);
-
-        if (
-          origin !== DUMMY_BASE.origin ||
-          (protocol !== "http:" && protocol !== "https:")
-        ) {
-          throw new Error("invariant: invalid relative URL");
-        }
-
+      function parseRelativeUrl(url) {
+        var fakeBase = "http://n";
+        var { pathname, searchParams, search, hash, href } = new URL(
+          url,
+          fakeBase
+        );
         return {
           pathname,
           query: (0, _querystring.searchParamsToUrlQuery)(searchParams),
           search,
           hash,
-          href: href.slice(DUMMY_BASE.origin.length)
+          href: href.slice(fakeBase.length)
         };
       }
Diff for index.html
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d950dcaaa011f2b8e120.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.f00600ab865153a28fd7.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -121,13 +121,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5472d08d2594eeebf399.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.14c522d050c4f37de476.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d950dcaaa011f2b8e120.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.f00600ab865153a28fd7.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for link.html
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d950dcaaa011f2b8e120.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.f00600ab865153a28fd7.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -126,13 +126,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5472d08d2594eeebf399.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.14c522d050c4f37de476.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d950dcaaa011f2b8e120.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.f00600ab865153a28fd7.module.js"
       async=""
       crossorigin="anonymous"
       type="module"
Diff for withRouter.html
@@ -24,7 +24,7 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d950dcaaa011f2b8e120.module.js"
+      href="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.f00600ab865153a28fd7.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -121,13 +121,13 @@
       type="module"
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.5472d08d2594eeebf399.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.14c522d050c4f37de476.js"
       async=""
       crossorigin="anonymous"
       nomodule=""
     ></script>
     <script
-      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.d950dcaaa011f2b8e120.module.js"
+      src="/_next/static/chunks/677f882d2ed86fa3467b8979053c1a4c3f8bc4df.f00600ab865153a28fd7.module.js"
       async=""
       crossorigin="anonymous"
       type="module"

Serverless Mode (Decrease detected ✓)
General Overall decrease ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
buildDuration 14.4s 14.6s ⚠️ +140ms
nodeModulesSize 63.4 MB 63.4 MB -1.85 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
677f882d2ed8..9b19.js gzip 11.1 kB N/A N/A
framework.HASH.js gzip 39 kB 39 kB
main-ef5fcfe..d66c.js gzip 7.24 kB 7.24 kB
webpack-e067..f178.js gzip 751 B 751 B
677f882d2ed8..3431.js gzip N/A 11 kB N/A
Overall change 58 kB 57.9 kB -75 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
677f882d2ed8..dule.js gzip 6.9 kB N/A N/A
framework.HA..dule.js gzip 39 kB 39 kB
main-1c7f28c..dule.js gzip 6.29 kB 6.29 kB
webpack-07c5..dule.js gzip 751 B 751 B
677f882d2ed8..dule.js gzip N/A 6.83 kB N/A
Overall change 52.9 kB 52.8 kB -74 B
Legacy Client Bundles (polyfills)
vercel/next.js canary HaNdTriX/next.js router-urls Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary HaNdTriX/next.js router-urls Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary HaNdTriX/next.js router-urls Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary HaNdTriX/next.js router-urls Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Serverless bundles Overall decrease ✓
vercel/next.js canary HaNdTriX/next.js router-urls Change
_error.js 1.05 MB 1.05 MB -548 B
404.html 4.34 kB 4.34 kB
hooks.html 3.92 kB 3.92 kB
index.js 1.05 MB 1.05 MB -548 B
link.js 1.1 MB 1.1 MB -548 B
routerDirect.js 1.09 MB 1.09 MB -548 B
withRouter.js 1.09 MB 1.09 MB -548 B
Overall change 5.41 MB 5.4 MB -2.74 kB
Commit: 8c4fbe1

@momakes2
Copy link

Thanks @HaNdTriX

@vercel vercel locked as resolved and limited conversation to collaborators Jan 29, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

next 9.5.2 Router not working on ionic webview
4 participants