-
-
Notifications
You must be signed in to change notification settings - Fork 10.3k
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
[Bug]: useResolvedPath breaking. #11052
Comments
I'm experiencing the same with Link and useNavigate. |
+1. In my project I call {
"hash": "",
"pathname": "/*",
"search": ""
} Since v6.19.0 it results in {
"hash": "",
"pathname": "/some/path/*",
"search": ""
} Also, somehow, I haven't experienced any issues in my other project with fewer and simpler route structure. I guess #10983 is the primary suspect for the break. |
Also, IMHO, alongside with #10579 this is the second critical, and easy to miss when upgrading dependencies, regression within ~5 months in what is supposed to be a quite straightforward and stable library. Not good. |
This is due to a bug fix that was included in Relative path resolution without any leading So if you are on a path Previously in splat routes, this was broken and was relative to the parent (if the splat was alone in the route path - I put together small code sandbox to show the resulting consistency with the bug fix - https://codesandbox.io/p/sandbox/spring-resonance-kcgn6p?file=%2Fsrc%2Findex.js. If you set the Another case that this shows itself (the original bug that was filed in Remix) is when using We apologize if your applications were relying on this buggy behavior. We take the stability of React Router seriously and did our best to call attention to this bug fix in the If you are using a splat route hierarchy such as let location = useLocation();
let params = useParams;
let newPath = location.pathname.replace(new RegExp(`${params["*"]}$`), 'new/path') |
Please reopen this. You've published a breaking change in a minor version.
Closing this issue proves the contrary. You can't ignore the thousands of existing apps that your change have broken. |
I can't remember the details of it, so I'll need to dig in, but I'm pretty sure we have always needed to handle |
Yep, Remix app broken in prod 🙋. |
The latest version of react-router-dom (6.20.0) introduce a breaking change. See: remix-run/react-router#11052
The latest version of react-router-dom (6.20.0) introduce a breaking change. See: remix-run/react-router#11052
The latest version of react-router-dom (6.20.0) introduce a breaking change. See: remix-run/react-router#11052
tl;dr; We're going to revert this fix and put it behind a future flag. @mjackson, @ryanflorence and I just talked through this in detail and we do think that this is buggy behavior in Along with the future flag PR (which I'll link to in this issue when ready), we'll include examples of where the original behavior is incorrect and how you can update your apps to work with the new behavior when you choose to opt-into the future flag.
Please keep in mind that we can't have any insight into how many folks were impacted by this fix at the time we closed this issue. Every bug fix is potentially a breaking change for somebody. As soon as we realized that this fix impacted a bunch of existing applications, we let y'all know we'd revisit the fix. So I would reiterate that we do take the stability of React Router seriously. That does not mean that there won't ever be bugs 🙂 |
This fix has been reverted in v6.20.1 |
[![Mend Renovate logo banner](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [react-router-dom](https://togithub.com/remix-run/react-router) | [`6.20.0` -> `6.20.1`](https://renovatebot.com/diffs/npm/react-router-dom/6.20.0/6.20.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.20.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.20.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>remix-run/react-router (react-router-dom)</summary> ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/ariakit/ariakit). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy41OS44IiwidXBkYXRlZEluVmVyIjoiMzcuNTkuOCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Thanks a lot guys, you made the right decision. Apologies for the alarming tone, and let me take back my comment: you do care about your user base. Kudos! |
@brophdawg11 I was hit by this and was just thinking about how I came to rely on this "buggy behavior". I originally used Reach Router, as recommended by the React Router team at the time (before React Router v6). I used "Embedded Routers" as per the example on this page: https://reach.tech/router/nesting. I then migrated to React Router as recommended by the team. Is my understanding correct that the Reach Router "Embedded Routers" example is now considered to have relied on buggy behavior? Just trying to understand what the future direction might be and how it might impact my app. Thanks for your time. |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | Type | Update | |---|---|---|---|---|---|---|---| | [@swc/core](https://swc.rs) ([source](https://togithub.com/swc-project/swc)) | [`1.3.99` -> `1.3.100`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.3.99/1.3.100) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.3.100?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.3.100?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.3.99/1.3.100?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.3.99/1.3.100?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@testing-library/jest-dom](https://togithub.com/testing-library/jest-dom) | [`6.1.4` -> `6.1.5`](https://renovatebot.com/diffs/npm/@testing-library%2fjest-dom/6.1.4/6.1.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@testing-library%2fjest-dom/6.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@testing-library%2fjest-dom/6.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@testing-library%2fjest-dom/6.1.4/6.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@testing-library%2fjest-dom/6.1.4/6.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@types/react](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`18.2.39` -> `18.2.41`](https://renovatebot.com/diffs/npm/@types%2freact/18.2.39/18.2.41) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.2.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.2.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.2.39/18.2.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.2.39/18.2.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [eslint](https://eslint.org) ([source](https://togithub.com/eslint/eslint)) | [`8.54.0` -> `8.55.0`](https://renovatebot.com/diffs/npm/eslint/8.54.0/8.55.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/8.54.0/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/8.54.0/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [eslint-config-prettier](https://togithub.com/prettier/eslint-config-prettier) | [`9.0.0` -> `9.1.0`](https://renovatebot.com/diffs/npm/eslint-config-prettier/9.0.0/9.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-config-prettier/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-config-prettier/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-config-prettier/9.0.0/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-config-prettier/9.0.0/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [github.com/deckarep/golang-set/v2](https://togithub.com/deckarep/golang-set) | `v2.4.0` -> `v2.5.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fdeckarep%2fgolang-set%2fv2/v2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fdeckarep%2fgolang-set%2fv2/v2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fdeckarep%2fgolang-set%2fv2/v2.4.0/v2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fdeckarep%2fgolang-set%2fv2/v2.4.0/v2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [github.com/swaggest/jsonschema-go](https://togithub.com/swaggest/jsonschema-go) | `v0.3.62` -> `v0.3.64` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fswaggest%2fjsonschema-go/v0.3.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fswaggest%2fjsonschema-go/v0.3.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fswaggest%2fjsonschema-go/v0.3.62/v0.3.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fswaggest%2fjsonschema-go/v0.3.62/v0.3.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | patch | | [lint-staged](https://togithub.com/okonet/lint-staged) | [`15.1.0` -> `15.2.0`](https://renovatebot.com/diffs/npm/lint-staged/15.1.0/15.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lint-staged/15.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lint-staged/15.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lint-staged/15.1.0/15.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lint-staged/15.1.0/15.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [maven](https://togithub.com/apache/maven) | `3.9.5` -> `3.9.6` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/maven/3.9.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/maven/3.9.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/maven/3.9.5/3.9.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/maven/3.9.5/3.9.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | patch | | [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `v1.23.1` -> `v1.27.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/modernc.org%2fsqlite/v1.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/modernc.org%2fsqlite/v1.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/modernc.org%2fsqlite/v1.23.1/v1.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/modernc.org%2fsqlite/v1.23.1/v1.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [node](https://togithub.com/nodejs/node) | `21.2.0` -> `21.3.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/node/21.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/node/21.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/node/21.2.0/21.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/node/21.2.0/21.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | minor | | [postcss](https://postcss.org/) ([source](https://togithub.com/postcss/postcss)) | [`8.4.31` -> `8.4.32`](https://renovatebot.com/diffs/npm/postcss/8.4.31/8.4.32) | [![age](https://developer.mend.io/api/mc/badges/age/npm/postcss/8.4.32?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss/8.4.32?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss/8.4.31/8.4.32?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss/8.4.31/8.4.32?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [react-router-dom](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.20.0` -> `6.20.1`](https://renovatebot.com/diffs/npm/react-router-dom/6.20.0/6.20.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.20.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.20.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [ch.qos.logback:logback-core](http://logback.qos.ch) ([source](https://togithub.com/qos-ch/logback)) | `1.4.13` -> `1.4.14` | [![age](https://developer.mend.io/api/mc/badges/age/maven/ch.qos.logback:logback-core/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/ch.qos.logback:logback-core/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/ch.qos.logback:logback-core/1.4.13/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/ch.qos.logback:logback-core/1.4.13/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | | [ch.qos.logback:logback-classic](http://logback.qos.ch) ([source](https://togithub.com/qos-ch/logback)) | `1.4.13` -> `1.4.14` | [![age](https://developer.mend.io/api/mc/badges/age/maven/ch.qos.logback:logback-classic/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/ch.qos.logback:logback-classic/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/ch.qos.logback:logback-classic/1.4.13/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/ch.qos.logback:logback-classic/1.4.13/1.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | | [com.squareup:kotlinpoet-jvm](https://togithub.com/square/kotlinpoet) | `1.15.1` -> `1.15.2` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup:kotlinpoet-jvm/1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup:kotlinpoet-jvm/1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup:kotlinpoet-jvm/1.15.1/1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup:kotlinpoet-jvm/1.15.1/1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | --- ### Release Notes <details> <summary>swc-project/swc (@​swc/core)</summary> ### [`v1.3.100`](https://togithub.com/swc-project/swc/blob/HEAD/CHANGELOG.md#13100---2023-11-30) [Compare Source](https://togithub.com/swc-project/swc/compare/v1.3.99...v1.3.100) ##### Bug Fixes - **(es/codegen)** Fix panic due to `\\ud` ([#​8346](https://togithub.com/swc-project/swc/issues/8346)) ([1891afa](https://togithub.com/swc-project/swc/commit/1891afa2ad27f183e56adcd288dd3a1ae0c5b367)) - **(es/codegen)** Wrap quote for length greater than one ([#​8351](https://togithub.com/swc-project/swc/issues/8351)) ([2cdea3f](https://togithub.com/swc-project/swc/commit/2cdea3fbeaf4a2dac662a4d019982943c0a896ba)) - **(es/decorators)** Resolve enum for `design:returntype` ([#​8320](https://togithub.com/swc-project/swc/issues/8320)) ([91ef7c9](https://togithub.com/swc-project/swc/commit/91ef7c9415c0efed347d3faf20653749fb7a6b15)) - **(es/fixer)** Wrap yield expression in await expression ([#​8357](https://togithub.com/swc-project/swc/issues/8357)) ([ff719f0](https://togithub.com/swc-project/swc/commit/ff719f0cdd3cf79e7afa1c136243e6fa53c5abe3)) - **(es/minifier)** Fix `if_return` bug related to `await` and `yield` ([#​8328](https://togithub.com/swc-project/swc/issues/8328)) ([01e2c7f](https://togithub.com/swc-project/swc/commit/01e2c7fc5ab71d55c522e48eae9e3e08d8bf418d)) - **(es/minifier)** Give up terminate merge if in `try` with `finally` ([#​8342](https://togithub.com/swc-project/swc/issues/8342)) ([ed5a9b3](https://togithub.com/swc-project/swc/commit/ed5a9b3f2e5b7035f657a8ea3cb38a27413369b2)) - **(es/parser)** Wrap with `OptChain` across `TsNonNull` ([#​8332](https://togithub.com/swc-project/swc/issues/8332)) ([8af6ffb](https://togithub.com/swc-project/swc/commit/8af6ffb1ddaf60b997163aaf80abfb528eb2ca9c)) - **(es/parser)** Fix conditional compilation ([#​8343](https://togithub.com/swc-project/swc/issues/8343)) ([a423681](https://togithub.com/swc-project/swc/commit/a423681df897956e58650b3acc9f2331887e42e8)) - **(es/react)** Make jsx with single spread child static ([#​8339](https://togithub.com/swc-project/swc/issues/8339)) ([58568fa](https://togithub.com/swc-project/swc/commit/58568fa23be932ed8f3858c24962973bdc4b8057)) - **(es/renamer)** Allow `globalThis` to be shadowed ([#​8327](https://togithub.com/swc-project/swc/issues/8327)) ([3dd73a3](https://togithub.com/swc-project/swc/commit/3dd73a3cd8fddd9e19dc85c2a2bf785b585b5b9a)) - **(es/typescript)** Handle shebang with jsx pragma ([#​8318](https://togithub.com/swc-project/swc/issues/8318)) ([c25601d](https://togithub.com/swc-project/swc/commit/c25601dec21d7293ad48549a1f49ccd161f9da72)) ##### Miscellaneous Tasks - **(css/linter)** Document rules require porting ([#​8352](https://togithub.com/swc-project/swc/issues/8352)) ([55da0bb](https://togithub.com/swc-project/swc/commit/55da0bb9ddbb661a75e24162b7bdd63d2549dca3)) ##### Build - **(cargo)** Update `vergen` to `v8` ([#​8325](https://togithub.com/swc-project/swc/issues/8325)) ([1315615](https://togithub.com/swc-project/swc/commit/13156157ebf9434fef8ed04ee4cf59c22421a3fa)) </details> <details> <summary>testing-library/jest-dom (@​testing-library/jest-dom)</summary> ### [`v6.1.5`](https://togithub.com/testing-library/jest-dom/releases/tag/v6.1.5) [Compare Source](https://togithub.com/testing-library/jest-dom/compare/v6.1.4...v6.1.5) ##### Bug Fixes - support uppercase custom props in toHaveStyle ([#​552](https://togithub.com/testing-library/jest-dom/issues/552)) ([b7b7c6a](https://togithub.com/testing-library/jest-dom/commit/b7b7c6a9652f259434d13a22e4319826a4bd4d8b)) </details> <details> <summary>eslint/eslint (eslint)</summary> ### [`v8.55.0`](https://togithub.com/eslint/eslint/releases/tag/v8.55.0) [Compare Source](https://togithub.com/eslint/eslint/compare/v8.54.0...v8.55.0) #### Features - [`8c9e6c1`](https://togithub.com/eslint/eslint/commit/8c9e6c100a6eb69da292463293b3b48cff911a01) feat: importNamePattern option in no-restricted-imports ([#​17721](https://togithub.com/eslint/eslint/issues/17721)) (Tanuj Kanti) #### Documentation - [`83ece2a`](https://togithub.com/eslint/eslint/commit/83ece2afc2dc6c49efe82678663fe4cba590c0e5) docs: fix typo `--rules` -> `--rule` ([#​17806](https://togithub.com/eslint/eslint/issues/17806)) (OKURA Masafumi) - [`fffca5c`](https://togithub.com/eslint/eslint/commit/fffca5c362bcd205dbf79d1bb52834f8a98fc6bd) docs: remove "Open in Playground" buttons for removed rules ([#​17791](https://togithub.com/eslint/eslint/issues/17791)) (Francesco Trotta) - [`a6d9442`](https://togithub.com/eslint/eslint/commit/a6d9442a9ab34d5d19f78d8c8fd0767a1237bfe3) docs: fix correct/incorrect examples of rules ([#​17789](https://togithub.com/eslint/eslint/issues/17789)) (Tanuj Kanti) - [`383e999`](https://togithub.com/eslint/eslint/commit/383e99928d7ce649ec9030c9856b03fbac0c3501) docs: update and fix examples for `no-unused-vars` ([#​17788](https://togithub.com/eslint/eslint/issues/17788)) (Tanuj Kanti) - [`5a8efd5`](https://togithub.com/eslint/eslint/commit/5a8efd5b7ad13eb320a1f468d1d4ab3c8ab99214) docs: add specific stylistic rule for each deprecated rule ([#​17778](https://togithub.com/eslint/eslint/issues/17778)) (Etienne) #### Chores - [`eb8950c`](https://togithub.com/eslint/eslint/commit/eb8950c3b811c9163b9aae23af8b6266ad98b295) chore: upgrade [@​eslint/js](https://togithub.com/eslint/js)[@​8](https://togithub.com/8).55.0 ([#​17811](https://togithub.com/eslint/eslint/issues/17811)) (Milos Djermanovic) - [`93df384`](https://togithub.com/eslint/eslint/commit/93df3849a7a25ebe0502000bf0bfb80a6613a5ae) chore: package.json update for [@​eslint/js](https://togithub.com/eslint/js) release (Jenkins) - [`fe4b954`](https://togithub.com/eslint/eslint/commit/fe4b9545a83e9aca7ba4bb77bc9c868d57de777f) chore: upgrade [@​eslint/eslintrc](https://togithub.com/eslint/eslintrc)[@​2](https://togithub.com/2).1.4 ([#​17799](https://togithub.com/eslint/eslint/issues/17799)) (Milos Djermanovic) - [`bd8911d`](https://togithub.com/eslint/eslint/commit/bd8911db85c7a1127543c9212c8cea47a5cb687d) ci: pin Node.js 21.2.0 ([#​17809](https://togithub.com/eslint/eslint/issues/17809)) (Milos Djermanovic) - [`b29a16b`](https://togithub.com/eslint/eslint/commit/b29a16b22f234f6134475efb6c7be5ac946556ee) chore: fix several `cli` tests to run in the intended flat config mode ([#​17797](https://togithub.com/eslint/eslint/issues/17797)) (Milos Djermanovic) - [`de165c1`](https://togithub.com/eslint/eslint/commit/de165c108203c6703516ac651f5b4cac5b241804) chore: remove unused config-extends fixtures ([#​17781](https://togithub.com/eslint/eslint/issues/17781)) (Milos Djermanovic) - [`d4304b8`](https://togithub.com/eslint/eslint/commit/d4304b8b66eac870ffbf4840d84add8a123b25fc) chore: remove formatting/stylistic rules from new rule templates ([#​17780](https://togithub.com/eslint/eslint/issues/17780)) (Francesco Trotta) - [`21024fe`](https://togithub.com/eslint/eslint/commit/21024fe2029420b413bed11d23761c87e9a02a1a) chore: check rule examples for syntax errors ([#​17718](https://togithub.com/eslint/eslint/issues/17718)) (Francesco Trotta) </details> <details> <summary>prettier/eslint-config-prettier (eslint-config-prettier)</summary> ### [`v9.1.0`](https://togithub.com/prettier/eslint-config-prettier/blob/HEAD/CHANGELOG.md#Version-910-2023-12-02) [Compare Source](https://togithub.com/prettier/eslint-config-prettier/compare/v9.0.0...v9.1.0) - Added: \[unicorn/template-indent], (as a \[special rule]\[unicorn/template-indent-special]). Thanks to Gürgün Dayıoğlu ([@​gurgunday](https://togithub.com/gurgunday))! - Changed: All the \[formatting rules that were deprecated in ESLint 8.53.0]\[deprecated-8.53.0] are now excluded if you set the `ESLINT_CONFIG_PRETTIER_NO_DEPRECATED` environment variable. </details> <details> <summary>deckarep/golang-set (github.com/deckarep/golang-set/v2)</summary> ### [`v2.5.0`](https://togithub.com/deckarep/golang-set/releases/tag/v2.5.0): - Adds generic Sorted method to easily get elements into a sorted slice. [Compare Source](https://togithub.com/deckarep/golang-set/compare/v2.4.0...v2.5.0) #### What's Changed - Add Sorted method - easily get elements of a set into a sorted slice. - Move to own file that can be build tagged - Also test go 1.21 #### Full Changelog </details> <details> <summary>swaggest/jsonschema-go (github.com/swaggest/jsonschema-go)</summary> ### [`v0.3.64`](https://togithub.com/swaggest/jsonschema-go/releases/tag/v0.3.64) [Compare Source](https://togithub.com/swaggest/jsonschema-go/compare/v0.3.63...v0.3.64) #### What's Changed - Fix regression on multi tag struct processing by [@​vearutop](https://togithub.com/vearutop) in [https://github.com/swaggest/jsonschema-go/pull/102](https://togithub.com/swaggest/jsonschema-go/pull/102) **Full Changelog**: https://github.com/swaggest/jsonschema-go/compare/v0.3.63...v0.3.64 ### [`v0.3.63`](https://togithub.com/swaggest/jsonschema-go/releases/tag/v0.3.63) [Compare Source](https://togithub.com/swaggest/jsonschema-go/compare/v0.3.62...v0.3.63) #### What's Changed - Fix self-references by [@​vearutop](https://togithub.com/vearutop) in [https://github.com/swaggest/jsonschema-go/pull/100](https://togithub.com/swaggest/jsonschema-go/pull/100) - Add support for ptr receivers in (Raw)Exposer by [@​vearutop](https://togithub.com/vearutop) in [https://github.com/swaggest/jsonschema-go/pull/101](https://togithub.com/swaggest/jsonschema-go/pull/101) **Full Changelog**: https://github.com/swaggest/jsonschema-go/compare/v0.3.62...v0.3.63 </details> <details> <summary>okonet/lint-staged (lint-staged)</summary> ### [`v15.2.0`](https://togithub.com/okonet/lint-staged/blob/HEAD/CHANGELOG.md#1520) [Compare Source](https://togithub.com/okonet/lint-staged/compare/v15.1.0...v15.2.0) ##### Minor Changes - [#​1371](https://togithub.com/lint-staged/lint-staged/pull/1371) [`f3378be`](https://togithub.com/lint-staged/lint-staged/commit/f3378be894fb84800341800b1e4f6f8bc8dfd904) Thanks [@​iiroj](https://togithub.com/iiroj)! - Using the `--no-stash` flag no longer discards all unstaged changes to partially staged files, which resulted in inadvertent data loss. This fix is available with a new flag `--no-hide-partially-staged` that is automatically enabled when `--no-stash` is used. ##### Patch Changes - [#​1362](https://togithub.com/lint-staged/lint-staged/pull/1362) [`17bc480`](https://togithub.com/lint-staged/lint-staged/commit/17bc480c0f8767407a87527931558de8d1d1551d) Thanks [@​antonk52](https://togithub.com/antonk52)! - update [email protected] - [#​1368](https://togithub.com/lint-staged/lint-staged/pull/1368) [`7c55ca9`](https://togithub.com/lint-staged/lint-staged/commit/7c55ca9f410043016e8b33b3b523b9b7e764acf4) Thanks [@​iiroj](https://togithub.com/iiroj)! - Update most dependencies - [#​1368](https://togithub.com/lint-staged/lint-staged/pull/1368) [`777d4e9`](https://togithub.com/lint-staged/lint-staged/commit/777d4e976852af4c181ffbe055f3531343349695) Thanks [@​iiroj](https://togithub.com/iiroj)! - To improve performance, only use `lilconfig` when searching for config files outside the git repo. In the regular case, *lint-staged* finds the config files from the Git index and loads them directly. - [#​1373](https://togithub.com/lint-staged/lint-staged/pull/1373) [`85eb0dd`](https://togithub.com/lint-staged/lint-staged/commit/85eb0ddab1eba0c0bcc8cc109e17dc2bbb3d044e) Thanks [@​iiroj](https://togithub.com/iiroj)! - When determining git directory, use `fs.realpath()` only for symlinks. It looks like `fs.realpath()` changes some Windows mapped network filepaths unexpectedly, causing issues. </details> <details> <summary>apache/maven (maven)</summary> ### [`v3.9.6`](https://togithub.com/apache/maven/releases/tag/maven-3.9.6): 3.9.6 [Compare Source](https://togithub.com/apache/maven/compare/maven-3.9.5...maven-3.9.6) ## [Release Notes - Maven - Version 3.9.6](https://maven.apache.org/docs/3.9.6/release-notes.html) ## Improvement - \[[MNG-7939](https://issues.apache.org/jira/browse/MNG-7939)] - Allow to exclude plugins from validation ## Dependency upgrade - \[[MNG-7913](https://issues.apache.org/jira/browse/MNG-7913)] - Upgrade Sisu version to 0.9.0.M2 - \[[MNG-7934](https://issues.apache.org/jira/browse/MNG-7934)] - Upgrade Resolver version to 1.9.18 - \[[MNG-7942](https://issues.apache.org/jira/browse/MNG-7942)] - Upgrade to parent POM 41 - \[[MNG-7943](https://issues.apache.org/jira/browse/MNG-7943)] - Upgrade default plugin bindings </details> <details> <summary>cznic/sqlite (modernc.org/sqlite)</summary> ### [`v1.27.0`](https://gitlab.com/cznic/sqlite/compare/v1.26.0...v1.27.0) [Compare Source](https://gitlab.com/cznic/sqlite/compare/v1.26.0...v1.27.0) ### [`v1.26.0`](https://gitlab.com/cznic/sqlite/compare/v1.25.0...v1.26.0) [Compare Source](https://gitlab.com/cznic/sqlite/compare/v1.25.0...v1.26.0) ### [`v1.25.0`](https://gitlab.com/cznic/sqlite/compare/v1.24.0...v1.25.0) [Compare Source](https://gitlab.com/cznic/sqlite/compare/v1.24.0...v1.25.0) ### [`v1.24.0`](https://gitlab.com/cznic/sqlite/compare/v1.23.1...v1.24.0) [Compare Source](https://gitlab.com/cznic/sqlite/compare/v1.23.1...v1.24.0) </details> <details> <summary>nodejs/node (node)</summary> ### [`v21.3.0`](https://togithub.com/nodejs/node/releases/tag/v21.3.0): 2023-11-30, Version 21.3.0 (Current), @​RafaelGSS [Compare Source](https://togithub.com/nodejs/node/compare/v21.2.0...v21.3.0) ##### Notable Changes ##### New `--disable-warning` flag This version adds a new `--disable-warning` option that allows users to disable specific warnings either by code (i.e. DEP0025) or type (i.e. DeprecationWarning, ExperimentalWarning). This option works alongside existing `--warnings` and `--no-warnings`. For example, the following script will not emit DEP0025 `require('node:sys')` when executed with `node --disable-warning=DEP0025`: ```mjs import sys from 'node:sys'; ``` Contributed by Ethan-Arrowood in [#​50661](https://togithub.com/nodejs/node/pull/50661) ##### Update Root Certificates to NSS 3.95 This is the [certdata.txt](https://hg.mozilla.org/projects/nss/raw-file/NSS\_3\_95\_RTM/lib/ckfw/builtins/certdata.txt) from NSS 3.95, released on 2023-11-16. This is the version of NSS that will ship in Firefox 121 on 2023-12-19. Certificates added: - TrustAsia Global Root CA G3 - TrustAsia Global Root CA G4 - CommScope Public Trust ECC Root-01 - CommScope Public Trust ECC Root-02 - CommScope Public Trust RSA Root-01 - CommScope Public Trust RSA Root-02 Certificates removed: - Autoridad de Certificacion Firmaprofesional CIF [`A626340`](https://togithub.com/nodejs/node/commit/A62634068) ##### Fast fs.writeFileSync with UTF-8 Strings Enhanced writeFileSync functionality by implementing a highly efficient fast path primarily in C++ for UTF8-encoded string data. Additionally, optimized the `appendFileSync` method by leveraging the improved `writeFileSync` functionality. For simplicity and performance considerations, the current implementation supports only string data, as benchmark results raise concerns about the efficacy of using Buffer for this purpose. Future optimizations and expansions may be explored, but for now, the focus is on maximizing efficiency for string data operations. Contributed by CanadaHonk in [#​49884](https://togithub.com/nodejs/node/pull/49884). ##### Other Notable Changes - \[[`c7a7493ca2`](https://togithub.com/nodejs/node/commit/c7a7493ca2)] - **(SEMVER-MINOR)** **module**: bootstrap module loaders in shadow realm (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`bc3f7b5401`](https://togithub.com/nodejs/node/commit/bc3f7b5401)] - **(SEMVER-MINOR)** **module**: remove useCustomLoadersIfPresent flag (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`aadff07e59`](https://togithub.com/nodejs/node/commit/aadff07e59)] - **(SEMVER-MINOR)** **src**: create per isolate proxy env template (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`91aa9dd23a`](https://togithub.com/nodejs/node/commit/91aa9dd23a)] - **(SEMVER-MINOR)** **src**: create fs_dir per isolate properties (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`5c5834190a`](https://togithub.com/nodejs/node/commit/5c5834190a)] - **(SEMVER-MINOR)** **src**: create worker per isolate properties (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`4a1ce45181`](https://togithub.com/nodejs/node/commit/4a1ce45181)] - **(SEMVER-MINOR)** **src**: make process binding data weak (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) ##### Commits - \[[`4a20912279`](https://togithub.com/nodejs/node/commit/4a20912279)] - **benchmark**: update iterations in benchmark/util/splice-one.js (Liu Jia) [#​50698](https://togithub.com/nodejs/node/pull/50698) - \[[`36380eb53d`](https://togithub.com/nodejs/node/commit/36380eb53d)] - **benchmark**: increase the iteration number to an appropriate value (Lei Shi) [#​50766](https://togithub.com/nodejs/node/pull/50766) - \[[`23f56d8bb3`](https://togithub.com/nodejs/node/commit/23f56d8bb3)] - **benchmark**: rewrite import.meta benchmark (Joyee Cheung) [#​50683](https://togithub.com/nodejs/node/pull/50683) - \[[`f7245d73d9`](https://togithub.com/nodejs/node/commit/f7245d73d9)] - **benchmark**: add misc/startup-cli-version benchmark (Joyee Cheung) [#​50684](https://togithub.com/nodejs/node/pull/50684) - \[[`c81d2acfe0`](https://togithub.com/nodejs/node/commit/c81d2acfe0)] - **benchmark**: remove punycode from require-builtins fixture (Joyee Cheung) [#​50689](https://togithub.com/nodejs/node/pull/50689) - \[[`5849f09874`](https://togithub.com/nodejs/node/commit/5849f09874)] - **build**: add GN configurations for simdjson (Cheng Zhao) [#​50831](https://togithub.com/nodejs/node/pull/50831) - \[[`12605e8f7d`](https://togithub.com/nodejs/node/commit/12605e8f7d)] - **build**: add configuration flag to enable Maglev (Keyhan Vakil) [#​50692](https://togithub.com/nodejs/node/pull/50692) - \[[`43da9ea9e5`](https://togithub.com/nodejs/node/commit/43da9ea9e5)] - **build**: fix GN configuration for deps/base64 (Cheng Zhao) [#​50696](https://togithub.com/nodejs/node/pull/50696) - \[[`465f75b58a`](https://togithub.com/nodejs/node/commit/465f75b58a)] - **build**: disable flag v8\_scriptormodule_legacy_lifetime (Chengzhong Wu) [#​50616](https://togithub.com/nodejs/node/pull/50616) - \[[`d2c0dfb1b7`](https://togithub.com/nodejs/node/commit/d2c0dfb1b7)] - **crypto**: update root certificates to NSS 3.95 (Node.js GitHub Bot) [#​50805](https://togithub.com/nodejs/node/pull/50805) - \[[`8d3a1d8911`](https://togithub.com/nodejs/node/commit/8d3a1d8911)] - **deps**: update zlib to 1.2.13.1-motley-5daffc7 (Node.js GitHub Bot) [#​50803](https://togithub.com/nodejs/node/pull/50803) - \[[`e02f304de7`](https://togithub.com/nodejs/node/commit/e02f304de7)] - **deps**: V8: cherry-pick [`0f9ebbc`](https://togithub.com/nodejs/node/commit/0f9ebbc672c7) (Chengzhong Wu) [#​50867](https://togithub.com/nodejs/node/pull/50867) - \[[`c31ad5ceaa`](https://togithub.com/nodejs/node/commit/c31ad5ceaa)] - **deps**: update icu to 74.1 (Node.js GitHub Bot) [#​50515](https://togithub.com/nodejs/node/pull/50515) - \[[`3ff2bda34e`](https://togithub.com/nodejs/node/commit/3ff2bda34e)] - **deps**: update ada to 2.7.4 (Node.js GitHub Bot) [#​50815](https://togithub.com/nodejs/node/pull/50815) - \[[`221f02df6d`](https://togithub.com/nodejs/node/commit/221f02df6d)] - **deps**: update undici to 5.27.2 (Node.js GitHub Bot) [#​50813](https://togithub.com/nodejs/node/pull/50813) - \[[`ee69c613a2`](https://togithub.com/nodejs/node/commit/ee69c613a2)] - **deps**: update minimatch to 9.0.3 (Node.js GitHub Bot) [#​50806](https://togithub.com/nodejs/node/pull/50806) - \[[`00dab30fd2`](https://togithub.com/nodejs/node/commit/00dab30fd2)] - **deps**: V8: cherry-pick [`475c8cd`](https://togithub.com/nodejs/node/commit/475c8cdf9a95) (Keyhan Vakil) [#​50680](https://togithub.com/nodejs/node/pull/50680) - \[[`a0c01b23b4`](https://togithub.com/nodejs/node/commit/a0c01b23b4)] - **deps**: update simdutf to 4.0.4 (Node.js GitHub Bot) [#​50772](https://togithub.com/nodejs/node/pull/50772) - \[[`071e46ae56`](https://togithub.com/nodejs/node/commit/071e46ae56)] - **deps**: upgrade npm to 10.2.4 (npm team) [#​50751](https://togithub.com/nodejs/node/pull/50751) - \[[`5d28f8d18f`](https://togithub.com/nodejs/node/commit/5d28f8d18f)] - **deps**: escape Python strings correctly (Michaël Zasso) [#​50695](https://togithub.com/nodejs/node/pull/50695) - \[[`3731f836ed`](https://togithub.com/nodejs/node/commit/3731f836ed)] - **deps**: V8: cherry-pick [`8f0b946`](https://togithub.com/nodejs/node/commit/8f0b94671ddb) (Lu Yahan) [#​50654](https://togithub.com/nodejs/node/pull/50654) - \[[`6dfe1023c3`](https://togithub.com/nodejs/node/commit/6dfe1023c3)] - **dns**: call handle.setServers() with a valid array (Luigi Pinca) [#​50811](https://togithub.com/nodejs/node/pull/50811) - \[[`2f13db475e`](https://togithub.com/nodejs/node/commit/2f13db475e)] - **doc**: make theme consistent across api and other docs (Dima Demakov) [#​50877](https://togithub.com/nodejs/node/pull/50877) - \[[`8c4976b732`](https://togithub.com/nodejs/node/commit/8c4976b732)] - **doc**: add a section regarding `instanceof` in `primordials.md` (Antoine du Hamel) [#​50874](https://togithub.com/nodejs/node/pull/50874) - \[[`6485687642`](https://togithub.com/nodejs/node/commit/6485687642)] - **doc**: update email to reflect affiliation (Yagiz Nizipli) [#​50856](https://togithub.com/nodejs/node/pull/50856) - \[[`bc31375a09`](https://togithub.com/nodejs/node/commit/bc31375a09)] - **doc**: shard not supported with watch mode (Pulkit Gupta) [#​50640](https://togithub.com/nodejs/node/pull/50640) - \[[`08c3b0ab20`](https://togithub.com/nodejs/node/commit/08c3b0ab20)] - **doc**: get rid of unnecessary `eslint-skip` comments (Antoine du Hamel) [#​50829](https://togithub.com/nodejs/node/pull/50829) - \[[`98fb1faff1`](https://togithub.com/nodejs/node/commit/98fb1faff1)] - **doc**: create deprecation code for isWebAssemblyCompiledModule (Marco Ippolito) [#​50486](https://togithub.com/nodejs/node/pull/50486) - \[[`e116fcdb01`](https://togithub.com/nodejs/node/commit/e116fcdb01)] - **doc**: add CanadaHonk to triagers (CanadaHonk) [#​50848](https://togithub.com/nodejs/node/pull/50848) - \[[`a37d9ee1e3`](https://togithub.com/nodejs/node/commit/a37d9ee1e3)] - **doc**: fix typos in --allow-fs-\* (Tobias Nießen) [#​50845](https://togithub.com/nodejs/node/pull/50845) - \[[`8468daf1a9`](https://togithub.com/nodejs/node/commit/8468daf1a9)] - **doc**: update Crypto API doc for x509.keyUsage (Daniel Meechan) [#​50603](https://togithub.com/nodejs/node/pull/50603) - \[[`b4935dde60`](https://togithub.com/nodejs/node/commit/b4935dde60)] - **doc**: fix fs.writeFileSync return value documentation (Ryan Zimmerman) [#​50760](https://togithub.com/nodejs/node/pull/50760) - \[[`ead9879a04`](https://togithub.com/nodejs/node/commit/ead9879a04)] - **doc**: update print results(detail) in `PerformanceEntry` (Jungku Lee) [#​50723](https://togithub.com/nodejs/node/pull/50723) - \[[`6b7403c5df`](https://togithub.com/nodejs/node/commit/6b7403c5df)] - **doc**: fix `Buffer.allocUnsafe` documentation (Mert Can Altın) [#​50686](https://togithub.com/nodejs/node/pull/50686) - \[[`713fdf1fc3`](https://togithub.com/nodejs/node/commit/713fdf1fc3)] - **doc**: run license-builder (github-actions\[bot]) [#​50691](https://togithub.com/nodejs/node/pull/50691) - \[[`50f336c06f`](https://togithub.com/nodejs/node/commit/50f336c06f)] - **esm**: fallback to `getSource` when `load` returns nullish `source` (Antoine du Hamel) [#​50825](https://togithub.com/nodejs/node/pull/50825) - \[[`bd58870556`](https://togithub.com/nodejs/node/commit/bd58870556)] - **esm**: do not call `getSource` when format is `commonjs` (Francesco Trotta) [#​50465](https://togithub.com/nodejs/node/pull/50465) - \[[`e59268a076`](https://togithub.com/nodejs/node/commit/e59268a076)] - **fs**: add c++ fast path for writeFileSync utf8 (CanadaHonk) [#​49884](https://togithub.com/nodejs/node/pull/49884) - \[[`483200f68f`](https://togithub.com/nodejs/node/commit/483200f68f)] - **fs**: improve error performance for `rmdirSync` (CanadaHonk) [#​49846](https://togithub.com/nodejs/node/pull/49846) - \[[`e4e0add0de`](https://togithub.com/nodejs/node/commit/e4e0add0de)] - **fs**: fix glob returning duplicates (Moshe Atlow) [#​50881](https://togithub.com/nodejs/node/pull/50881) - \[[`45b2bb09f2`](https://togithub.com/nodejs/node/commit/45b2bb09f2)] - **fs**: fix to not return for void function (Jungku Lee) [#​50769](https://togithub.com/nodejs/node/pull/50769) - \[[`492e3e30b7`](https://togithub.com/nodejs/node/commit/492e3e30b7)] - **fs**: replace deprecated `path._makeLong` in copyFile (CanadaHonk) [#​50844](https://togithub.com/nodejs/node/pull/50844) - \[[`9dc4cde75b`](https://togithub.com/nodejs/node/commit/9dc4cde75b)] - **fs**: improve error perf of sync `lstat`+`fstat` (CanadaHonk) [#​49868](https://togithub.com/nodejs/node/pull/49868) - \[[`c3eee590be`](https://togithub.com/nodejs/node/commit/c3eee590be)] - **inspector**: use private fields instead of symbols (Yagiz Nizipli) [#​50776](https://togithub.com/nodejs/node/pull/50776) - \[[`1a0069b13d`](https://togithub.com/nodejs/node/commit/1a0069b13d)] - **meta**: clarify nomination process according to Node.js charter (Matteo Collina) [#​50834](https://togithub.com/nodejs/node/pull/50834) - \[[`65a811a86d`](https://togithub.com/nodejs/node/commit/65a811a86d)] - **meta**: clarify recommendation for bug reproductions (Antoine du Hamel) [#​50882](https://togithub.com/nodejs/node/pull/50882) - \[[`5811a59016`](https://togithub.com/nodejs/node/commit/5811a59016)] - **meta**: move cjihrig to TSC regular member (Colin Ihrig) [#​50816](https://togithub.com/nodejs/node/pull/50816) - \[[`c7a7493ca2`](https://togithub.com/nodejs/node/commit/c7a7493ca2)] - **(SEMVER-MINOR)** **module**: bootstrap module loaders in shadow realm (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`bc3f7b5401`](https://togithub.com/nodejs/node/commit/bc3f7b5401)] - **(SEMVER-MINOR)** **module**: remove useCustomLoadersIfPresent flag (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`9197b0f2fc`](https://togithub.com/nodejs/node/commit/9197b0f2fc)] - **net**: check pipe mode and path (theanarkh) [#​50770](https://togithub.com/nodejs/node/pull/50770) - \[[`673de300b4`](https://togithub.com/nodejs/node/commit/673de300b4)] - **node-api**: factor out common code into macros (Gabriel Schulhof) [#​50664](https://togithub.com/nodejs/node/pull/50664) - \[[`aebe2fc702`](https://togithub.com/nodejs/node/commit/aebe2fc702)] - **perf_hooks**: implement performance.now() with fast API calls (Joyee Cheung) [#​50492](https://togithub.com/nodejs/node/pull/50492) - \[[`3fdecc4a8b`](https://togithub.com/nodejs/node/commit/3fdecc4a8b)] - **permission**: do not create symlinks if target is relative (Tobias Nießen) [#​49156](https://togithub.com/nodejs/node/pull/49156) - \[[`27a4f58640`](https://togithub.com/nodejs/node/commit/27a4f58640)] - **permission**: mark const functions as such (Tobias Nießen) [#​50705](https://togithub.com/nodejs/node/pull/50705) - \[[`feb8ff9427`](https://togithub.com/nodejs/node/commit/feb8ff9427)] - **src**: assert return value of BN_bn2binpad (Tobias Nießen) [#​50860](https://togithub.com/nodejs/node/pull/50860) - \[[`fd9195d750`](https://togithub.com/nodejs/node/commit/fd9195d750)] - **src**: fix coverity warning (Michael Dawson) [#​50846](https://togithub.com/nodejs/node/pull/50846) - \[[`adcab85c0c`](https://togithub.com/nodejs/node/commit/adcab85c0c)] - **src**: fix compatility with upcoming V8 12.1 APIs (Cheng Zhao) [#​50709](https://togithub.com/nodejs/node/pull/50709) - \[[`79ef39b8c8`](https://togithub.com/nodejs/node/commit/79ef39b8c8)] - **(SEMVER-MINOR)** **src**: add `--disable-warning` option (Ethan Arrowood) [#​50661](https://togithub.com/nodejs/node/pull/50661) - \[[`faf6a04ba6`](https://togithub.com/nodejs/node/commit/faf6a04ba6)] - **src**: add IsolateScopes before using isolates (Keyhan Vakil) [#​50680](https://togithub.com/nodejs/node/pull/50680) - \[[`eacf4ba485`](https://togithub.com/nodejs/node/commit/eacf4ba485)] - **src**: iterate on import attributes array correctly (Michaël Zasso) [#​50703](https://togithub.com/nodejs/node/pull/50703) - \[[`0fb35b6a67`](https://togithub.com/nodejs/node/commit/0fb35b6a67)] - **src**: avoid copying strings in FSPermission::Apply (Tobias Nießen) [#​50662](https://togithub.com/nodejs/node/pull/50662) - \[[`83ad272fa6`](https://togithub.com/nodejs/node/commit/83ad272fa6)] - **src**: remove erroneous default argument in RadixTree (Tobias Nießen) [#​50736](https://togithub.com/nodejs/node/pull/50736) - \[[`2e8e237ce2`](https://togithub.com/nodejs/node/commit/2e8e237ce2)] - **src**: fix JSONParser leaking internal V8 scopes (Keyhan Vakil) [#​50688](https://togithub.com/nodejs/node/pull/50688) - \[[`0d3aa725cf`](https://togithub.com/nodejs/node/commit/0d3aa725cf)] - **src**: return error --env-file if file is not found (Ardi Nugraha) [#​50588](https://togithub.com/nodejs/node/pull/50588) - \[[`aadff07e59`](https://togithub.com/nodejs/node/commit/aadff07e59)] - **(SEMVER-MINOR)** **src**: create per isolate proxy env template (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`91aa9dd23a`](https://togithub.com/nodejs/node/commit/91aa9dd23a)] - **(SEMVER-MINOR)** **src**: create fs_dir per isolate properties (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`5c5834190a`](https://togithub.com/nodejs/node/commit/5c5834190a)] - **(SEMVER-MINOR)** **src**: create worker per isolate properties (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`4a1ce45181`](https://togithub.com/nodejs/node/commit/4a1ce45181)] - **(SEMVER-MINOR)** **src**: make process binding data weak (Chengzhong Wu) [#​48655](https://togithub.com/nodejs/node/pull/48655) - \[[`8746073664`](https://togithub.com/nodejs/node/commit/8746073664)] - **src**: avoid silent coercion to signed/unsigned int (Tobias Nießen) [#​50663](https://togithub.com/nodejs/node/pull/50663) - \[[`57587de1fa`](https://togithub.com/nodejs/node/commit/57587de1fa)] - **src**: handle errors from uv_pipe_connect2() (Deokjin Kim) [#​50657](https://togithub.com/nodejs/node/pull/50657) - \[[`e5cce004e8`](https://togithub.com/nodejs/node/commit/e5cce004e8)] - **stream**: fix enumerability of ReadableStream.from (Mattias Buelens) [#​50779](https://togithub.com/nodejs/node/pull/50779) - \[[`4522e229c0`](https://togithub.com/nodejs/node/commit/4522e229c0)] - **stream**: fix enumerability of ReadableStream.prototype.values (Mattias Buelens) [#​50779](https://togithub.com/nodejs/node/pull/50779) - \[[`2e0abed973`](https://togithub.com/nodejs/node/commit/2e0abed973)] - **stream**: yield expected Error class on zlib errors (Filip Skokan) [#​50712](https://togithub.com/nodejs/node/pull/50712) - \[[`a275155e81`](https://togithub.com/nodejs/node/commit/a275155e81)] - **stream**: add Symbol.toStringTag to Compression Streams (Filip Skokan) [#​50712](https://togithub.com/nodejs/node/pull/50712) - \[[`146ad9cab0`](https://togithub.com/nodejs/node/commit/146ad9cab0)] - **stream**: treat compression web stream format per its WebIDL definition (Filip Skokan) [#​50631](https://togithub.com/nodejs/node/pull/50631) - \[[`087cffc7c2`](https://togithub.com/nodejs/node/commit/087cffc7c2)] - **test**: fix message v8 not normalising alphanumeric paths (Jithil P Ponnan) [#​50730](https://togithub.com/nodejs/node/pull/50730) - \[[`7de900a442`](https://togithub.com/nodejs/node/commit/7de900a442)] - **test**: fix dns test case failures after c-ares update to 1.21.0+ (Brad House) [#​50743](https://togithub.com/nodejs/node/pull/50743) - \[[`b1b6c44712`](https://togithub.com/nodejs/node/commit/b1b6c44712)] - **test**: replace forEach with for of (Conor Watson) [#​50594](https://togithub.com/nodejs/node/pull/50594) - \[[`7f44164ad4`](https://togithub.com/nodejs/node/commit/7f44164ad4)] - **test**: replace forEach to for at test-webcrypto-sign-verify-ecdsa.js (Alessandro Di Nisio) [#​50795](https://togithub.com/nodejs/node/pull/50795) - \[[`9d76de1993`](https://togithub.com/nodejs/node/commit/9d76de1993)] - **test**: replace foreach with for in test-https-simple.js (Shikha Mehta) [#​49793](https://togithub.com/nodejs/node/pull/49793) - \[[`ce8fc56ee4`](https://togithub.com/nodejs/node/commit/ce8fc56ee4)] - **test**: add note about unresolved spec issue (Mattias Buelens) [#​50779](https://togithub.com/nodejs/node/pull/50779) - \[[`628a12ac18`](https://togithub.com/nodejs/node/commit/628a12ac18)] - **test**: add note about readable streams with type owning (Mattias Buelens) [#​50779](https://togithub.com/nodejs/node/pull/50779) - \[[`82f0882ce0`](https://togithub.com/nodejs/node/commit/82f0882ce0)] - **test**: replace forEach with for-of in test-url-relative (vitosorriso) [#​50788](https://togithub.com/nodejs/node/pull/50788) - \[[`3b7998305d`](https://togithub.com/nodejs/node/commit/3b7998305d)] - **test**: replace forEach() with for ... of in test-tls-getprotocol.js (Steve Goode) [#​50600](https://togithub.com/nodejs/node/pull/50600) - \[[`0e4d25eb5c`](https://togithub.com/nodejs/node/commit/0e4d25eb5c)] - **test**: use requires instead of flaky in console WPT status (Filip Skokan) [#​50812](https://togithub.com/nodejs/node/pull/50812) - \[[`221952a88e`](https://togithub.com/nodejs/node/commit/221952a88e)] - **test**: use ppc and ppc64 to skip SEA tests on PowerPC (Joyee Cheung) [#​50828](https://togithub.com/nodejs/node/pull/50828) - \[[`0e3b714069`](https://togithub.com/nodejs/node/commit/0e3b714069)] - **test**: enable idlharness tests for encoding (Mattias Buelens) [#​50778](https://togithub.com/nodejs/node/pull/50778) - \[[`c8d4cd68b4`](https://togithub.com/nodejs/node/commit/c8d4cd68b4)] - **test**: replace forEach in whatwg-encoding-custom-interop (Honza Machala) [#​50607](https://togithub.com/nodejs/node/pull/50607) - \[[`f25637b5c9`](https://togithub.com/nodejs/node/commit/f25637b5c9)] - **test**: update WPT files for WebIDL tests (Filip Skokan) [#​50712](https://togithub.com/nodejs/node/pull/50712) - \[[`f2e0fce389`](https://togithub.com/nodejs/node/commit/f2e0fce389)] - **test**: replace forEach() with for-loop (Jan) [#​50596](https://togithub.com/nodejs/node/pull/50596) - \[[`4b26f14a53`](https://togithub.com/nodejs/node/commit/4b26f14a53)] - **test**: improve test-bootstrap-modules.js (Joyee Cheung) [#​50708](https://togithub.com/nodejs/node/pull/50708) - \[[`28d78de0dd`](https://togithub.com/nodejs/node/commit/28d78de0dd)] - **test**: skip parallel/test-macos-app-sandbox if disk space < 120MB (Joyee Cheung) [#​50764](https://togithub.com/nodejs/node/pull/50764) - \[[`4088b750e7`](https://togithub.com/nodejs/node/commit/4088b750e7)] - **test**: mark SEA tests as flaky on PowerPC (Joyee Cheung) [#​50750](https://togithub.com/nodejs/node/pull/50750) - \[[`6475cee6a4`](https://togithub.com/nodejs/node/commit/6475cee6a4)] - **test**: give more time to GC in test-shadow-realm-gc-\* (Joyee Cheung) [#​50735](https://togithub.com/nodejs/node/pull/50735) - \[[`0e8275b610`](https://togithub.com/nodejs/node/commit/0e8275b610)] - **test**: replace foreach with for (Markus Muschol) [#​50599](https://togithub.com/nodejs/node/pull/50599) - \[[`377deded59`](https://togithub.com/nodejs/node/commit/377deded59)] - **test**: test streambase has already has a consumer (Jithil P Ponnan) [#​48059](https://togithub.com/nodejs/node/pull/48059) - \[[`342a83e728`](https://togithub.com/nodejs/node/commit/342a83e728)] - **test**: change forEach to for...of in path extname (Kyriakos Markakis) [#​50667](https://togithub.com/nodejs/node/pull/50667) - \[[`75265e491d`](https://togithub.com/nodejs/node/commit/75265e491d)] - **test**: replace forEach with for...of (Ryan Williams) [#​50611](https://togithub.com/nodejs/node/pull/50611) - \[[`982b57651b`](https://togithub.com/nodejs/node/commit/982b57651b)] - **test**: migrate message v8 tests from Python to JS (Joshua LeMay) [#​50421](https://togithub.com/nodejs/node/pull/50421) - \[[`7ebc8c2aed`](https://togithub.com/nodejs/node/commit/7ebc8c2aed)] - **test,stream**: enable compression WPTs (Filip Skokan) [#​50631](https://togithub.com/nodejs/node/pull/50631) - \[[`0bd694ab64`](https://togithub.com/nodejs/node/commit/0bd694ab64)] - **test_runner**: add tests for various mock timer issues (Mika Fischer) [#​50384](https://togithub.com/nodejs/node/pull/50384) - \[[`dee8039c9b`](https://togithub.com/nodejs/node/commit/dee8039c9b)] - **tls**: fix order of setting cipher before setting cert and key (Kumar Rishav) [#​50186](https://togithub.com/nodejs/node/pull/50186) - \[[`5de30531b8`](https://togithub.com/nodejs/node/commit/5de30531b8)] - **tools**: add macOS notarization verification step (Ulises Gascón) [#​50833](https://togithub.com/nodejs/node/pull/50833) - \[[`a12d9e03f2`](https://togithub.com/nodejs/node/commit/a12d9e03f2)] - **tools**: use macOS keychain to notarize the releases (Ulises Gascón) [#​50715](https://togithub.com/nodejs/node/pull/50715) - \[[`f21637717f`](https://togithub.com/nodejs/node/commit/f21637717f)] - **tools**: update eslint to 8.54.0 (Node.js GitHub Bot) [#​50809](https://togithub.com/nodejs/node/pull/50809) - \[[`daa933d93a`](https://togithub.com/nodejs/node/commit/daa933d93a)] - **tools**: update lint-md-dependencies to [email protected] (Node.js GitHub Bot) [#​50807](https://togithub.com/nodejs/node/pull/50807) - \[[`52830b71cc`](https://togithub.com/nodejs/node/commit/52830b71cc)] - **tools**: add workflow to update release links (Michaël Zasso) [#​50710](https://togithub.com/nodejs/node/pull/50710) - \[[`db8ce5bbdd`](https://togithub.com/nodejs/node/commit/db8ce5bbdd)] - **tools**: recognize GN files in dep_updaters (Cheng Zhao) [#​50693](https://togithub.com/nodejs/node/pull/50693) - \[[`5ef6729b66`](https://togithub.com/nodejs/node/commit/5ef6729b66)] - **tools**: remove unused file (Ulises Gascon) [#​50622](https://togithub.com/nodejs/node/pull/50622) - \[[`c49483820a`](https://togithub.com/nodejs/node/commit/c49483820a)] - **tools**: change minimatch install strategy (Marco Ippolito) [#​50476](https://togithub.com/nodejs/node/pull/50476) - \[[`0d556d9a59`](https://togithub.com/nodejs/node/commit/0d556d9a59)] - **tools**: update lint-md-dependencies to [email protected] (Node.js GitHub Bot) [#​50675](https://togithub.com/nodejs/node/pull/50675) - \[[`eaa4c14e6b`](https://togithub.com/nodejs/node/commit/eaa4c14e6b)] - **util**: improve performance of normalizeEncoding (kylo5aby) [#​50721](https://togithub.com/nodejs/node/pull/50721) - \[[`a5d959b765`](https://togithub.com/nodejs/node/commit/a5d959b765)] - **v8,tools**: expose necessary V8 defines (Cheng Zhao) [#​50820](https://togithub.com/nodejs/node/pull/50820) </details> <details> <summary>postcss/postcss (postcss)</summary> ### [`v8.4.32`](https://togithub.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8432) [Compare Source](https://togithub.com/postcss/postcss/compare/8.4.31...8.4.32) - Fixed `postcss().process()` types (by Andrew Ferreira). </details> <details> <summary>remix-run/react-router (react-router-dom)</summary> ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` </details> <details> <summary>square/kotlinpoet (com.squareup:kotlinpoet-jvm)</summary> ### [`v1.15.2`](https://togithub.com/square/kotlinpoet/releases/tag/1.15.2) [Compare Source](https://togithub.com/square/kotlinpoet/compare/1.15.1...1.15.2) Thanks to [@​evant](https://togithub.com/evant) for contributing to this release. - New: Kotlin 1.9.21. - New: KSP 1.9.21-1.0.15. - New: KSP: more accurately represent function types ([#​1742](https://togithub.com/square/kotlinpoet/issues/1742)). </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/TBD54566975/ftl). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44MS4zIiwidXBkYXRlZEluVmVyIjoiMzcuODEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
The funny part for me is that I never used relative paths before and started using in the (short-lived) reverted version. When I updated this week everything broke 😿 |
This fix is now available behind the |
The proposed solution to the problem wouldn't work: <BrowserRouter>
<Routes>
<Route path="dashboard">
<Route path="*" element={<Dashboard />} />
</Route>
</Routes>
</BrowserRouter> Since the "dashboard" path doesn't have an element, it would render an You could either add another splat: <Route path="dashboard/*">
<Route path="*" element={<Dashboard />} />
</Route> Or use an index route to make sure the Outlet isn't empty: "Index routes render in their parent route's outlet at the parent route's path." <Route path="dashboard">
<Route index path="*" element={<Dashboard />} />
</Route> Splat routes are extremely useful and allows us to attach "mini apps" (features) that handle themselves, decide their own routing hierarchy, and don't care about naming conflicts with other parts of the app. As the changelog says:
Want a messaging system? Just plug it in: |
Oops - typo! I just pushed an update to add
We agree! The issue is that the prior approach introduced convenience at the cost of inconsistency:
|
@brophdawg11 is it feasible to expose to components the root path where its immediate router assembly is mounted? I mean if a |
@birdofpreyru You could determine the parent path by stripping the splat value out of the location: let location = useLocation();
let params = useParams();
let splatParentPath = params["*"]
? location.pathname.replace(params["*"], "")
: null; I don't know if we'd want to expose those types of internal router details via public API offhand, but feel free to open a proposal with some use-cases! |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [react-router](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router)) | [`6.16.0` -> `6.20.1`](https://renovatebot.com/diffs/npm/react-router/6.16.0/6.20.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router/6.16.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router/6.16.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react-router-dom](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.16.0` -> `6.20.1`](https://renovatebot.com/diffs/npm/react-router-dom/6.16.0/6.20.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.16.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.16.0/6.20.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>remix-run/react-router (react-router)</summary> ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.20.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6200) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.0) ##### Minor Changes - Export the `PathParam` type from the public API ([#​10719](https://togithub.com/remix-run/react-router/pull/10719)) ##### Patch Changes - Fix bug with `resolveTo` in splat routes ([#​11045](https://togithub.com/remix-run/react-router/pull/11045)) - This is a follow up to [#​10983](https://togithub.com/remix-run/react-router/pull/10983) to handle the few other code paths using `getPathContributingMatches` - This removes the `UNSAFE_getPathContributingMatches` export from `@remix-run/router` since we no longer need this in the `react-router`/`react-router-dom` layers - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.19.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6190) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.19.0) ##### Minor Changes - Add `unstable_flushSync` option to `useNavigate`/`useSumbit`/`fetcher.load`/`fetcher.submit` to opt-out of `React.startTransition` and into `ReactDOM.flushSync` for state updates ([#​11005](https://togithub.com/remix-run/react-router/pull/11005)) - Remove the `unstable_` prefix from the [`useBlocker`](https://reactrouter.com/en/main/hooks/use-blocker) hook as it's been in use for enough time that we are confident in the API. We do not plan to remove the prefix from `unstable_usePrompt` due to differences in how browsers handle `window.confirm` that prevent React Router from guaranteeing consistent/correct behavior. ([#​10991](https://togithub.com/remix-run/react-router/pull/10991)) ##### Patch Changes - Fix `useActionData` so it returns proper contextual action data and not *any* action data in the tree ([#​11023](https://togithub.com/remix-run/react-router/pull/11023)) - Fix bug in `useResolvedPath` that would cause `useResolvedPath(".")` in a splat route to lose the splat portion of the URL path. ([#​10983](https://togithub.com/remix-run/react-router/pull/10983)) -⚠️ This fixes a quite long-standing bug specifically for `"."` paths inside a splat route which incorrectly dropped the splat portion of the URL. If you are relative routing via `"."` inside a splat route in your application you should double check that your logic is not relying on this buggy behavior and update accordingly. - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.18.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6180) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.18.0) ##### Patch Changes - Fix the `future` prop on `BrowserRouter`, `HashRouter` and `MemoryRouter` so that it accepts a `Partial<FutureConfig>` instead of requiring all flags to be included. ([#​10962](https://togithub.com/remix-run/react-router/pull/10962)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.17.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6170) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.17.0) ##### Patch Changes - Fix `RouterProvider` `future` prop type to be a `Partial<FutureConfig>` so that not all flags must be specified ([#​10900](https://togithub.com/remix-run/react-router/pull/10900)) - Updated dependencies: - `@remix-run/[email protected]` </details> <details> <summary>remix-run/react-router (react-router-dom)</summary> ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.20.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6200) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.0) ##### Minor Changes - Export the `PathParam` type from the public API ([#​10719](https://togithub.com/remix-run/react-router/pull/10719)) ##### Patch Changes - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.19.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6190) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.19.0) ##### Minor Changes - Add `unstable_flushSync` option to `useNavigate`/`useSumbit`/`fetcher.load`/`fetcher.submit` to opt-out of `React.startTransition` and into `ReactDOM.flushSync` for state updates ([#​11005](https://togithub.com/remix-run/react-router/pull/11005)) - Allow `unstable_usePrompt` to accept a `BlockerFunction` in addition to a `boolean` ([#​10991](https://togithub.com/remix-run/react-router/pull/10991)) ##### Patch Changes - Fix issue where a changing fetcher `key` in a `useFetcher` that remains mounted wasn't getting picked up ([#​11009](https://togithub.com/remix-run/react-router/pull/11009)) - Fix `useFormAction` which was incorrectly inheriting the `?index` query param from child route `action` submissions ([#​11025](https://togithub.com/remix-run/react-router/pull/11025)) - Fix `NavLink` `active` logic when `to` location has a trailing slash ([#​10734](https://togithub.com/remix-run/react-router/pull/10734)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.18.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6180) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.18.0) ##### Minor Changes - Add support for manual fetcher key specification via `useFetcher({ key: string })` so you can access the same fetcher instance from different components in your application without prop-drilling ([RFC](https://togithub.com/remix-run/remix/discussions/7698)) ([#​10960](https://togithub.com/remix-run/react-router/pull/10960)) - Fetcher keys are now also exposed on the fetchers returned from `useFetchers` so that they can be looked up by `key` - Add `navigate`/`fetcherKey` params/props to `useSumbit`/`Form` to support kicking off a fetcher submission under the hood with an optionally user-specified `key` ([#​10960](https://togithub.com/remix-run/react-router/pull/10960)) - Invoking a fetcher in this way is ephemeral and stateless - If you need to access the state of one of these fetchers, you will need to leverage `useFetcher({ key })` to look it up elsewhere ##### Patch Changes - Adds a fetcher context to `RouterProvider` that holds completed fetcher data, in preparation for the upcoming future flag that will change the fetcher persistence/cleanup behavior ([#​10961](https://togithub.com/remix-run/react-router/pull/10961)) - Fix the `future` prop on `BrowserRouter`, `HashRouter` and `MemoryRouter` so that it accepts a `Partial<FutureConfig>` instead of requiring all flags to be included. ([#​10962](https://togithub.com/remix-run/react-router/pull/10962)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.17.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6170) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.17.0) ##### Minor Changes - Add experimental support for the [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition) via `document.startViewTransition` to enable CSS animated transitions on SPA navigations in your application. ([#​10916](https://togithub.com/remix-run/react-router/pull/10916)) The simplest approach to enabling a View Transition in your React Router app is via the new `<Link unstable_viewTransition>` prop. This will cause the navigation DOM update to be wrapped in `document.startViewTransition` which will enable transitions for the DOM update. Without any additional CSS styles, you'll get a basic cross-fade animation for your page. If you need to apply more fine-grained styles for your animations, you can leverage the `unstable_useViewTransitionState` hook which will tell you when a transition is in progress and you can use that to apply classes or styles: ```jsx function ImageLink(to, src, alt) { let isTransitioning = unstable_useViewTransitionState(to); return ( <Link to={to} unstable_viewTransition> <img src={src} alt={alt} style={{ viewTransitionName: isTransitioning ? "image-expand" : "", }} /> </Link> ); } ``` You can also use the `<NavLink unstable_viewTransition>` shorthand which will manage the hook usage for you and automatically add a `transitioning` class to the `<a>` during the transition: ```css a.transitioning img { view-transition-name: "image-expand"; } ``` ```jsx <NavLink to={to} unstable_viewTransition> <img src={src} alt={alt} /> </NavLink> ``` For an example usage of View Transitions with React Router, check out [our fork](https://togithub.com/brophdawg11/react-router-records) of the [Astro Records](https://togithub.com/Charca/astro-records) demo. For more information on using the View Transitions API, please refer to the [Smooth and simple transitions with the View Transitions API](https://developer.chrome.com/docs/web-platform/view-transitions/) guide from the Google Chrome team. Please note, that because the `ViewTransition` API is a DOM API, we now export a specific `RouterProvider` from `react-router-dom` with this functionality. If you are importing `RouterProvider` from `react-router`, then it will not support view transitions. ([#​10928](https://togithub.com/remix-run/react-router/pull/10928) ##### Patch Changes - Log a warning and fail gracefully in `ScrollRestoration` when `sessionStorage` is unavailable ([#​10848](https://togithub.com/remix-run/react-router/pull/10848)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am every weekday" in timezone Europe/Madrid, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/Unleash/unleash). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44MS4zIiwidXBkYXRlZEluVmVyIjoiMzcuODcuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.14.15` -> `20.15.0`](https://renovatebot.com/diffs/npm/@types%2fnode/20.14.15/20.15.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.14.15/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.14.15/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [lint-staged](https://togithub.com/lint-staged/lint-staged) | [`15.2.8` -> `15.2.9`](https://renovatebot.com/diffs/npm/lint-staged/15.2.8/15.2.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lint-staged/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lint-staged/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lint-staged/15.2.8/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lint-staged/15.2.8/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react](https://reactjs.org/) ([source](https://togithub.com/facebook/react/tree/HEAD/packages/react)) | [`18.2.0` -> `18.3.1`](https://renovatebot.com/diffs/npm/react/18.2.0/18.3.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react-dom](https://reactjs.org/) ([source](https://togithub.com/facebook/react/tree/HEAD/packages/react-dom)) | [`18.2.0` -> `18.3.1`](https://renovatebot.com/diffs/npm/react-dom/18.2.0/18.3.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-dom/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-dom/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-dom/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-dom/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react-router](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router)) | [`6.15.0` -> `6.26.1`](https://renovatebot.com/diffs/npm/react-router/6.15.0/6.26.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react-router-dom](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.15.0` -> `6.26.1`](https://renovatebot.com/diffs/npm/react-router-dom/6.15.0/6.26.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>lint-staged/lint-staged (lint-staged)</summary> ### [`v15.2.9`](https://togithub.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1529) [Compare Source](https://togithub.com/lint-staged/lint-staged/compare/v15.2.8...v15.2.9) ##### Patch Changes - [#​1463](https://togithub.com/lint-staged/lint-staged/pull/1463) [`b69ce2d`](https://togithub.com/lint-staged/lint-staged/commit/b69ce2ddfd5a7ae576f4fef4afc60b8a81f3c945) Thanks [@​iiroj](https://togithub.com/iiroj)! - Set the maximum number of event listeners to the number of tasks. This should silence the console warning `MaxListenersExceededWarning: Possible EventEmitter memory leak detected`. </details> <details> <summary>facebook/react (react)</summary> ### [`v18.3.1`](https://togithub.com/facebook/react/compare/a87edf62d7d69705ddbcec9a24f0780b3db7535f...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.3.0...v18.3.1) ### [`v18.3.0`](https://togithub.com/facebook/react/compare/v18.2.0...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.2.0...v18.3.0) </details> <details> <summary>facebook/react (react-dom)</summary> ### [`v18.3.1`](https://togithub.com/facebook/react/compare/a87edf62d7d69705ddbcec9a24f0780b3db7535f...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.3.0...v18.3.1) ### [`v18.3.0`](https://togithub.com/facebook/react/compare/v18.2.0...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.2.0...v18.3.0) </details> <details> <summary>remix-run/react-router (react-router)</summary> ### [`v6.26.1`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) ### [`v6.26.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6260) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.0) ##### Minor Changes - Add a new `replace(url, init?)` alternative to `redirect(url, init?)` that performs a `history.replaceState` instead of a `history.pushState` on client-side navigation redirects ([#​11811](https://togithub.com/remix-run/react-router/pull/11811)) ##### Patch Changes - Fix initial hydration behavior when using `future.v7_partialHydration` along with `unstable_patchRoutesOnMiss` ([#​11838](https://togithub.com/remix-run/react-router/pull/11838)) - During initial hydration, `router.state.matches` will now include any partial matches so that we can render ancestor `HydrateFallback` components - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.25.1`](https://togithub.com/remix-run/react-router/releases/tag/react-router%406.25.1): v6.25.1 [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.1) See the changelog for release notes: https://github.com/remix-run/react-router/blob/main/CHANGELOG.md#v6251 ### [`v6.25.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6250) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.0) ##### Minor Changes - Stabilize `future.unstable_skipActionErrorRevalidation` as `future.v7_skipActionErrorRevalidation` ([#​11769](https://togithub.com/remix-run/react-router/pull/11769)) - When this flag is enabled, actions will not automatically trigger a revalidation if they return/throw a `Response` with a `4xx`/`5xx` status code - You may still opt-into revalidation via `shouldRevalidate` - This also changes `shouldRevalidate`'s `unstable_actionStatus` parameter to `actionStatus` ##### Patch Changes - Fix regression and properly decode paths inside `useMatch` so matches/params reflect decoded params ([#​11789](https://togithub.com/remix-run/react-router/pull/11789)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.24.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6241) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.1) ##### Patch Changes - When using `future.v7_relativeSplatPath`, properly resolve relative paths in splat routes that are children of pathless routes ([#​11633](https://togithub.com/remix-run/react-router/pull/11633)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.24.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6240) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.0) ##### Minor Changes - Add support for Lazy Route Discovery (a.k.a. Fog of War) ([#​11626](https://togithub.com/remix-run/react-router/pull/11626)) - RFC: <https://togithub.com/remix-run/react-router/discussions/11113> - `unstable_patchRoutesOnMiss` docs: <https://reactrouter.com/en/main/routers/create-browser-router> ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.23.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6231) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.1) ##### Patch Changes - allow undefined to be resolved with `<Await>` ([#​11513](https://togithub.com/remix-run/react-router/pull/11513)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.23.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6230) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.0) ##### Minor Changes - Add a new `unstable_dataStrategy` configuration option ([#​11098](https://togithub.com/remix-run/react-router/pull/11098)) - This option allows Data Router applications to take control over the approach for executing route loaders and actions - The default implementation is today's behavior, to fetch all loaders in parallel, but this option allows users to implement more advanced data flows including Remix single-fetch, middleware/context APIs, automatic loader caching, and more ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.22.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6223) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.3) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.22.2`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6222) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.2) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.22.1`](https://togithub.com/remix-run/react-router/releases/tag/react-router%406.22.1): v6.22.1 [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.1) See the changelog for release notes: https://github.com/remix-run/react-router/blob/main/CHANGELOG.md#v6221 ### [`v6.22.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6220) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.0) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.21.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6213) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.3) ##### Patch Changes - Remove leftover `unstable_` prefix from `Blocker`/`BlockerFunction` types ([#​11187](https://togithub.com/remix-run/react-router/pull/11187)) ### [`v6.21.2`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) ### [`v6.21.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6211) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.1) ##### Patch Changes - Fix bug with `route.lazy` not working correctly on initial SPA load when `v7_partialHydration` is specified ([#​11121](https://togithub.com/remix-run/react-router/pull/11121)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.21.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6210) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.0) ##### Minor Changes - Add a new `future.v7_relativeSplatPath` flag to implement a breaking bug fix to relative routing when inside a splat route. ([#​11087](https://togithub.com/remix-run/react-router/pull/11087)) This fix was originally added in [#​10983](https://togithub.com/remix-run/react-router/issues/10983) and was later reverted in [#​11078](https://togithub.com/remix-run/react-router/pull/11078) because it was determined that a large number of existing applications were relying on the buggy behavior (see [#​11052](https://togithub.com/remix-run/react-router/issues/11052)) **The Bug** The buggy behavior is that without this flag, the default behavior when resolving relative paths is to *ignore* any splat (`*`) portion of the current route path. **The Background** This decision was originally made thinking that it would make the concept of nested different sections of your apps in `<Routes>` easier if relative routing would *replace* the current splat: ```jsx <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="dashboard/*" element={<Dashboard />} /> </Routes> </BrowserRouter> ``` Any paths like `/dashboard`, `/dashboard/team`, `/dashboard/projects` will match the `Dashboard` route. The dashboard component itself can then render nested `<Routes>`: ```jsx function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="/">Dashboard Home</Link> <Link to="team">Team</Link> <Link to="projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Routes> </div> ); } ``` Now, all links and route paths are relative to the router above them. This makes code splitting and compartmentalizing your app really easy. You could render the `Dashboard` as its own independent app, or embed it into your large app without making any changes to it. **The Problem** The problem is that this concept of ignoring part of a path breaks a lot of other assumptions in React Router - namely that `"."` always means the current location pathname for that route. When we ignore the splat portion, we start getting invalid paths when using `"."`: ```jsx // If we are on URL /dashboard/team, and we want to link to /dashboard/team: function DashboardTeam() { // ❌ This is broken and results in <a href="/dashboard"> return <Link to=".">A broken link to the Current URL</Link>; // ✅ This is fixed but super unintuitive since we're already at /dashboard/team! return <Link to="./team">A broken link to the Current URL</Link>; } ``` We've also introduced an issue that we can no longer move our `DashboardTeam` component around our route hierarchy easily - since it behaves differently if we're underneath a non-splat route, such as `/dashboard/:widget`. Now, our `"."` links will, properly point to ourself *inclusive of the dynamic param value* so behavior will break from it's corresponding usage in a `/dashboard/*` route. Even worse, consider a nested splat route configuration: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> ``` Now, a `<Link to=".">` and a `<Link to="..">` inside the `Dashboard` component go to the same place! That is definitely not correct! Another common issue arose in Data Routers (and Remix) where any `<Form>` should post to it's own route `action` if you the user doesn't specify a form action: ```jsx let router = createBrowserRouter({ path: "/dashboard", children: [ { path: "*", action: dashboardAction, Component() { // ❌ This form is broken! It throws a 405 error when it submits because // it tries to submit to /dashboard (without the splat value) and the parent // `/dashboard` route doesn't have an action return <Form method="post">...</Form>; }, }, ], }); ``` This is just a compounded issue from the above because the default location for a `Form` to submit to is itself (`"."`) - and if we ignore the splat portion, that now resolves to the parent route. **The Solution** If you are leveraging this behavior, it's recommended to enable the future flag, move your splat to it's own route, and leverage `../` for any links to "sibling" pages: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route index path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="..">Dashboard Home</Link> <Link to="../team">Team</Link> <Link to="../projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Router> </div> ); } ``` This way, `.` means "the full current pathname for my route" in all cases (including static, dynamic, and splat routes) and `..` always means "my parents pathname". ##### Patch Changes - Properly handle falsy error values in ErrorBoundary's ([#​11071](https://togithub.com/remix-run/react-router/pull/11071)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.20.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6200) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.0) ##### Minor Changes - Export the `PathParam` type from the public API ([#​10719](https://togithub.com/remix-run/react-router/pull/10719)) ##### Patch Changes - Fix bug with `resolveTo` in splat routes ([#​11045](https://togithub.com/remix-run/react-router/pull/11045)) - This is a follow up to [#​10983](https://togithub.com/remix-run/react-router/pull/10983) to handle the few other code paths using `getPathContributingMatches` - This removes the `UNSAFE_getPathContributingMatches` export from `@remix-run/router` since we no longer need this in the `react-router`/`react-router-dom` layers - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.19.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6190) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.19.0) ##### Minor Changes - Add `unstable_flushSync` option to `useNavigate`/`useSumbit`/`fetcher.load`/`fetcher.submit` to opt-out of `React.startTransition` and into `ReactDOM.flushSync` for state updates ([#​11005](https://togithub.com/remix-run/react-router/pull/11005)) - Remove the `unstable_` prefix from the [`useBlocker`](https://reactrouter.com/en/main/hooks/use-blocker) hook as it's been in use for enough time that we are confident in the API. We do not plan to remove the prefix from `unstable_usePrompt` due to differences in how browsers handle `window.confirm` that prevent React Router from guaranteeing consistent/correct behavior. ([#​10991](https://togithub.com/remix-run/react-router/pull/10991)) ##### Patch Changes - Fix `useActionData` so it returns proper contextual action data and not *any* action data in the tree ([#​11023](https://togithub.com/remix-run/react-router/pull/11023)) - Fix bug in `useResolvedPath` that would cause `useResolvedPath(".")` in a splat route to lose the splat portion of the URL path. ([#​10983](https://togithub.com/remix-run/react-router/pull/10983)) -⚠️ This fixes a quite long-standing bug specifically for `"."` paths inside a splat route which incorrectly dropped the splat portion of the URL. If you are relative routing via `"."` inside a splat route in your application you should double check that your logic is not relying on this buggy behavior and update accordingly. - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.18.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6180) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.18.0) ##### Patch Changes - Fix the `future` prop on `BrowserRouter`, `HashRouter` and `MemoryRouter` so that it accepts a `Partial<FutureConfig>` instead of requiring all flags to be included. ([#​10962](https://togithub.com/remix-run/react-router/pull/10962)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.17.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6170) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.17.0) ##### Patch Changes - Fix `RouterProvider` `future` prop type to be a `Partial<FutureConfig>` so that not all flags must be specified ([#​10900](https://togithub.com/remix-run/react-router/pull/10900)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.16.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6160) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.16.0) ##### Minor Changes - In order to move towards stricter TypeScript support in the future, we're aiming to replace current usages of `any` with `unknown` on exposed typings for user-provided data. To do this in Remix v2 without introducing breaking changes in React Router v6, we have added generics to a number of shared types. These continue to default to `any` in React Router and are overridden with `unknown` in Remix. In React Router v7 we plan to move these to `unknown` as a breaking change. ([#​10843](https://togithub.com/remix-run/react-router/pull/10843)) - `Location` now accepts a generic for the `location.state` value - `ActionFunctionArgs`/`ActionFunction`/`LoaderFunctionArgs`/`LoaderFunction` now accept a generic for the `context` parameter (only used in SSR usages via `createStaticHandler`) - The return type of `useMatches` (now exported as `UIMatch`) accepts generics for `match.data` and `match.handle` - both of which were already set to `unknown` - Move the `@private` class export `ErrorResponse` to an `UNSAFE_ErrorResponseImpl` export since it is an implementation detail and there should be no construction of `ErrorResponse` instances in userland. This frees us up to export a `type ErrorResponse` which correlates to an instance of the class via `InstanceType`. Userland code should only ever be using `ErrorResponse` as a type and should be type-narrowing via `isRouteErrorResponse`. ([#​10811](https://togithub.com/remix-run/react-router/pull/10811)) - Export `ShouldRevalidateFunctionArgs` interface ([#​10797](https://togithub.com/remix-run/react-router/pull/10797)) - Removed private/internal APIs only required for the Remix v1 backwards compatibility layer and no longer needed in Remix v2 (`_isFetchActionRedirect`, `_hasFetcherDoneAnything`) ([#​10715](https://togithub.com/remix-run/react-router/pull/10715)) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` </details> <details> <summary>remix-run/react-router (react-router-dom)</summary> ### [`v6.26.1`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) ### [`v6.26.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6260) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.0) ##### Minor Changes - Add a new `replace(url, init?)` alternative to `redirect(url, init?)` that performs a `history.replaceState` instead of a `history.pushState` on client-side navigation redirects ([#​11811](https://togithub.com/remix-run/react-router/pull/11811)) ##### Patch Changes - Fix initial hydration behavior when using `future.v7_partialHydration` along with `unstable_patchRoutesOnMiss` ([#​11838](https://togithub.com/remix-run/react-router/pull/11838)) - During initial hydration, `router.state.matches` will now include any partial matches so that we can render ancestor `HydrateFallback` components - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.25.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6251) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.1) ##### Patch Changes - Memoize some `RouterProvider` internals to reduce unnecessary re-renders ([#​11803](https://togithub.com/remix-run/react-router/pull/11803)) - Updated dependencies: - `[email protected]` ### [`v6.25.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6250) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.0) ##### Minor Changes - Stabilize `future.unstable_skipActionErrorRevalidation` as `future.v7_skipActionErrorRevalidation` ([#​11769](https://togithub.com/remix-run/react-router/pull/11769)) - When this flag is enabled, actions will not automatically trigger a revalidation if they return/throw a `Response` with a `4xx`/`5xx` status code - You may still opt-into revalidation via `shouldRevalidate` - This also changes `shouldRevalidate`'s `unstable_actionStatus` parameter to `actionStatus` ##### Patch Changes - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.24.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6241) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.1) ##### Patch Changes - Remove `polyfill.io` reference from warning message because the domain was sold and has since been determined to serve malware ([#​11741](https://togithub.com/remix-run/react-router/pull/11741)) - See <https://sansec.io/research/polyfill-supply-chain-attack> - Export `NavLinkRenderProps` type for easier typing of custom `NavLink` callback ([#​11553](https://togithub.com/remix-run/react-router/pull/11553)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.24.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6240) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.0) ##### Minor Changes - Add support for Lazy Route Discovery (a.k.a. Fog of War) ([#​11626](https://togithub.com/remix-run/react-router/pull/11626)) - RFC: <https://togithub.com/remix-run/react-router/discussions/11113> - `unstable_patchRoutesOnMiss` docs: <https://reactrouter.com/en/main/routers/create-browser-router> ##### Patch Changes - Fix `fetcher.submit` types - remove incorrect `navigate`/`fetcherKey`/`unstable_viewTransition` options because they are only relevant for `useSubmit` ([#​11631](https://togithub.com/remix-run/react-router/pull/11631)) - Allow falsy `location.state` values passed to `<StaticRouter>` ([#​11495](https://togithub.com/remix-run/react-router/pull/11495)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.23.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6231) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.1) ##### Patch Changes - Check for `document` existence when checking `startViewTransition` ([#​11544](https://togithub.com/remix-run/react-router/pull/11544)) - Change the `react-router-dom/server` import back to `react-router-dom` instead of `index.ts` ([#​11514](https://togithub.com/remix-run/react-router/pull/11514)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.23.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6230) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.0) ##### Minor Changes - Add a new `unstable_dataStrategy` configuration option ([#​11098](https://togithub.com/remix-run/react-router/pull/11098)) - This option allows Data Router applications to take control over the approach for executing route loaders and actions - The default implementation is today's behavior, to fetch all loaders in parallel, but this option allows users to implement more advanced data flows including Remix single-fetch, middleware/context APIs, automatic loader caching, and more ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.22.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6223) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.3) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.22.2`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6222) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.2) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.22.1`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.1) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.1) ### [`v6.22.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6220) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.0) ##### Minor Changes - Include a `window__reactRouterVersion` tag for CWV Report detection ([#​11222](https://togithub.com/remix-run/react-router/pull/11222)) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.21.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6213) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.3) ##### Patch Changes - Fix `NavLink` `isPending` when a `basename` is used ([#​11195](https://togithub.com/remix-run/react-router/pull/11195)) - Remove leftover `unstable_` prefix from `Blocker`/`BlockerFunction` types ([#​11187](https://togithub.com/remix-run/react-router/pull/11187)) - Updated dependencies: - `[email protected]` ### [`v6.21.2`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) ### [`v6.21.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6211) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.1) ##### Patch Changes - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.21.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6210) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.0) ##### Minor Changes - Add a new `future.v7_relativeSplatPath` flag to implement a breaking bug fix to relative routing when inside a splat route. ([#​11087](https://togithub.com/remix-run/react-router/pull/11087)) This fix was originally added in [#​10983](https://togithub.com/remix-run/react-router/issues/10983) and was later reverted in [#​11078](https://togithub.com/remix-run/react-router/pull/11078) because it was determined that a large number of existing applications were relying on the buggy behavior (see [#​11052](https://togithub.com/remix-run/react-router/issues/11052)) **The Bug** The buggy behavior is that without this flag, the default behavior when resolving relative paths is to *ignore* any splat (`*`) portion of the current route path. **The Background** This decision was originally made thinking that it would make the concept of nested different sections of your apps in `<Routes>` easier if relative routing would *replace* the current splat: ```jsx <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="dashboard/*" element={<Dashboard />} /> </Routes> </BrowserRouter> ``` Any paths like `/dashboard`, `/dashboard/team`, `/dashboard/projects` will match the `Dashboard` route. The dashboard component itself can then render nested `<Routes>`: ```jsx function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="/">Dashboard Home</Link> <Link to="team">Team</Link> <Link to="projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Routes> </div> ); } ``` Now, all links and route paths are relative to the router above them. This makes code splitting and compartmentalizing your app really easy. You could render the `Dashboard` as its own independent app, or embed it into your large app without making any changes to it. **The Problem** The problem is that this concept of ignoring part of a path breaks a lot of other assumptions in React Router - namely that `"."` always means the current location pathname for that route. When we ignore the splat portion, we start getting invalid paths when using `"."`: ```jsx // If we are on URL /dashboard/team, and we want to link to /dashboard/team: function DashboardTeam() { // ❌ This is broken and results in <a href="/dashboard"> return <Link to=".">A broken link to the Current URL</Link>; // ✅ This is fixed but super unintuitive since we're already at /dashboard/team! return <Link to="./team">A broken link to the Current URL</Link>; } ``` We've also introduced an issue that we can no longer move our `DashboardTeam` component around our route hierarchy easily - since it behaves differently if we're underneath a non-splat route, such as `/dashboard/:widget`. Now, our `"."` links will, properly point to ourself *inclusive of the dynamic param value* so behavior will break from it's corresponding usage in a `/dashboard/*` route. Even worse, consider a nested splat route configuration: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> ``` Now, a `<Link to=".">` and a `<Link to="..">` inside the `Dashboard` component go to the same place! That is definitely not correct! Another common issue arose in Data Routers (and Remix) where any `<Form>` should post to it's own route `action` if you the user doesn't specify a form action: ```jsx let router = createBrowserRouter({ path: "/dashboard", children: [ { path: "*", action: dashboardAction, Component() { // ❌ This form is broken! It throws a 405 error when it submits because // it tries to submit to /dashboard (without the splat value) and the parent // `/dashboard` route doesn't have an action return <Form method="post">...</Form>; }, }, ], }); ``` This is just a compounded issue from the above because the default location for a `Form` to submit to is itself (`"."`) - and if we ignore the splat portion, that now resolves to the parent route. **The Solution** If you are leveraging this behavior, it's recommended to enable the future flag, move your splat to it's own route, and leverage `../` for any links to "sibling" pages: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route index path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="..">Dashboard Home</Link> <Link to="../team">Team</Link> <Link to="../projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Router> </div> ); } ``` This way, `.` means "the full current pathname for my route" in all cases (including static, dynamic, and splat routes) and `..` always means "my parents pathname". ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.20.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6200) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.0) ##### Minor Changes - Export the `PathParam` type from the public API ([#​10719](https://togithub.com/remix-run/react-router/pull/10719)) ##### Patch Changes - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.19.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6190) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.19.0) ##### Minor Changes - Add `unstable_flushSync` option to `useNavigate`/`useSumbit`/`fetcher.load`/`fetcher.submit` to opt-out of `React.startTransition` and into `ReactDOM.flushSync` for state updates ([#​11005](https://togithub.com/remix-run/react-router/pull/11005)) - Allow `unstable_usePrompt` to accept a `BlockerFunction` in addition to a `boolean` ([#​10991](https://togithub.com/remix-run/react-router/pull/10991)) ##### Patch Changes - Fix issue where a changing fetcher `key` in a `useFetcher` that remains mounted wasn't getting picked up ([#​11009](https://togithub.com/remix-run/react-router/pull/11009)) - Fix `useFormAction` which was incorrectly inheriting the `?index` query param from child route `action` submissions ([#​11025](https://togithub.com/remix-run/react-router/pull/11025)) - Fix `NavLink` `active` logic when `to` location has a trailing slash ([#​10734](https://togithub.com/remix-run/react-router/pull/10734)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.18.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6180) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.18.0) ##### Minor Changes - Add support for manual fetcher key specification via `useFetcher({ key: string })` so you can access the same fetcher instance from different components in your application without prop-drilling ([RFC](https://togithub.com/remix-run/remix/discussions/7698)) ([#​10960](https://togithub.com/remix-run/react-router/pull/10960)) - Fetcher keys are now also exposed on the fetchers returned from `useFetchers` so that they can be looked up by `key` - Add `navigate`/`fetcherKey` params/props to `useSumbit`/`Form` to support kicking off a fetcher submission under the hood with an optionally user-specified `key` ([#​10960](https://togithub.com/remix-run/react-router/pull/10960)) - Invoking a fetcher in this way is ephemeral and stateless - If you need to access the state of one of these fetchers, you will need to leverage `useFetcher({ key })` to look it up elsewhere ##### Patch Changes - Adds a fetcher context to `RouterProvider` that holds completed fetcher data, in preparation for the upcoming future flag that will change the fetcher persistence/cleanup behavior ([#​10961](https://togithub.com/remix-run/react-router/pull/10961)) - Fix the `future` prop on `BrowserRouter`, `HashRouter` and `MemoryRouter` so that it accepts a `Partial<FutureConfig>` instead of requiring all flags to be included. ([#​10962](https://togithub.com/remix-run/react-router/pull/10962)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.17.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6170) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.17.0) ##### Minor Changes - Add experimental support for the [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition) via `document.startViewTransition` to enable CSS animated transitions on SPA navigations in your application. ([#​10916](https://togithub.com/remix-run/react-router/pull/10916)) The simplest approach to enabling a View Transition in your React Router app is via the new `<Link unstable_viewTransition>` prop. This will cause the navigation DOM update to be wrapped in `document.startViewTransition` which will enable transitions for the DOM update. Without any additional CSS styles, you'll get a basic cross-fade animation for your page. If you need to apply more fine-grained styles for your animations, you can leverage the `unstable_useViewTransitionState` hook which will tell you when a transition is in progress and you can use that to apply classes or styles: ```jsx function ImageLink(to, src, alt) { let isTransitioning = unstable_useViewTransitionState(to); return ( <Link to={to} unstable_viewTransition> <img src={src} alt={alt} style={{ viewTransitionName: isTransitioning ? "image-expand" : "", }} /> </Link> ); } ``` You can also use the `<NavLink unstable_viewTransition>` shorthand which will manage the hook usage for you and automatically add a `transitioning` class to the `<a>` during the transition: ```css a.transitioning img { view-transition-name: "image-expand"; } ``` ```jsx <NavLink to={to} unstable_viewTransition> <img src={src} alt={alt} /> </NavLink> ``` For an example usage of View Transitions with React Router, check out [our fork](https://togithub.com/brophdawg11/react-router-records) of the [Astro Records](https://togithub.com/Charca/astro-records) demo. For more information on using the View Transitions API, please refer to the [Smooth and simple transitions with the View Transitions API](https://developer.chrome.com/docs/web-platform/view-transitions/) guide from the Google Chrome team. Please note, that because the `ViewTransition` API is a DOM API, we now export a specific `RouterProvider` from `react-router-dom` with this functionality. If you are importing `RouterProvider` from `react-router`, then it will not support view transitions. ([#​10928](https://togithub.com/remix-run/react-router/pull/10928) ##### Patch Changes - Log a warning and fail gracefully in `ScrollRestoration` when `sessionStorage` is unavailable ([#​10848](https://togithub.com/remix-run/react-router/pull/10848)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.16.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6160) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.16.0) ##### Minor Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ##### Patch Changes - Properly encode rendered URIs in server rendering to avoid hydration errors ([#​10769](https://togithub.com/remix-run/react-router/pull/10769)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "* 0-4 * * 3" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/brave/brave-variations). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yNi4xIiwidXBkYXRlZEluVmVyIjoiMzguMjYuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
What version of React Router are you using?
6.20
Steps to Reproduce
Because of useResolvedPath is broken, now I am unable to deal with navigate inside the wildcard '/path/to/*' route ...
eg:
Expected Behavior
It will always navigate to
/base/path/to
before useResolvedPath is broken.Actual Behavior
It will navigate /base/path/to/path/to/path/to/... depends on my current path both navigate and <Link>.
The text was updated successfully, but these errors were encountered: