-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
docs: update documentation of persist #2147
Conversation
Add superjson serialization/deserialization example to Zustand persist documentation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit eb37b28:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dai-shi — please comment if you're okay with encouraging the usage of superjson
external library.
|
||
If writing serialisation and deserialisation code is tedious, you can use third-party libraries to serialise and deserialise different types of data. | ||
|
||
SuperJSON serialises data along with its type, allowing the data to be parsed back to its original type upon deserialisation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It depends whether @dai-shi and other contributors want to encourage using another library for this use case in the official Zustand docs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we change it to how to use persist with a custom serialization library? Like "How can I use a custom storage engine"?
If you use a lot of variables like Map, Set, Date, etc. that JSON.stringify() doesn't support, it would be nice to have a way in the documentation to avoid writing your own serialization/deserialization code
No problem using other libraries (ex) serialize-javascript, devalue , ...etc)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@cheatkey I'm down with the idea of having this under "How can I use a custom storage engine?".
@@ -731,3 +731,32 @@ interface BearState { | |||
removeItem: (name) => localStorage.removeItem(name), | |||
}, | |||
``` | |||
|
|||
If writing serialisation and deserialisation code is tedious, you can use third-party libraries to serialise and deserialise different types of data. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use the American English spelling — serialization for this and other occurrences.
SuperJSON serialises data along with its type, allowing the data to be parsed back to its original type upon deserialisation | ||
|
||
```ts | ||
import superjson from "superjson"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please run prettier.
I'm not familiar with superjson, and we shouldn't endorse a specific library, but a usage example may help people. |
|
||
If writing serialization and deserialization code is tedious, you can use third-party libraries to serialize and deserialize different types of data | ||
|
||
SuperJSON serialize data along with its type, allowing the data to be parsed back to its original type upon deserialization |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So, how about adding this?
SuperJSON serialize data along with its type, allowing the data to be parsed back to its original type upon deserialization | |
For example, [Superjson](https://github.com/blitz-js/superjson) can serialize data along with its type, allowing the data to be parsed back to its original type upon deserialization |
That sounds good too. |
…d specifying that the code is an example
I have committed the following changes
|
import { StorageValue } from "zustand/middleware"; | ||
|
||
interface BearState { | ||
...: Map<string, string>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of an ellipsis, use some example names, like "bears", "fish", "time", "query", or something like that.
} | ||
//... | ||
|
||
storage: { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wrap it with const storage: StateStorage = {}
and add necessary imports.
const str = localStorage.getItem(name); | ||
if (!str) return null; | ||
return { | ||
state: superjson.parse<StorageValue<BearState>>(str).state, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm wondering if you need to return { state: superjson.parse().state }
, or if you could just return superjson.parse().state
, without wrapping it in an object?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You don't need to wrap it in an object. The result of superjson.parse
returns the original json, so you can return the result of the superjson.parse
function directly.
I have updated the example code accordingly
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [zustand](https://togithub.com/pmndrs/zustand) | [`4.4.5` -> `4.4.6`](https://renovatebot.com/diffs/npm/zustand/4.4.5/4.4.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/zustand/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zustand/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zustand/4.4.5/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zustand/4.4.5/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>pmndrs/zustand (zustand)</summary> ### [`v4.4.6`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.6) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.5...v4.4.6) v4.4.5 has an issue with some TypeScript configs about module resolution. It should be fixed now. Thanks for the patience. #### What's Changed - Update export types by [@​dbritto-dev](https://togithub.com/dbritto-dev) in [https://github.com/pmndrs/zustand/pull/2170](https://togithub.com/pmndrs/zustand/pull/2170) #### New Contributors - [@​cheatkey](https://togithub.com/cheatkey) made their first contribution in [https://github.com/pmndrs/zustand/pull/2147](https://togithub.com/pmndrs/zustand/pull/2147) - [@​frixaco](https://togithub.com/frixaco) made their first contribution in [https://github.com/pmndrs/zustand/pull/2166](https://togithub.com/pmndrs/zustand/pull/2166) **Full Changelog**: pmndrs/zustand@v4.4.5...v4.4.6 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 3am,before 9am" (UTC), 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/ettorepuccetti/terrarossa). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMzEuNSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [zustand](https://togithub.com/pmndrs/zustand) | [`4.4.5` -> `4.4.6`](https://renovatebot.com/diffs/npm/zustand/4.4.5/4.4.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/zustand/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zustand/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zustand/4.4.5/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zustand/4.4.5/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>pmndrs/zustand (zustand)</summary> ### [`v4.4.6`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.6) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.5...v4.4.6) v4.4.5 has an issue with some TypeScript configs about module resolution. It should be fixed now. Thanks for the patience. #### What's Changed - Update export types by [@​dbritto-dev](https://togithub.com/dbritto-dev) in [https://github.com/pmndrs/zustand/pull/2170](https://togithub.com/pmndrs/zustand/pull/2170) #### New Contributors - [@​cheatkey](https://togithub.com/cheatkey) made their first contribution in [https://github.com/pmndrs/zustand/pull/2147](https://togithub.com/pmndrs/zustand/pull/2147) - [@​frixaco](https://togithub.com/frixaco) made their first contribution in [https://github.com/pmndrs/zustand/pull/2166](https://togithub.com/pmndrs/zustand/pull/2166) **Full Changelog**: pmndrs/zustand@v4.4.5...v4.4.6 </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/SHABIN-K/toss). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMzEuNSIsInRhcmdldEJyYW5jaCI6Im1hc3RlciJ9-->
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [zustand](https://togithub.com/pmndrs/zustand) | [`4.4.1` -> `4.4.6`](https://renovatebot.com/diffs/npm/zustand/4.4.1/4.4.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/zustand/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zustand/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zustand/4.4.1/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zustand/4.4.1/4.4.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>pmndrs/zustand (zustand)</summary> ### [`v4.4.6`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.6) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.5...v4.4.6) v4.4.5 has an issue with some TypeScript configs about module resolution. It should be fixed now. Thanks for the patience. #### What's Changed - Update export types by [@​dbritto-dev](https://togithub.com/dbritto-dev) in [https://github.com/pmndrs/zustand/pull/2170](https://togithub.com/pmndrs/zustand/pull/2170) #### New Contributors - [@​cheatkey](https://togithub.com/cheatkey) made their first contribution in [https://github.com/pmndrs/zustand/pull/2147](https://togithub.com/pmndrs/zustand/pull/2147) - [@​frixaco](https://togithub.com/frixaco) made their first contribution in [https://github.com/pmndrs/zustand/pull/2166](https://togithub.com/pmndrs/zustand/pull/2166) **Full Changelog**: pmndrs/zustand@v4.4.5...v4.4.6 ### [`v4.4.5`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.5) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.4...v4.4.5) Hopefully, it should fix some issues with Node.js environment including Next.js. #### What's Changed - fix: importing CJS React in ESM by [@​dai-shi](https://togithub.com/dai-shi) in [https://github.com/pmndrs/zustand/pull/2154](https://togithub.com/pmndrs/zustand/pull/2154) - Apply publint recommendations by [@​dbritto-dev](https://togithub.com/dbritto-dev) in [https://github.com/pmndrs/zustand/pull/2157](https://togithub.com/pmndrs/zustand/pull/2157) #### New Contributors - [@​plrs9816](https://togithub.com/plrs9816) made their first contribution in [https://github.com/pmndrs/zustand/pull/2137](https://togithub.com/pmndrs/zustand/pull/2137) - [@​Brammm](https://togithub.com/Brammm) made their first contribution in [https://github.com/pmndrs/zustand/pull/2139](https://togithub.com/pmndrs/zustand/pull/2139) - [@​sobies93](https://togithub.com/sobies93) made their first contribution in [https://github.com/pmndrs/zustand/pull/2142](https://togithub.com/pmndrs/zustand/pull/2142) **Full Changelog**: pmndrs/zustand@v4.4.4...v4.4.5 ### [`v4.4.4`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.4) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.3...v4.4.4) There was a tiny issue in v4.4.3, which broke with some bundlers, which this version fixes. #### What's Changed - fix(build): patch entry points zustand/shallow for CJS by [@​dai-shi](https://togithub.com/dai-shi) in [https://github.com/pmndrs/zustand/pull/2128](https://togithub.com/pmndrs/zustand/pull/2128) **Full Changelog**: pmndrs/zustand@v4.4.3...v4.4.4 ### [`v4.4.3`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.3) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.2...v4.4.3) The changes in v4.4.2 were troublesome for some users. This version should fix/mitigate such cases. #### What's Changed - fix(shallow): Extract shallow vanilla and react by [@​dbritto-dev](https://togithub.com/dbritto-dev) in [https://github.com/pmndrs/zustand/pull/2097](https://togithub.com/pmndrs/zustand/pull/2097) - fix(types): mitigate devtools typing by [@​dai-shi](https://togithub.com/dai-shi) in [https://github.com/pmndrs/zustand/pull/2099](https://togithub.com/pmndrs/zustand/pull/2099) **Full Changelog**: pmndrs/zustand@v4.4.2...v4.4.3 ### [`v4.4.2`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.2) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.1...v4.4.2) This adds `useShallow` hook to cover some use cases that are deprecated with v4.4.0 change. Check out [the guide](https://togithub.com/pmndrs/zustand/blob/ec538e9d4c0b9b5759e6dfd0fd3c9a21f8236949/docs/guides/prevent-rerenders-with-use-shallow.md). ##### Migration Guide [#​1991](https://togithub.com/pmndrs/zustand/issues/1991) requires something like below if you are using the `devtools` middleware *and* TypeScript. ```diff import { devtools } from 'zustand/middleware' + import type {} from '@​redux-devtools/extension' ``` ##### What's Changed - fix(types)(middleware/devtools): avoid copying types by [@​dai-shi](https://togithub.com/dai-shi) in [https://github.com/pmndrs/zustand/pull/1991](https://togithub.com/pmndrs/zustand/pull/1991) - fix(traditional): make defaultEqualityFn optional in TS Types by [@​charkour](https://togithub.com/charkour) in [https://github.com/pmndrs/zustand/pull/2060](https://togithub.com/pmndrs/zustand/pull/2060) - feat: add useShallow by [@​FaberVitale](https://togithub.com/FaberVitale) in [https://github.com/pmndrs/zustand/pull/2090](https://togithub.com/pmndrs/zustand/pull/2090) ##### New Contributors - [@​aykutkardas](https://togithub.com/aykutkardas) made their first contribution in [https://github.com/pmndrs/zustand/pull/1993](https://togithub.com/pmndrs/zustand/pull/1993) - [@​michelts](https://togithub.com/michelts) made their first contribution in [https://github.com/pmndrs/zustand/pull/1997](https://togithub.com/pmndrs/zustand/pull/1997) - [@​elusive](https://togithub.com/elusive) made their first contribution in [https://github.com/pmndrs/zustand/pull/2001](https://togithub.com/pmndrs/zustand/pull/2001) - [@​mayank1513](https://togithub.com/mayank1513) made their first contribution in [https://github.com/pmndrs/zustand/pull/2015](https://togithub.com/pmndrs/zustand/pull/2015) - [@​fdb](https://togithub.com/fdb) made their first contribution in [https://github.com/pmndrs/zustand/pull/2029](https://togithub.com/pmndrs/zustand/pull/2029) - [@​tmkx](https://togithub.com/tmkx) made their first contribution in [https://github.com/pmndrs/zustand/pull/2032](https://togithub.com/pmndrs/zustand/pull/2032) - [@​OshriAsulin](https://togithub.com/OshriAsulin) made their first contribution in [https://github.com/pmndrs/zustand/pull/2028](https://togithub.com/pmndrs/zustand/pull/2028) - [@​ivanquirino](https://togithub.com/ivanquirino) made their first contribution in [https://github.com/pmndrs/zustand/pull/2047](https://togithub.com/pmndrs/zustand/pull/2047) - [@​stavkamil](https://togithub.com/stavkamil) made their first contribution in [https://github.com/pmndrs/zustand/pull/2071](https://togithub.com/pmndrs/zustand/pull/2071) - [@​NaamuKim](https://togithub.com/NaamuKim) made their first contribution in [https://github.com/pmndrs/zustand/pull/2088](https://togithub.com/pmndrs/zustand/pull/2088) - [@​FaberVitale](https://togithub.com/FaberVitale) made their first contribution in [https://github.com/pmndrs/zustand/pull/2090](https://togithub.com/pmndrs/zustand/pull/2090) **Full Changelog**: pmndrs/zustand@v4.4.1...v4.4.2 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 4pm every weekday" in timezone Europe/Paris, 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/specfy/specfy). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40Ni4wIiwidXBkYXRlZEluVmVyIjoiMzcuNDYuMCIsInRhcmdldEJyYW5jaCI6ImNob3JlL3Jlbm92YXRlQmFzZUJyYW5jaCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@mheob/eslint-config](https://togithub.com/mheob/config/tree/main/packages/eslint-config) ([source](https://togithub.com/mheob/config)) | [`^5.1.0` -> `^5.2.0`](https://renovatebot.com/diffs/npm/@mheob%2feslint-config/5.1.0/5.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@mheob%2feslint-config/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@mheob%2feslint-config/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@mheob%2feslint-config/5.1.0/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@mheob%2feslint-config/5.1.0/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@mheob/prettier-config](https://togithub.com/mheob/config/tree/main/packages/prettier-config) ([source](https://togithub.com/mheob/config)) | [`^3.1.0` -> `^3.2.0`](https://renovatebot.com/diffs/npm/@mheob%2fprettier-config/3.1.0/3.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@mheob%2fprettier-config/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@mheob%2fprettier-config/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@mheob%2fprettier-config/3.1.0/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@mheob%2fprettier-config/3.1.0/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`^20.8.8` -> `^20.10.1`](https://renovatebot.com/diffs/npm/@types%2fnode/20.8.9/20.10.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.8.9/20.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.8.9/20.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@types/react](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`^18.2.31` -> `^18.2.39`](https://renovatebot.com/diffs/npm/@types%2freact/18.2.33/18.2.39) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.2.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.2.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.2.33/18.2.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.2.33/18.2.39?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@types/react-dom](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)) | [`^18.2.14` -> `^18.2.17`](https://renovatebot.com/diffs/npm/@types%2freact-dom/18.2.14/18.2.17) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact-dom/18.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact-dom/18.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact-dom/18.2.14/18.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact-dom/18.2.14/18.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@vitejs/plugin-react](https://togithub.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme) ([source](https://togithub.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react)) | [`^4.1.0` -> `^4.2.0`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-react/4.1.0/4.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitejs%2fplugin-react/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitejs%2fplugin-react/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitejs%2fplugin-react/4.1.0/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitejs%2fplugin-react/4.1.0/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [eslint](https://eslint.org) ([source](https://togithub.com/eslint/eslint)) | [`^8.52.0` -> `^8.54.0`](https://renovatebot.com/diffs/npm/eslint/8.52.0/8.54.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/8.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/8.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/8.52.0/8.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/8.52.0/8.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [prettier](https://prettier.io) ([source](https://togithub.com/prettier/prettier)) | [`^3.0.3` -> `^3.1.0`](https://renovatebot.com/diffs/npm/prettier/3.0.3/3.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier/3.0.3/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.0.3/3.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [typescript](https://www.typescriptlang.org/) ([source](https://togithub.com/Microsoft/TypeScript)) | [`^5.2.2` -> `^5.3.2`](https://renovatebot.com/diffs/npm/typescript/5.2.2/5.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/5.2.2/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.2.2/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [zustand](https://togithub.com/pmndrs/zustand) | [`^4.4.4` -> `^4.4.7`](https://renovatebot.com/diffs/npm/zustand/4.4.4/4.4.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/zustand/4.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zustand/4.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zustand/4.4.4/4.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zustand/4.4.4/4.4.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>mheob/config (@​mheob/eslint-config)</summary> ### [`v5.2.0`](https://togithub.com/mheob/config/releases/tag/%40mheob/eslint-config%405.2.0) [Compare Source](https://togithub.com/mheob/config/compare/@mheob/eslint-config@5.1.1...@mheob/eslint-config@5.2.0) ##### Minor Changes - [#​147](https://togithub.com/mheob/config/pull/147) ([@​mheob](https://togithub.com/mheob)): set `unicorn/no-null` rule to `off` ### [`v5.1.1`](https://togithub.com/mheob/config/releases/tag/%40mheob/eslint-config%405.1.1) [Compare Source](https://togithub.com/mheob/config/compare/@mheob/eslint-config@5.1.0...@mheob/eslint-config@5.1.1) ##### Patch Changes - [#​145](https://togithub.com/mheob/config/pull/145) ([@​mheob](https://togithub.com/mheob)): update dependencies - [#​135](https://togithub.com/mheob/config/pull/135) ([@​mheob](https://togithub.com/mheob)): update dependencies </details> <details> <summary>vitejs/vite-plugin-react (@​vitejs/plugin-react)</summary> ### [`v4.2.0`](https://togithub.com/vitejs/vite-plugin-react/blob/HEAD/packages/plugin-react/CHANGELOG.md#420-2023-11-16) [Compare Source](https://togithub.com/vitejs/vite-plugin-react/compare/v4.1.1...v4.2.0) ##### Update peer dependency range to target Vite 5 There were no breaking change that impacted this plugin, so any combination of React plugins and Vite core version will work. ##### Align jsx runtime for optimized dependencies This will only affect people using internal libraries that contains untranspiled JSX. This change aligns the optimizer with the source code and avoid issues when the published source don't have `React` in the scope. Reminder: While being partially supported in Vite, publishing TS & JSX outside of internal libraries is highly discouraged. ### [`v4.1.1`](https://togithub.com/vitejs/vite-plugin-react/blob/HEAD/packages/plugin-react/CHANGELOG.md#411-2023-11-02) [Compare Source](https://togithub.com/vitejs/vite-plugin-react/compare/v4.1.0...v4.1.1) - Enable retainLines to get correct line numbers for jsxDev (fix [#​235](https://togithub.com/vitejs/vite-plugin-react/issues/235)) </details> <details> <summary>eslint/eslint (eslint)</summary> ### [`v8.54.0`](https://togithub.com/eslint/eslint/releases/tag/v8.54.0) [Compare Source](https://togithub.com/eslint/eslint/compare/v8.53.0...v8.54.0) #### Features - [`a7a883b`](https://togithub.com/eslint/eslint/commit/a7a883bd6ba4f140b60cbbb2be5b53d750f6c8db) feat: for-direction rule add check for condition in reverse order ([#​17755](https://togithub.com/eslint/eslint/issues/17755)) (Angelo Annunziata) - [`1452dc9`](https://togithub.com/eslint/eslint/commit/1452dc9f12c45c05d7c569f737221f0d988ecef1) feat: Add suggestions to no-console ([#​17680](https://togithub.com/eslint/eslint/issues/17680)) (Joel Mathew Koshy) - [`21ebf8a`](https://togithub.com/eslint/eslint/commit/21ebf8a811be9f4b009cf70a10be5062d4fdc736) feat: update `no-array-constructor` rule ([#​17711](https://togithub.com/eslint/eslint/issues/17711)) (Francesco Trotta) #### Bug Fixes - [`98926e6`](https://togithub.com/eslint/eslint/commit/98926e6e7323e5dd12a9f016cb558144296665af) fix: Ensure that extra data is not accidentally stored in the cache file ([#​17760](https://togithub.com/eslint/eslint/issues/17760)) (Milos Djermanovic) - [`e8cf9f6`](https://togithub.com/eslint/eslint/commit/e8cf9f6a524332293f8b2c90a2db4a532e47d919) fix: Make dark scroll bar in dark theme ([#​17753](https://togithub.com/eslint/eslint/issues/17753)) (Pavel) - [`3cbeaad`](https://togithub.com/eslint/eslint/commit/3cbeaad7b943c153937ce34365cec2c406f2b98b) fix: Use `cwd` constructor option as config `basePath` in Linter ([#​17705](https://togithub.com/eslint/eslint/issues/17705)) (Milos Djermanovic) #### Documentation - [`becfdd3`](https://togithub.com/eslint/eslint/commit/becfdd39b25d795e56c9a13eb3e77af6b9c86e8a) docs: Make clear when rules are removed ([#​17728](https://togithub.com/eslint/eslint/issues/17728)) (Nicholas C. Zakas) - [`05d6e99`](https://togithub.com/eslint/eslint/commit/05d6e99153ed6d94eb30f46c57609371918a41f3) docs: update "Submit a Pull Request" page ([#​17712](https://togithub.com/eslint/eslint/issues/17712)) (Francesco Trotta) - [`eb2279e`](https://togithub.com/eslint/eslint/commit/eb2279e5148cee8fdea7dae614f4f8af7a2d06c3) docs: display info about deprecated rules ([#​17749](https://togithub.com/eslint/eslint/issues/17749)) (Percy Ma) - [`d245326`](https://togithub.com/eslint/eslint/commit/d24532601e64714ac5d08507e05aa5c14ecd1d5a) docs: Correct working in migrating plugin docs ([#​17722](https://togithub.com/eslint/eslint/issues/17722)) (Filip Tammergård) #### Chores - [`d644de9`](https://togithub.com/eslint/eslint/commit/d644de9a4b593b565617303a095bc9aa69e7b768) chore: upgrade [@​eslint/js](https://togithub.com/eslint/js)[@​8](https://togithub.com/8).54.0 ([#​17773](https://togithub.com/eslint/eslint/issues/17773)) (Milos Djermanovic) - [`1e6e314`](https://togithub.com/eslint/eslint/commit/1e6e31415cc429a3a9fc64b2ec03df0e0ec0c91b) chore: package.json update for [@​eslint/js](https://togithub.com/eslint/js) release (Jenkins) - [`6fb8805`](https://togithub.com/eslint/eslint/commit/6fb8805310afe7476d6c404f172177a6d15fcf11) chore: Fixed grammar in issue_templates/rule_change ([#​17770](https://togithub.com/eslint/eslint/issues/17770)) (Joel Mathew Koshy) - [`85db724`](https://togithub.com/eslint/eslint/commit/85db7243ddb8706ed60ab64a7ddf604d0d7de493) chore: upgrade `markdownlint` to 0.31.1 ([#​17754](https://togithub.com/eslint/eslint/issues/17754)) (Nitin Kumar) - [`6d470d2`](https://togithub.com/eslint/eslint/commit/6d470d2e74535761bd56dcb1c021b463ef9e8a9c) chore: update dependency recast to ^0.23.0 ([#​17736](https://togithub.com/eslint/eslint/issues/17736)) (renovate\[bot]) - [`b7121b5`](https://togithub.com/eslint/eslint/commit/b7121b590d578c9c9b38ee481313317f30e54817) chore: update dependency markdownlint-cli to ^0.37.0 ([#​17735](https://togithub.com/eslint/eslint/issues/17735)) (renovate\[bot]) - [`633b9a1`](https://togithub.com/eslint/eslint/commit/633b9a19752b6a22ab4d6c824f27a75ac0e4151b) chore: update dependency regenerator-runtime to ^0.14.0 ([#​17739](https://togithub.com/eslint/eslint/issues/17739)) (renovate\[bot]) - [`acac16f`](https://togithub.com/eslint/eslint/commit/acac16fdf8540f7ba86cf637e3c1b253bd35a268) chore: update dependency vite-plugin-commonjs to ^0.10.0 ([#​17740](https://togithub.com/eslint/eslint/issues/17740)) (renovate\[bot]) - [`ba8ca7e`](https://togithub.com/eslint/eslint/commit/ba8ca7e3debcba68ee7015b9221cf5acd7870206) chore: add .github/renovate.json5 ([#​17567](https://togithub.com/eslint/eslint/issues/17567)) (Josh Goldberg ✨) ### [`v8.53.0`](https://togithub.com/eslint/eslint/releases/tag/v8.53.0) [Compare Source](https://togithub.com/eslint/eslint/compare/v8.52.0...v8.53.0) #### Features - [`528e1c0`](https://togithub.com/eslint/eslint/commit/528e1c00dc2aa8636e5b706c4270dc655cfa17e3) feat: Deprecate formatting rules ([#​17696](https://togithub.com/eslint/eslint/issues/17696)) (Nicholas C. Zakas) - [`c0b11dd`](https://togithub.com/eslint/eslint/commit/c0b11ddb9f8aacc64c3933b9f278939aa7bea481) feat: Add suggestions for no-prototype-builtins ([#​17677](https://togithub.com/eslint/eslint/issues/17677)) (Yonathan Randolph) #### Bug Fixes - [`1ad6257`](https://togithub.com/eslint/eslint/commit/1ad6257744d63281235fcc33288394b1d69b34ce) fix: ensure that exit code for fatal errors is not overwritten ([#​17683](https://togithub.com/eslint/eslint/issues/17683)) (Milos Djermanovic) - [`b329ea7`](https://togithub.com/eslint/eslint/commit/b329ea748dff45f11c7e218208244dc24fcb5c8f) fix: add `;` after JSX nodes in `no-object-constructor` autofix ([#​17672](https://togithub.com/eslint/eslint/issues/17672)) (Francesco Trotta) #### Documentation - [`ab8c60d`](https://togithub.com/eslint/eslint/commit/ab8c60d4f859cec787b5a12f7271b40e666235f5) docs: change position of return to top button ([#​17688](https://togithub.com/eslint/eslint/issues/17688)) (Tanuj Kanti) - [`4fc44c0`](https://togithub.com/eslint/eslint/commit/4fc44c0b8c5dca466bffdfe01dfd80794d7762b7) docs: update twitter icon to new X icon ([#​17687](https://togithub.com/eslint/eslint/issues/17687)) (Tanuj Kanti) - [`4164b2c`](https://togithub.com/eslint/eslint/commit/4164b2ceec89726b18ea0b0e34fab05735d55a09) docs: Update README (GitHub Actions Bot) - [`8651895`](https://togithub.com/eslint/eslint/commit/8651895ca7ae15e13d74c8be67d9eebd63a7ce1f) docs: Fix tabs in rule examples ([#​17653](https://togithub.com/eslint/eslint/issues/17653)) (Francesco Trotta) - [`3aec1c5`](https://togithub.com/eslint/eslint/commit/3aec1c55ba2c6d2833e1c0afe0a58f0cc6bbc0a4) docs: explained rule fixers and suggestions ([#​17657](https://togithub.com/eslint/eslint/issues/17657)) (Josh Goldberg ✨) #### Chores - [`ba4d4d5`](https://togithub.com/eslint/eslint/commit/ba4d4d567a82554250dd8c7933322824e6a73944) chore: remove metascraper ([#​17707](https://togithub.com/eslint/eslint/issues/17707)) (Milos Djermanovic) - [`0d07338`](https://togithub.com/eslint/eslint/commit/0d0733882944b4849d71a40723c251213698cef9) chore: Update dependencies ([#​17706](https://togithub.com/eslint/eslint/issues/17706)) (Milos Djermanovic) - [`93256a3`](https://togithub.com/eslint/eslint/commit/93256a32e312f3f4e5c532762df71bdc06bded20) chore: package.json update for [@​eslint/js](https://togithub.com/eslint/js) release (ESLint Jenkins) - [`485ec7d`](https://togithub.com/eslint/eslint/commit/485ec7d08ed2040c292f52bf9b9152f6c8ef4809) test: fix ESLint tests for caching ([#​17699](https://togithub.com/eslint/eslint/issues/17699)) (Milos Djermanovic) - [`db06a7f`](https://togithub.com/eslint/eslint/commit/db06a7ff7992a74368f03d1f21beb00df0407021) ci: bump actions/setup-node from 3 to 4 ([#​17676](https://togithub.com/eslint/eslint/issues/17676)) (dependabot\[bot]) - [`994596b`](https://togithub.com/eslint/eslint/commit/994596b07f5ff20a615a4be1ea03e5fd59cdb84b) ci: run tests in Node.js 21 ([#​17673](https://togithub.com/eslint/eslint/issues/17673)) (Francesco Trotta) </details> <details> <summary>prettier/prettier (prettier)</summary> ### [`v3.1.0`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#310) [Compare Source](https://togithub.com/prettier/prettier/compare/3.0.3...3.1.0) [diff](https://togithub.com/prettier/prettier/compare/3.0.3...3.1.0) 🔗 [Release Notes](https://prettier.io/blog/2023/11/13/3.1.0.html) </details> <details> <summary>Microsoft/TypeScript (typescript)</summary> ### [`v5.3.2`](https://togithub.com/microsoft/TypeScript/releases/tag/v5.3.2): TypeScript 5.3 [Compare Source](https://togithub.com/Microsoft/TypeScript/compare/v5.2.2...v5.3.2) For release notes, check out the [release announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-5-3/). For the complete list of fixed issues, check out the - [fixed issues query for Typescript 5.3.0 (Beta)](https://togithub.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.3.0%22+is%3Aclosed+). - [fixed issues query for Typescript 5.3.1 (RC)](https://togithub.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.3.1%22+is%3Aclosed+). - [fixed issues query for Typescript 5.3.2 (Stable)](https://togithub.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.3.2%22+is%3Aclosed+). Downloads are available on: - [NuGet package](https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild) </details> <details> <summary>pmndrs/zustand (zustand)</summary> ### [`v4.4.7`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.7) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.6...v4.4.7) There's a small fix for a use case with an non-object value in store. #### What's Changed - fix(vanilla): unexpected null state update behavior by [@​wulimao49](https://togithub.com/wulimao49) in [https://github.com/pmndrs/zustand/pull/2213](https://togithub.com/pmndrs/zustand/pull/2213) #### New Contributors - [@​isiagi](https://togithub.com/isiagi) made their first contribution in [https://github.com/pmndrs/zustand/pull/2208](https://togithub.com/pmndrs/zustand/pull/2208) - [@​ADTC](https://togithub.com/ADTC) made their first contribution in [https://github.com/pmndrs/zustand/pull/2202](https://togithub.com/pmndrs/zustand/pull/2202) - [@​wulimao49](https://togithub.com/wulimao49) made their first contribution in [https://github.com/pmndrs/zustand/pull/2213](https://togithub.com/pmndrs/zustand/pull/2213) **Full Changelog**: pmndrs/zustand@v4.4.6...v4.4.7 ### [`v4.4.6`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.6) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.5...v4.4.6) v4.4.5 has an issue with some TypeScript configs about module resolution. It should be fixed now. Thanks for the patience. #### What's Changed - Update export types by [@​dbritto-dev](https://togithub.com/dbritto-dev) in [https://github.com/pmndrs/zustand/pull/2170](https://togithub.com/pmndrs/zustand/pull/2170) #### New Contributors - [@​cheatkey](https://togithub.com/cheatkey) made their first contribution in [https://github.com/pmndrs/zustand/pull/2147](https://togithub.com/pmndrs/zustand/pull/2147) - [@​frixaco](https://togithub.com/frixaco) made their first contribution in [https://github.com/pmndrs/zustand/pull/2166](https://togithub.com/pmndrs/zustand/pull/2166) **Full Changelog**: pmndrs/zustand@v4.4.5...v4.4.6 ### [`v4.4.5`](https://togithub.com/pmndrs/zustand/releases/tag/v4.4.5) [Compare Source](https://togithub.com/pmndrs/zustand/compare/v4.4.4...v4.4.5) Hopefully, it should fix some issues with Node.js environment including Next.js. #### What's Changed - fix: importing CJS React in ESM by [@​dai-shi](https://togithub.com/dai-shi) in [https://github.com/pmndrs/zustand/pull/2154](https://togithub.com/pmndrs/zustand/pull/2154) - Apply publint recommendations by [@​dbritto-dev](https://togithub.com/dbritto-dev) in [https://github.com/pmndrs/zustand/pull/2157](https://togithub.com/pmndrs/zustand/pull/2157) #### New Contributors - [@​plrs9816](https://togithub.com/plrs9816) made their first contribution in [https://github.com/pmndrs/zustand/pull/2137](https://togithub.com/pmndrs/zustand/pull/2137) - [@​Brammm](https://togithub.com/Brammm) made their first contribution in [https://github.com/pmndrs/zustand/pull/2139](https://togithub.com/pmndrs/zustand/pull/2139) - [@​sobies93](https://togithub.com/sobies93) made their first contribution in [https://github.com/pmndrs/zustand/pull/2142](https://togithub.com/pmndrs/zustand/pull/2142) **Full Changelog**: pmndrs/zustand@v4.4.4...v4.4.5 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" in timezone Europe/Berlin, 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. --- - [ ] 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/mheob/ef-calc).
Related Issues or Discussions
Summary
Added example of using third-party libraries to the "How do I use it with Map and Set" section of the persist documentation
There's no need to write code to serialise or deserialise data that is not supported by JSON.stringify
Check List
yarn run prettier
for formatting code and docs