Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[Bug]: useResolvedPath breaking. #11052

Closed
chinfeng opened this issue Nov 23, 2023 · 18 comments
Closed

[Bug]: useResolvedPath breaking. #11052

chinfeng opened this issue Nov 23, 2023 · 18 comments
Labels

Comments

@chinfeng
Copy link

chinfeng commented Nov 23, 2023

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:

// route path is "/base/*"
const to = useResolvedPath('path/to');
const handle = () => navigate(to);
<Link to="path/to">path/to</Link>

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>.

@chinfeng chinfeng added the bug label Nov 23, 2023
@ilteoood
Copy link

I'm experiencing the same with Link and useNavigate.
Everything seems to be working fine with version 6.19.0

@birdofpreyru
Copy link

birdofpreyru commented Nov 27, 2023

+1. useResolvedPath() is broken since v6.19.0, the issue persists in the latest v6.20.0, and it used to work fine in v6.18.0.

In my project I call useResolvedPath('*') when at the current location /some/path. Up to v6.18.0 it was resulting in

{
  "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.

@birdofpreyru
Copy link

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.

@brophdawg11
Copy link
Contributor

This is due to a bug fix that was included in 6.19.0 and called out in the release notes.

Relative path resolution without any leading . or .. is relative to the current location in the route hierarchy.

So if you are on a path /a/b/c and you resolve a path d/e via Link/navigate/useResolvedPath, the resulting resolved path should be /a/b/c/d/e since it is resolved from the current location.

Previously in splat routes, this was broken and was relative to the parent (if the splat was alone in the route path - path="*") or relative to only a portion of the current route path (path="parent/*"). This was incorrect and inconsistent with how relative routing works in React Router for static routes and dynamic param routes.

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 react-router-dom version back to 6.18.0, you can see how the splat route is handled differently (and incorrectly) compared to other route types.

Another case that this shows itself (the original bug that was filed in Remix) is when using <Form action="."> on a splat route and the form does not submit to the current location but instead the parent location without the splat route which is also incorrect and results in a 405 error: https://codesandbox.io/p/sandbox/ecstatic-gagarin-fv76x7?file=%2Fsrc%2Findex.js

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 6.19.0 release notes.

If you are using a splat route hierarchy such as <Route path="parent"><Route path="*"></Route>, then the best way to handle this is to add a .. to your path to make it resolve relative to the parent (without the splat value). If your splat is embedded in the path such as <Route path="parent/*"> and you want to "replace" the splat value, you can do that with a replacement such as:

let location = useLocation();
let params = useParams;
let newPath = location.pathname.replace(new RegExp(`${params["*"]}$`), 'new/path')

@brophdawg11 brophdawg11 closed this as not planned Won't fix, can't repro, duplicate, stale Nov 27, 2023
@chinfeng
Copy link
Author

#11063

@fzaninotto
Copy link

fzaninotto commented Nov 28, 2023

Please reopen this. You've published a breaking change in a minor version.

We take the stability of React Router seriously

Closing this issue proves the contrary. You can't ignore the thousands of existing apps that your change have broken.

@ryanflorence
Copy link
Member

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 * differently and we probably introduced a new bug when fixing the other.

@ryanflorence ryanflorence reopened this Nov 28, 2023
@dperetti
Copy link

You can't ignore the thousands of existing apps that your change have broken.

Yep, Remix app broken in prod 🙋.

AntoLC added a commit to openfun/marsha that referenced this issue Nov 29, 2023
The latest version of react-router-dom (6.20.0) introduce
a breaking change.
See: remix-run/react-router#11052
AntoLC added a commit to openfun/marsha that referenced this issue Nov 30, 2023
The latest version of react-router-dom (6.20.0) introduce
a breaking change.
See: remix-run/react-router#11052
AntoLC added a commit to openfun/marsha that referenced this issue Nov 30, 2023
The latest version of react-router-dom (6.20.0) introduce
a breaking change.
See: remix-run/react-router#11052
@brophdawg11
Copy link
Contributor

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 6.18.0 and earlier. However, it's obvious that a large number of folks were relying on this behavior so we are going to get this reverted and re-implement the fix behind a future flag so that you can opt-in at your convenience. We should have a patch release out this afternoon with the revert.

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.

Closing this issue proves the contrary. You can't ignore the thousands of existing apps that your change have broken.

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 🙂

@brophdawg11
Copy link
Contributor

This fix has been reverted in v6.20.1

renovate bot referenced this issue in ariakit/ariakit Dec 1, 2023
[![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.
([#&#8203;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>
@fzaninotto
Copy link

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!

@cduff
Copy link

cduff commented Dec 2, 2023

@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.

alecthomas referenced this issue in TBD54566975/ftl Dec 4, 2023
[![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 (@&#8203;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`
([#&#8203;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
([#&#8203;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`
([#&#8203;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
([#&#8203;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`
([#&#8203;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`
([#&#8203;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`
([#&#8203;8332](https://togithub.com/swc-project/swc/issues/8332))
([8af6ffb](https://togithub.com/swc-project/swc/commit/8af6ffb1ddaf60b997163aaf80abfb528eb2ca9c))

- **(es/parser)** Fix conditional compilation
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;8352](https://togithub.com/swc-project/swc/issues/8352))
([55da0bb](https://togithub.com/swc-project/swc/commit/55da0bb9ddbb661a75e24162b7bdd63d2549dca3))

##### Build

- **(cargo)** Update `vergen` to `v8`
([#&#8203;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
(@&#8203;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
([#&#8203;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
([#&#8203;17721](https://togithub.com/eslint/eslint/issues/17721))
(Tanuj Kanti)

#### Documentation

-
[`83ece2a`](https://togithub.com/eslint/eslint/commit/83ece2afc2dc6c49efe82678663fe4cba590c0e5)
docs: fix typo `--rules` -> `--rule`
([#&#8203;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
([#&#8203;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
([#&#8203;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`
([#&#8203;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
([#&#8203;17778](https://togithub.com/eslint/eslint/issues/17778))
(Etienne)

#### Chores

-
[`eb8950c`](https://togithub.com/eslint/eslint/commit/eb8950c3b811c9163b9aae23af8b6266ad98b295)
chore: upgrade
[@&#8203;eslint/js](https://togithub.com/eslint/js)[@&#8203;8](https://togithub.com/8).55.0
([#&#8203;17811](https://togithub.com/eslint/eslint/issues/17811))
(Milos Djermanovic)
-
[`93df384`](https://togithub.com/eslint/eslint/commit/93df3849a7a25ebe0502000bf0bfb80a6613a5ae)
chore: package.json update for
[@&#8203;eslint/js](https://togithub.com/eslint/js) release (Jenkins)
-
[`fe4b954`](https://togithub.com/eslint/eslint/commit/fe4b9545a83e9aca7ba4bb77bc9c868d57de777f)
chore: upgrade
[@&#8203;eslint/eslintrc](https://togithub.com/eslint/eslintrc)[@&#8203;2](https://togithub.com/2).1.4
([#&#8203;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
([#&#8203;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
([#&#8203;17797](https://togithub.com/eslint/eslint/issues/17797))
(Milos Djermanovic)
-
[`de165c1`](https://togithub.com/eslint/eslint/commit/de165c108203c6703516ac651f5b4cac5b241804)
chore: remove unused config-extends fixtures
([#&#8203;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
([#&#8203;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
([#&#8203;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
([@&#8203;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
[@&#8203;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
[@&#8203;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
[@&#8203;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

- [#&#8203;1371](https://togithub.com/lint-staged/lint-staged/pull/1371)
[`f3378be`](https://togithub.com/lint-staged/lint-staged/commit/f3378be894fb84800341800b1e4f6f8bc8dfd904)
Thanks [@&#8203;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

- [#&#8203;1362](https://togithub.com/lint-staged/lint-staged/pull/1362)
[`17bc480`](https://togithub.com/lint-staged/lint-staged/commit/17bc480c0f8767407a87527931558de8d1d1551d)
Thanks [@&#8203;antonk52](https://togithub.com/antonk52)! - update
[email protected]

- [#&#8203;1368](https://togithub.com/lint-staged/lint-staged/pull/1368)
[`7c55ca9`](https://togithub.com/lint-staged/lint-staged/commit/7c55ca9f410043016e8b33b3b523b9b7e764acf4)
Thanks [@&#8203;iiroj](https://togithub.com/iiroj)! - Update most
dependencies

- [#&#8203;1368](https://togithub.com/lint-staged/lint-staged/pull/1368)
[`777d4e9`](https://togithub.com/lint-staged/lint-staged/commit/777d4e976852af4c181ffbe055f3531343349695)
Thanks [@&#8203;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.

- [#&#8203;1373](https://togithub.com/lint-staged/lint-staged/pull/1373)
[`85eb0dd`](https://togithub.com/lint-staged/lint-staged/commit/85eb0ddab1eba0c0bcc8cc109e17dc2bbb3d044e)
Thanks [@&#8203;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), @&#8203;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
[#&#8203;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
[#&#8203;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)
[#&#8203;48655](https://togithub.com/nodejs/node/pull/48655)
- \[[`bc3f7b5401`](https://togithub.com/nodejs/node/commit/bc3f7b5401)]
- **(SEMVER-MINOR)** **module**: remove useCustomLoadersIfPresent flag
(Chengzhong Wu)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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) [#&#8203;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) [#&#8203;50766](https://togithub.com/nodejs/node/pull/50766)
- \[[`23f56d8bb3`](https://togithub.com/nodejs/node/commit/23f56d8bb3)]
- **benchmark**: rewrite import.meta benchmark (Joyee Cheung)
[#&#8203;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)
[#&#8203;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) [#&#8203;50689](https://togithub.com/nodejs/node/pull/50689)
- \[[`5849f09874`](https://togithub.com/nodejs/node/commit/5849f09874)]
- **build**: add GN configurations for simdjson (Cheng Zhao)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;50751](https://togithub.com/nodejs/node/pull/50751)
- \[[`5d28f8d18f`](https://togithub.com/nodejs/node/commit/5d28f8d18f)]
- **deps**: escape Python strings correctly (Michaël Zasso)
[#&#8203;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) [#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;50874](https://togithub.com/nodejs/node/pull/50874)
- \[[`6485687642`](https://togithub.com/nodejs/node/commit/6485687642)]
- **doc**: update email to reflect affiliation (Yagiz Nizipli)
[#&#8203;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)
[#&#8203;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) [#&#8203;50829](https://togithub.com/nodejs/node/pull/50829)
- \[[`98fb1faff1`](https://togithub.com/nodejs/node/commit/98fb1faff1)]
- **doc**: create deprecation code for isWebAssemblyCompiledModule
(Marco Ippolito)
[#&#8203;50486](https://togithub.com/nodejs/node/pull/50486)
- \[[`e116fcdb01`](https://togithub.com/nodejs/node/commit/e116fcdb01)]
- **doc**: add CanadaHonk to triagers (CanadaHonk)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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) [#&#8203;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)
[#&#8203;50686](https://togithub.com/nodejs/node/pull/50686)
- \[[`713fdf1fc3`](https://togithub.com/nodejs/node/commit/713fdf1fc3)]
- **doc**: run license-builder (github-actions\[bot])
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;49884](https://togithub.com/nodejs/node/pull/49884)
- \[[`483200f68f`](https://togithub.com/nodejs/node/commit/483200f68f)]
- **fs**: improve error performance for `rmdirSync` (CanadaHonk)
[#&#8203;49846](https://togithub.com/nodejs/node/pull/49846)
- \[[`e4e0add0de`](https://togithub.com/nodejs/node/commit/e4e0add0de)]
- **fs**: fix glob returning duplicates (Moshe Atlow)
[#&#8203;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)
[#&#8203;50769](https://togithub.com/nodejs/node/pull/50769)
- \[[`492e3e30b7`](https://togithub.com/nodejs/node/commit/492e3e30b7)]
- **fs**: replace deprecated `path._makeLong` in copyFile (CanadaHonk)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;48655](https://togithub.com/nodejs/node/pull/48655)
- \[[`bc3f7b5401`](https://togithub.com/nodejs/node/commit/bc3f7b5401)]
- **(SEMVER-MINOR)** **module**: remove useCustomLoadersIfPresent flag
(Chengzhong Wu)
[#&#8203;48655](https://togithub.com/nodejs/node/pull/48655)
- \[[`9197b0f2fc`](https://togithub.com/nodejs/node/commit/9197b0f2fc)]
- **net**: check pipe mode and path (theanarkh)
[#&#8203;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)
[#&#8203;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) [#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;50860](https://togithub.com/nodejs/node/pull/50860)
- \[[`fd9195d750`](https://togithub.com/nodejs/node/commit/fd9195d750)]
- **src**: fix coverity warning (Michael Dawson)
[#&#8203;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)
[#&#8203;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) [#&#8203;50661](https://togithub.com/nodejs/node/pull/50661)
- \[[`faf6a04ba6`](https://togithub.com/nodejs/node/commit/faf6a04ba6)]
- **src**: add IsolateScopes before using isolates (Keyhan Vakil)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;50657](https://togithub.com/nodejs/node/pull/50657)
- \[[`e5cce004e8`](https://togithub.com/nodejs/node/commit/e5cce004e8)]
- **stream**: fix enumerability of ReadableStream.from (Mattias Buelens)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;50743](https://togithub.com/nodejs/node/pull/50743)
- \[[`b1b6c44712`](https://togithub.com/nodejs/node/commit/b1b6c44712)]
- **test**: replace forEach with for of (Conor Watson)
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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) [#&#8203;50828](https://togithub.com/nodejs/node/pull/50828)
- \[[`0e3b714069`](https://togithub.com/nodejs/node/commit/0e3b714069)]
- **test**: enable idlharness tests for encoding (Mattias Buelens)
[#&#8203;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) [#&#8203;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)
[#&#8203;50712](https://togithub.com/nodejs/node/pull/50712)
- \[[`f2e0fce389`](https://togithub.com/nodejs/node/commit/f2e0fce389)]
- **test**: replace forEach() with for-loop (Jan)
[#&#8203;50596](https://togithub.com/nodejs/node/pull/50596)
- \[[`4b26f14a53`](https://togithub.com/nodejs/node/commit/4b26f14a53)]
- **test**: improve test-bootstrap-modules.js (Joyee Cheung)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;50735](https://togithub.com/nodejs/node/pull/50735)
- \[[`0e8275b610`](https://togithub.com/nodejs/node/commit/0e8275b610)]
- **test**: replace foreach with for (Markus Muschol)
[#&#8203;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)
[#&#8203;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) [#&#8203;50667](https://togithub.com/nodejs/node/pull/50667)
- \[[`75265e491d`](https://togithub.com/nodejs/node/commit/75265e491d)]
- **test**: replace forEach with for...of (Ryan Williams)
[#&#8203;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)
[#&#8203;50421](https://togithub.com/nodejs/node/pull/50421)
- \[[`7ebc8c2aed`](https://togithub.com/nodejs/node/commit/7ebc8c2aed)]
- **test,stream**: enable compression WPTs (Filip Skokan)
[#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;50693](https://togithub.com/nodejs/node/pull/50693)
- \[[`5ef6729b66`](https://togithub.com/nodejs/node/commit/5ef6729b66)]
- **tools**: remove unused file (Ulises Gascon)
[#&#8203;50622](https://togithub.com/nodejs/node/pull/50622)
- \[[`c49483820a`](https://togithub.com/nodejs/node/commit/c49483820a)]
- **tools**: change minimatch install strategy (Marco Ippolito)
[#&#8203;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) [#&#8203;50675](https://togithub.com/nodejs/node/pull/50675)
- \[[`eaa4c14e6b`](https://togithub.com/nodejs/node/commit/eaa4c14e6b)]
- **util**: improve performance of normalizeEncoding (kylo5aby)
[#&#8203;50721](https://togithub.com/nodejs/node/pull/50721)
- \[[`a5d959b765`](https://togithub.com/nodejs/node/commit/a5d959b765)]
- **v8,tools**: expose necessary V8 defines (Cheng Zhao)
[#&#8203;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.
([#&#8203;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 [@&#8203;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
([#&#8203;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>
@bsides
Copy link

bsides commented Dec 12, 2023

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 😿

@brophdawg11
Copy link
Contributor

This fix is now available behind the future.v7_relativeSplatPath flag in 6.21.0

@nicoqh
Copy link

nicoqh commented Dec 14, 2023

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 <Outlet /> with null when you visit /dashboard.

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:

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.

Want a messaging system? Just plug it in:
<Route path="/messages/*" element={<Messages />} />

@brophdawg11
Copy link
Contributor

Oops - typo! I just pushed an update to add index so /dashboard also renders the <Dashboard> component.

Splat routes are extremely useful

We agree! The issue is that the prior approach introduced convenience at the cost of inconsistency:

  • "." no longer means the current location (and sometimes even means the parent location)
  • Paths resolve differently within a splat route versus a static or dynamic parameter route

future.v7_relativeSplatPath aims to resolve these inconsistencies

@birdofpreyru
Copy link

birdofpreyru commented Dec 15, 2023

@brophdawg11 is it feasible to expose to components the root path where its immediate router assembly is mounted? I mean if a <Component> is essentially a <Router> with a bunch of paths, and it is mounted at some/path/* inside a parent component <Parent> IMHO it would be cool to have a hook that inside <Component> returns that some/path, thus helping to construct absolute paths with respect to that some/path mounting point? I guess, this would cover the main use case for which ppl used the old buggy behavior before (cause if there is a bunch of paths inside <Component> it might be way handier to use, for navigation, absolute links relative to its mounting point, rather than relative to the current location of each sub-component). If I am not missing anything, now it is only possible if that mounting point is passed down to <Component> via a dedicated prop?

@brophdawg11
Copy link
Contributor

@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!

thomasheartman referenced this issue in Unleash/unleash Dec 20, 2023
[![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.
([#&#8203;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
([#&#8203;10719](https://togithub.com/remix-run/react-router/pull/10719))

##### Patch Changes

- Fix bug with `resolveTo` in splat routes
([#&#8203;11045](https://togithub.com/remix-run/react-router/pull/11045))
- This is a follow up to
[#&#8203;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
([#&#8203;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.
([#&#8203;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
([#&#8203;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.
([#&#8203;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.
([#&#8203;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
([#&#8203;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.
([#&#8203;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
([#&#8203;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
([#&#8203;11005](https://togithub.com/remix-run/react-router/pull/11005))
- Allow `unstable_usePrompt` to accept a `BlockerFunction` in addition
to a `boolean`
([#&#8203;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
([#&#8203;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
([#&#8203;11025](https://togithub.com/remix-run/react-router/pull/11025))
- Fix `NavLink` `active` logic when `to` location has a trailing slash
([#&#8203;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))
([#&#8203;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`
([#&#8203;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
([#&#8203;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.
([#&#8203;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.
([#&#8203;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.
([#&#8203;10928](https://togithub.com/remix-run/react-router/pull/10928)

##### Patch Changes

- Log a warning and fail gracefully in `ScrollRestoration` when
`sessionStorage` is unavailable
([#&#8203;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>
github-merge-queue bot referenced this issue in brave/brave-variations Aug 21, 2024
[![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

- [#&#8203;1463](https://togithub.com/lint-staged/lint-staged/pull/1463)
[`b69ce2d`](https://togithub.com/lint-staged/lint-staged/commit/b69ce2ddfd5a7ae576f4fef4afc60b8a81f3c945)
Thanks [@&#8203;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
([#&#8203;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`
([#&#8203;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`
([#&#8203;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
([#&#8203;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
([#&#8203;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)
([#&#8203;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>`
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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.
([#&#8203;11087](https://togithub.com/remix-run/react-router/pull/11087))

This fix was originally added in
[#&#8203;10983](https://togithub.com/remix-run/react-router/issues/10983)
and was later reverted in
[#&#8203;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
[#&#8203;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
([#&#8203;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.
([#&#8203;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
([#&#8203;10719](https://togithub.com/remix-run/react-router/pull/10719))

##### Patch Changes

- Fix bug with `resolveTo` in splat routes
([#&#8203;11045](https://togithub.com/remix-run/react-router/pull/11045))
- This is a follow up to
[#&#8203;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
([#&#8203;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.
([#&#8203;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
([#&#8203;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.
([#&#8203;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.
([#&#8203;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
([#&#8203;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.
([#&#8203;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`.
([#&#8203;10811](https://togithub.com/remix-run/react-router/pull/10811))
- Export `ShouldRevalidateFunctionArgs` interface
([#&#8203;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`)
([#&#8203;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
([#&#8203;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`
([#&#8203;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
([#&#8203;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`
([#&#8203;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
([#&#8203;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
([#&#8203;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)
([#&#8203;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`
([#&#8203;11631](https://togithub.com/remix-run/react-router/pull/11631))
- Allow falsy `location.state` values passed to `<StaticRouter>`
([#&#8203;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`
([#&#8203;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`
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;11195](https://togithub.com/remix-run/react-router/pull/11195))
- Remove leftover `unstable_` prefix from `Blocker`/`BlockerFunction`
types
([#&#8203;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.
([#&#8203;11087](https://togithub.com/remix-run/react-router/pull/11087))

This fix was originally added in
[#&#8203;10983](https://togithub.com/remix-run/react-router/issues/10983)
and was later reverted in
[#&#8203;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
[#&#8203;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.
([#&#8203;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
([#&#8203;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
([#&#8203;11005](https://togithub.com/remix-run/react-router/pull/11005))
- Allow `unstable_usePrompt` to accept a `BlockerFunction` in addition
to a `boolean`
([#&#8203;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
([#&#8203;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
([#&#8203;11025](https://togithub.com/remix-run/react-router/pull/11025))
- Fix `NavLink` `active` logic when `to` location has a trailing slash
([#&#8203;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))
([#&#8203;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`
([#&#8203;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
([#&#8203;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.
([#&#8203;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.
([#&#8203;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.
([#&#8203;10928](https://togithub.com/remix-run/react-router/pull/10928)

##### Patch Changes

- Log a warning and fail gracefully in `ScrollRestoration` when
`sessionStorage` is unavailable
([#&#8203;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
([#&#8203;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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

10 participants