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
Support passing a relative string to pushState/replaceState #58438
Support passing a relative string to pushState/replaceState #58438
Conversation
Current dependencies on/for this PR: This stack of pull requests is managed by Graphite. |
3d18e9c
to
be56b97
Compare
@@ -207,13 +207,13 @@ function useChangeByServerResponse( | |||
function useNavigate(dispatch: React.Dispatch<ReducerActions>): RouterNavigate { | |||
return useCallback( | |||
(href, navigateType, forceOptimisticNavigation, shouldScroll) => { | |||
const url = new URL(addBasePath(href), location.href) | |||
const url = new URL(addBasePath(href), window.location.href) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For consistency with other cases.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could location.*
(and conversely, history.*
too) be used everywhere? Surely repeating window increases the bundle size (albeit it probably compresses better).
Stats from current PRDefault BuildGeneral Overall increase
|
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
buildDuration | 10.8s | 10.8s | N/A |
buildDurationCached | 6.3s | 6.8s | |
nodeModulesSize | 199 MB | 199 MB | |
nextStartRea..uration (ms) | 408ms | 403ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
199-HASH.js gzip | 28.7 kB | 28.7 kB | N/A |
3f784ff6-HASH.js gzip | 53.3 kB | 53.3 kB | N/A |
494.HASH.js gzip | 180 B | 181 B | N/A |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 242 B | 239 B | N/A |
main-HASH.js gzip | 31.7 kB | 31.8 kB | N/A |
webpack-HASH.js gzip | 1.7 kB | 1.7 kB | ✓ |
Overall change | 46.9 kB | 46.9 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
_app-HASH.js gzip | 194 B | 195 B | N/A |
_error-HASH.js gzip | 182 B | 181 B | N/A |
amp-HASH.js gzip | 504 B | 506 B | N/A |
css-HASH.js gzip | 322 B | 323 B | N/A |
dynamic-HASH.js gzip | 2.5 kB | 2.5 kB | ✓ |
edge-ssr-HASH.js gzip | 253 B | 255 B | N/A |
head-HASH.js gzip | 348 B | 347 B | N/A |
hooks-HASH.js gzip | 369 B | 368 B | N/A |
image-HASH.js gzip | 4.3 kB | 4.3 kB | N/A |
index-HASH.js gzip | 256 B | 256 B | ✓ |
link-HASH.js gzip | 2.63 kB | 2.63 kB | N/A |
routerDirect..HASH.js gzip | 311 B | 311 B | ✓ |
script-HASH.js gzip | 384 B | 383 B | N/A |
withRouter-HASH.js gzip | 307 B | 308 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 3.17 kB | 3.17 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
_buildManifest.js gzip | 484 B | 483 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
index.html gzip | 528 B | 528 B | ✓ |
link.html gzip | 539 B | 541 B | N/A |
withRouter.html gzip | 524 B | 523 B | N/A |
Overall change | 528 B | 528 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
edge-ssr.js gzip | 92.6 kB | 92.6 kB | N/A |
page.js gzip | 145 kB | 145 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 626 B | 625 B | N/A |
middleware-r..fest.js gzip | 150 B | 151 B | N/A |
middleware.js gzip | 24.8 kB | 24.8 kB | N/A |
edge-runtime..pack.js gzip | 1.92 kB | 1.92 kB | ✓ |
Overall change | 1.92 kB | 1.92 kB | ✓ |
Next Runtimes
vercel/next.js canary | vercel/next.js 11-14-Support_passing_a_relative_string_to_pushState/replaceState | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 167 kB | 167 kB | ✓ |
app-page-exp..prod.js gzip | 93.3 kB | 93.3 kB | ✓ |
app-page-tur..prod.js gzip | 94.1 kB | 94.1 kB | ✓ |
app-page-tur..prod.js gzip | 88.7 kB | 88.7 kB | ✓ |
app-page.run...dev.js gzip | 137 kB | 137 kB | ✓ |
app-page.run..prod.js gzip | 88 kB | 88 kB | ✓ |
app-route-ex...dev.js gzip | 23.8 kB | 23.8 kB | ✓ |
app-route-ex..prod.js gzip | 16.4 kB | 16.4 kB | ✓ |
app-route-tu..prod.js gzip | 16.4 kB | 16.4 kB | ✓ |
app-route-tu..prod.js gzip | 16 kB | 16 kB | ✓ |
app-route.ru...dev.js gzip | 23.2 kB | 23.2 kB | ✓ |
app-route.ru..prod.js gzip | 16 kB | 16 kB | ✓ |
pages-api-tu..prod.js gzip | 9.37 kB | 9.37 kB | ✓ |
pages-api.ru...dev.js gzip | 9.64 kB | 9.64 kB | ✓ |
pages-api.ru..prod.js gzip | 9.37 kB | 9.37 kB | ✓ |
pages-turbo...prod.js gzip | 21.8 kB | 21.8 kB | ✓ |
pages.runtim...dev.js gzip | 22.5 kB | 22.5 kB | ✓ |
pages.runtim..prod.js gzip | 21.8 kB | 21.8 kB | ✓ |
server.runti..prod.js gzip | 49 kB | 49 kB | ✓ |
Overall change | 924 kB | 924 kB | ✓ |
Diff details
Diff for page.js
Diff too large to display
Diff for 199-HASH.js
Diff too large to display
Tests Passed |
…-Support_passing_a_relative_string_to_pushState/replaceState
b1a78f1
to
043c6d3
Compare
…_pushState/replaceState
test/e2e/app-dir/shallow-routing/app/(shallow)/pushstate-string-url/page.tsx
Outdated
Show resolved
Hide resolved
@timneutkens while we're here, can we fix the #58335 (comment) as well? |
…_pushState/replaceState
a4c3903
to
ed77f5e
Compare
…_pushState/replaceState
…_pushState/replaceState
Co-authored-by: Tim Neutkens <tim@timneutkens.nl>
FYI, looks like this will resolve #56636. |
Follow-up to #58335.
Fixes #48110 (reply in thread)
As reported in the discussion passing a origin-relative string didn't work as
new URL
will throw an error. This ensures theorigin
parameter is provided tonew URL
.Added tests for the string behavior.