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 added a commit to ariakit/ariakit that referenced this issue 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/react-router-dom@6.20.0...react-router-dom@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
[remix-run/react-router#11052 (comment)).
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:
    -   `react-router@6.20.1`
    -   `@remix-run/router@1.13.1`

</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 pushed a commit to TBD54566975/ftl that referenced this issue 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
lilconfig@3.0.0

- [#&#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 rollup@4.5.0 (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 rollup@4.3.1 (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/react-router-dom@6.20.0...react-router-dom@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:
    -   `react-router@6.20.1`
    -   `@remix-run/router@1.13.1`

</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 pushed a commit to Unleash/unleash that referenced this issue 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/react-router@6.20.0...react-router@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
[remix-run/react-router#11052 (comment)).
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/router@1.13.1`

###
[`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/react-router@6.19.0...react-router@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/router@1.13.0`

###
[`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/react-router@6.18.0...react-router@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/router@1.12.0`

###
[`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/react-router@6.17.0...react-router@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/router@1.11.0`

###
[`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/react-router@6.16.0...react-router@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/router@1.10.0`

</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/react-router-dom@6.20.0...react-router-dom@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
[remix-run/react-router#11052 (comment)).
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:
    -   `react-router@6.20.1`
    -   `@remix-run/router@1.13.1`

###
[`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/react-router-dom@6.19.0...react-router-dom@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:
    -   `react-router@6.20.0`
    -   `@remix-run/router@1.13.0`

###
[`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/react-router-dom@6.18.0...react-router-dom@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:
    -   `react-router@6.19.0`
    -   `@remix-run/router@1.12.0`

###
[`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/react-router-dom@6.17.0...react-router-dom@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/router@1.11.0`
    -   `react-router@6.18.0`

###
[`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/react-router-dom@6.16.0...react-router-dom@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/router@1.10.0`
    -   `react-router@6.17.0`

</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>
realbrodiwhite added a commit to realbrodiwhite/royalgames-client that referenced this issue Mar 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 |
|---|---|---|---|---|---|
| [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.8.1` ->
`6.22.3`](https://renovatebot.com/diffs/npm/react-router-dom/6.8.1/6.22.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.22.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.22.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.8.1/6.22.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.8.1/6.22.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>remix-run/react-router (react-router-dom)</summary>

###
[`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/react-router-dom@6.22.2...react-router-dom@6.22.3)

##### Patch Changes

-   Updated dependencies:
    -   `@remix-run/router@1.15.3`
    -   `react-router@6.22.3`

###
[`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/react-router-dom@6.22.1...react-router-dom@6.22.2)

##### Patch Changes

-   Updated dependencies:
    -   `@remix-run/router@1.15.2`
    -   `react-router@6.22.2`

###
[`v6.22.1`](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.22.0...react-router-dom@6.22.1)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.22.0...react-router-dom@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/react-router-dom@6.21.3...react-router-dom@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/router@1.15.0`
    -   `react-router@6.22.0`

###
[`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/react-router-dom@6.21.2...react-router-dom@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:
    -   `react-router@6.21.3`

###
[`v6.21.2`](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.21.1...react-router-dom@6.21.2)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.21.1...react-router-dom@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/react-router-dom@6.21.0...react-router-dom@6.21.1)

##### Patch Changes

-   Updated dependencies:
    -   `react-router@6.21.1`
    -   `@remix-run/router@1.14.1`

###
[`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/react-router-dom@6.20.1...react-router-dom@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/router@1.14.0`
    -   `react-router@6.21.0`

###
[`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/react-router-dom@6.20.0...react-router-dom@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
[remix-run/react-router#11052 (comment)).
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:
    -   `react-router@6.20.1`
    -   `@remix-run/router@1.13.1`

###
[`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/react-router-dom@6.19.0...react-router-dom@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:
    -   `react-router@6.20.0`
    -   `@remix-run/router@1.13.0`

###
[`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/react-router-dom@6.18.0...react-router-dom@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:
    -   `react-router@6.19.0`
    -   `@remix-run/router@1.12.0`

###
[`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/react-router-dom@6.17.0...react-router-dom@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/router@1.11.0`
    -   `react-router@6.18.0`

###
[`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/react-router-dom@6.16.0...react-router-dom@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/router@1.10.0`
    -   `react-router@6.17.0`

###
[`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/react-router-dom@6.15.0...react-router-dom@6.16.0)

##### Minor Changes

-   Updated dependencies:
    -   `@remix-run/router@1.9.0`
    -   `react-router@6.16.0`

##### Patch Changes

- Properly encode rendered URIs in server rendering to avoid hydration
errors
([#&#8203;10769](https://togithub.com/remix-run/react-router/pull/10769))

###
[`v6.15.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6150)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.14.2...react-router-dom@6.15.0)

##### Minor Changes

- Add's a new `redirectDocument()` function which allows users to
specify that a redirect from a `loader`/`action` should trigger a
document reload (via `window.location`) instead of attempting to
navigate to the redirected location via React Router
([#&#8203;10705](https://togithub.com/remix-run/react-router/pull/10705))

##### Patch Changes

- Fixes an edge-case affecting web extensions in Firefox that use
`URLSearchParams` and the `useSearchParams` hook.
([#&#8203;10620](https://togithub.com/remix-run/react-router/pull/10620))
- Do not include hash in `useFormAction()` for unspecified actions since
it cannot be determined on the server and causes hydration issues
([#&#8203;10758](https://togithub.com/remix-run/react-router/pull/10758))
- Reorder effects in `unstable_usePrompt` to avoid throwing an exception
if the prompt is unblocked and a navigation is performed synchronously
([#&#8203;10687](https://togithub.com/remix-run/react-router/pull/10687),
[#&#8203;10718](https://togithub.com/remix-run/react-router/pull/10718))
-   Updated dependencies:
    -   `@remix-run/router@1.8.0`
    -   `react-router@6.15.0`

###
[`v6.14.2`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6142)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.14.1...react-router-dom@6.14.2)

##### Patch Changes

- Properly decode element id when emulating hash scrolling via
`<ScrollRestoration>`
([#&#8203;10682](https://togithub.com/remix-run/react-router/pull/10682))
- Add missing `<Form state>` prop to populate `history.state` on
submission navigations
([#&#8203;10630](https://togithub.com/remix-run/react-router/pull/10630))
- Support proper hydration of `Error` subclasses such as
`ReferenceError`/`TypeError`
([#&#8203;10633](https://togithub.com/remix-run/react-router/pull/10633))
-   Updated dependencies:
    -   `@remix-run/router@1.7.2`
    -   `react-router@6.14.2`

###
[`v6.14.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6141)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.14.0...react-router-dom@6.14.1)

##### Patch Changes

-   Updated dependencies:
    -   `react-router@6.14.1`
    -   `@remix-run/router@1.7.1`

###
[`v6.14.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6140)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.13.0...react-router-dom@6.14.0)

##### Minor Changes

- Add support for `application/json` and `text/plain` encodings for
`useSubmit`/`fetcher.submit`. To reflect these additional types,
`useNavigation`/`useFetcher` now also contain
`navigation.json`/`navigation.text` and `fetcher.json`/`fetcher.text`
which include the json/text submission if applicable
([#&#8203;10413](https://togithub.com/remix-run/react-router/pull/10413))

    ```jsx
    // The default behavior will still serialize as FormData
    function Component() {
      let navigation = useNavigation();
      let submit = useSubmit();
      submit({ key: "value" }, { method: "post" });
      // navigation.formEncType => "application/x-www-form-urlencoded"
      // navigation.formData    => FormData instance
    }

    async function action({ request }) {
// request.headers.get("Content-Type") =>
"application/x-www-form-urlencoded"
      // await request.formData()            => FormData instance
    }
    ```

    ```js
    // Opt-into JSON encoding with `encType: "application/json"`
    function Component() {
      let navigation = useNavigation();
      let submit = useSubmit();
submit({ key: "value" }, { method: "post", encType: "application/json"
});
      // navigation.formEncType => "application/json"
      // navigation.json        => { key: "value" }
    }

    async function action({ request }) {
      // request.headers.get("Content-Type") => "application/json"
      // await request.json()                => { key: "value" }
    }
    ```

    ```js
    // Opt-into text encoding with `encType: "text/plain"`
    function Component() {
      let navigation = useNavigation();
      let submit = useSubmit();
submit("Text submission", { method: "post", encType: "text/plain" });
      // navigation.formEncType => "text/plain"
      // navigation.text        => "Text submission"
    }

    async function action({ request }) {
      // request.headers.get("Content-Type") => "text/plain"
      // await request.text()                => "Text submission"
    }
    ```

##### Patch Changes

- When submitting a form from a `submitter` element, prefer the built-in
`new FormData(form, submitter)` instead of the previous manual approach
in modern browsers (those that support the new `submitter` parameter)
([#&#8203;9865](https://togithub.com/remix-run/react-router/pull/9865),
[#&#8203;10627](https://togithub.com/remix-run/react-router/pull/10627))
- For browsers that don't support it, we continue to just append the
submit button's entry to the end, and we also add rudimentary support
for `type="image"` buttons
- If developers want full spec-compliant support for legacy browsers,
they can use the `formdata-submitter-polyfill`
- Call `window.history.pushState/replaceState` before updating React
Router state (instead of after) so that `window.location` matches
`useLocation` during synchronous React 17 rendering
([#&#8203;10448](https://togithub.com/remix-run/react-router/pull/10448))
- ⚠️ However, generally apps should not be relying on `window.location`
and should always reference `useLocation` when possible, as
`window.location` will not be in sync 100% of the time (due to
`popstate` events, concurrent mode, etc.)
- Fix `tsc --skipLibCheck:false` issues on React 17
([#&#8203;10622](https://togithub.com/remix-run/react-router/pull/10622))
- Upgrade `typescript` to 5.1
([#&#8203;10581](https://togithub.com/remix-run/react-router/pull/10581))
-   Updated dependencies:
    -   `react-router@6.14.0`
    -   `@remix-run/router@1.7.0`

###
[`v6.13.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6130)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.12.1...react-router-dom@6.13.0)

##### Minor Changes

- Move
[`React.startTransition`](https://react.dev/reference/react/startTransition)
usage behind a [future
flag](https://reactrouter.com/en/main/guides/api-development-strategy)
to avoid issues with existing incompatible `Suspense` usages. We
recommend folks adopting this flag to be better compatible with React
concurrent mode, but if you run into issues you can continue without the
use of `startTransition` until v7. Issues usually boils down to creating
net-new promises during the render cycle, so if you run into issues you
should either lift your promise creation out of the render cycle or put
it behind a `useMemo`.
([#&#8203;10596](https://togithub.com/remix-run/react-router/pull/10596))

    Existing behavior will no longer include `React.startTransition`:

    ```jsx
    <BrowserRouter>
      <Routes>{/*...*/}</Routes>
    </BrowserRouter>

    <RouterProvider router={router} />
    ```

If you wish to enable `React.startTransition`, pass the future flag to
your component:

    ```jsx
    <BrowserRouter future={{ v7_startTransition: true }}>
      <Routes>{/*...*/}</Routes>
    </BrowserRouter>

<RouterProvider router={router} future={{ v7_startTransition: true }}/>
    ```

##### Patch Changes

- Work around webpack/terser `React.startTransition` minification bug in
production mode
([#&#8203;10588](https://togithub.com/remix-run/react-router/pull/10588))
-   Updated dependencies:
    -   `react-router@6.13.0`

###
[`v6.12.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6121)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.12.0...react-router-dom@6.12.1)

> **Warning**
> Please use version `6.13.0` or later instead of `6.12.1`. This version
suffers from a `webpack`/`terser` minification issue resulting in
invalid minified code in your resulting production bundles which can
cause issues in your application. See
[#&#8203;10579](https://togithub.com/remix-run/react-router/issues/10579)
for more details.

##### Patch Changes

- Adjust feature detection of `React.startTransition` to fix webpack +
react 17 compilation error
([#&#8203;10569](https://togithub.com/remix-run/react-router/pull/10569))
-   Updated dependencies:
    -   `react-router@6.12.1`

###
[`v6.12.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6120)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.11.2...react-router-dom@6.12.0)

##### Minor Changes

- Wrap internal router state updates with `React.startTransition` if it
exists
([#&#8203;10438](https://togithub.com/remix-run/react-router/pull/10438))

##### Patch Changes

- Re-throw `DOMException` (`DataCloneError`) when attempting to perform
a `PUSH` navigation with non-serializable state.
([#&#8203;10427](https://togithub.com/remix-run/react-router/pull/10427))
-   Updated dependencies:
    -   `@remix-run/router@1.6.3`
    -   `react-router@6.12.0`

###
[`v6.11.2`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6112)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.11.1...react-router-dom@6.11.2)

##### Patch Changes

- Export `SetURLSearchParams` type
([#&#8203;10444](https://togithub.com/remix-run/react-router/pull/10444))
-   Updated dependencies:
    -   `react-router@6.11.2`
    -   `@remix-run/router@1.6.2`

###
[`v6.11.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6111)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.11.0...react-router-dom@6.11.1)

##### Patch Changes

-   Updated dependencies:
    -   `react-router@6.11.1`
    -   `@remix-run/router@1.6.1`

###
[`v6.11.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6110)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.10.0...react-router-dom@6.11.0)

##### Minor Changes

- Enable `basename` support in `useFetcher`
([#&#8203;10336](https://togithub.com/remix-run/react-router/pull/10336))
- If you were previously working around this issue by manually
prepending the `basename` then you will need to remove the manually
prepended `basename` from your `fetcher` calls
(`fetcher.load('/basename/route') -> fetcher.load('/route')`)

##### Patch Changes

- Fix inadvertent re-renders when using `Component` instead of `element`
on a route definition
([#&#8203;10287](https://togithub.com/remix-run/react-router/pull/10287))
- Fail gracefully on `<Link to="//">` and other invalid URL values
([#&#8203;10367](https://togithub.com/remix-run/react-router/pull/10367))
- Switched from `useSyncExternalStore` to `useState` for internal
`@remix-run/router` router state syncing in `<RouterProvider>`. We found
some [subtle
bugs](https://codesandbox.io/s/use-sync-external-store-loop-9g7b81)
where router state updates got propagated *before* other normal
`useState` updates, which could lead to footguns in `useEffect` calls.
([#&#8203;10377](https://togithub.com/remix-run/react-router/pull/10377),
[#&#8203;10409](https://togithub.com/remix-run/react-router/pull/10409))
- Add static prop to `StaticRouterProvider`'s internal `Router`
component
([#&#8203;10401](https://togithub.com/remix-run/react-router/pull/10401))
- When using a `RouterProvider`,
`useNavigate`/`useSubmit`/`fetcher.submit` are now stable across
location changes, since we can handle relative routing via the
`@remix-run/router` instance and get rid of our dependence on
`useLocation()`. When using `BrowserRouter`, these hooks remain unstable
across location changes because they still rely on `useLocation()`.
([#&#8203;10336](https://togithub.com/remix-run/react-router/pull/10336))
-   Updated dependencies:
    -   `react-router@6.11.0`
    -   `@remix-run/router@1.6.0`

###
[`v6.10.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6100)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.9.0...react-router-dom@6.10.0)

##### Minor Changes

- Added support for [**Future
Flags**](https://reactrouter.com/en/main/guides/api-development-strategy)
in React Router. The first flag being introduced is
`future.v7_normalizeFormMethod` which will normalize the exposed
`useNavigation()/useFetcher()` `formMethod` fields as uppercase HTTP
methods to align with the `fetch()` behavior.
([#&#8203;10207](https://togithub.com/remix-run/react-router/pull/10207))

- When `future.v7_normalizeFormMethod === false` (default v6 behavior),
        -   `useNavigation().formMethod` is lowercase
        -   `useFetcher().formMethod` is lowercase
    -   When `future.v7_normalizeFormMethod === true`:
        -   `useNavigation().formMethod` is uppercase
        -   `useFetcher().formMethod` is uppercase

##### Patch Changes

- Fix `createStaticHandler` to also check for `ErrorBoundary` on routes
in addition to `errorElement`
([#&#8203;10190](https://togithub.com/remix-run/react-router/pull/10190))
-   Updated dependencies:
    -   `@remix-run/router@1.5.0`
    -   `react-router@6.10.0`

###
[`v6.9.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#690)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.8.2...react-router-dom@6.9.0)

##### Minor Changes

- React Router now supports an alternative way to define your route
`element` and `errorElement` fields as React Components instead of React
Elements. You can instead pass a React Component to the new `Component`
and `ErrorBoundary` fields if you choose. There is no functional
difference between the two, so use whichever approach you prefer 😀. You
shouldn't be defining both, but if you do `Component`/`ErrorBoundary`
will "win".
([#&#8203;10045](https://togithub.com/remix-run/react-router/pull/10045))

    **Example JSON Syntax**

    ```jsx
    // Both of these work the same:
    const elementRoutes = [{
      path: '/',
      element: <Home />,
      errorElement: <HomeError />,
    }]

    const componentRoutes = [{
      path: '/',
      Component: Home,
      ErrorBoundary: HomeError,
    }]

    function Home() { ... }
    function HomeError() { ... }
    ```

    **Example JSX Syntax**

    ```jsx
    // Both of these work the same:
    const elementRoutes = createRoutesFromElements(
<Route path='/' element={<Home />} errorElement={<HomeError /> } />
    );

    const componentRoutes = createRoutesFromElements(
      <Route path='/' Component={Home} ErrorBoundary={HomeError} />
    );

    function Home() { ... }
    function HomeError() { ... }
    ```

- **Introducing Lazy Route Modules!**
([#&#8203;10045](https://togithub.com/remix-run/react-router/pull/10045))

In order to keep your application bundles small and support
code-splitting of your routes, we've introduced a new `lazy()` route
property. This is an async function that resolves the non-route-matching
portions of your route definition (`loader`, `action`,
`element`/`Component`, `errorElement`/`ErrorBoundary`,
`shouldRevalidate`, `handle`).

Lazy routes are resolved on initial load and during the `loading` or
`submitting` phase of a navigation or fetcher call. You cannot lazily
define route-matching properties (`path`, `index`, `children`) since we
only execute your lazy route functions after we've matched known routes.

Your `lazy` functions will typically return the result of a dynamic
import.

    ```jsx
// In this example, we assume most folks land on the homepage so we
include that
// in our critical-path bundle, but then we lazily load modules for /a
and /b so
    // they don't load until the user navigates to those routes
    let routes = createRoutesFromElements(
      <Route path="/" element={<Layout />}>
        <Route index element={<Home />} />
        <Route path="a" lazy={() => import("./a")} />
        <Route path="b" lazy={() => import("./b")} />
      </Route>
    );
    ```

Then in your lazy route modules, export the properties you want defined
for the route:

    ```jsx
    export async function loader({ request }) {
      let data = await fetchData(request);
      return json(data);
    }

// Export a `Component` directly instead of needing to create a React
Element from it
    export function Component() {
      let data = useLoaderData();

      return (
        <>
          <h1>You made it!</h1>
          <p>{data}</p>
        </>
      );
    }

// Export an `ErrorBoundary` directly instead of needing to create a
React Element from it
    export function ErrorBoundary() {
      let error = useRouteError();
      return isRouteErrorResponse(error) ? (
        <h1>
          {error.status} {error.statusText}
        </h1>
      ) : (
        <h1>{error.message || error}</h1>
      );
    }
    ```

An example of this in action can be found in the
[`examples/lazy-loading-router-provider`](https://togithub.com/remix-run/react-router/tree/main/examples/lazy-loading-router-provider)
directory of the repository.

🙌 Huge thanks to [@&#8203;rossipedia](https://togithub.com/rossipedia)
for the [Initial
Proposal](https://togithub.com/remix-run/react-router/discussions/9826)
and [POC
Implementation](https://togithub.com/remix-run/react-router/pull/9830).

-   Updated dependencies:
    -   `react-router@6.9.0`
    -   `@remix-run/router@1.4.0`

###
[`v6.8.2`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#682)

[Compare
Source](https://togithub.com/remix-run/react-router/compare/react-router-dom@6.8.1...react-router-dom@6.8.2)

##### Patch Changes

- Treat same-origin absolute URLs in `<Link to>` as external if they are
outside of the router `basename`
([#&#8203;10135](https://togithub.com/remix-run/react-router/pull/10135))
- Fix `useBlocker` to return `IDLE_BLOCKER` during SSR
([#&#8203;10046](https://togithub.com/remix-run/react-router/pull/10046))
- Fix SSR of absolute `<Link to>` urls
([#&#8203;10112](https://togithub.com/remix-run/react-router/pull/10112))
- Properly escape HTML characters in `StaticRouterProvider` serialized
hydration data
([#&#8203;10068](https://togithub.com/remix-run/react-router/pull/10068))
-   Updated dependencies:
    -   `@remix-run/router@1.3.3`
    -   `react-router@6.8.2`

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
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.

🔕 **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/realbrodiwhite/royalgames-client).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
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