-
Notifications
You must be signed in to change notification settings - Fork 29.8k
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
Please un-deprecate url.resolve #37492
Comments
The challenge is not that URL does not support relative URLs, it's that it is designed to work for more than just HTTP URLs and needs to know the protocol to properly resolve the URL (since different URL protocol schemes use different resolve and serialization algorithms). You can achieve what you're looking for by appending a prefix to the const { pathname, search } = new URL('?foo=bar', 'http://example/bar');
console.log(pathname + search); // Outputs: /bar?foo=bar |
Interesting, that makes sense! It's just tricky to handle. I work a lot on HATEOAS-style systems, where people just generally want to use relative urls. What I need is some way for the origin to be preserved if it was supplied in any of the 2 components, but removed if both were relative. I could solve this by supplying a domain that will never be registered, but it's a bit clumsy. I do appreciate the reasoning here though, so feel free to close, |
The
The way to handle this is to use two resolves: function resolve(path, base) {
const baseUrl = new URL(base, 'http://example.com');
const { pathname, search } = new URL(path, baseUrl);
return pathname + search;
}
resolve('?foo=bar', '/bar');
resolve('?foo=bar', 'https://example.org/bar'); |
PR to add the suggested replacement function: #37501 |
Fixes: #37492 PR-URL: #37501 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Darshan Sen <[email protected]>
Fixes: #37492 PR-URL: #37501 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Darshan Sen <[email protected]>
What steps will reproduce the bug?
We use
url.resolve
a LOT. It's a great function that also inspired me to write a PHP version with 8 million downloads =)I recently discovered that
url.resolve()
was marked as deprecated, and that users should useURL
instead.Aside from the fact that WhatWG URL is not a real RFC3986 uri, there's also a a very simple feature missing. We use
url.resolve
all the time to do things like this:The URL object does not let us work with relative urls:
The text was updated successfully, but these errors were encountered: