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

Update Cache Interface types #2554

Merged
merged 4 commits into from
Apr 8, 2023
Merged

Conversation

dmmulroy
Copy link
Contributor

@dmmulroy dmmulroy commented Apr 7, 2023

Update Cache Interface types

Update 04/08/23

Per discussion with @promer94, the solution outlined in An Alternative Approach has been implemented rather than updating the keys interface.

Motivation & Background

As it's currently typed, the Cache interface that is required for users to create and provide their own cache implementations mandates that the keys method return an IterableIterator<string>. I believe this to be incorrectly typed, or at the very least, inconveniently typed and a burden for consumers. I think that the correct type should be IterableIterator<Key> given that the get, set, and delete methods all require a Key as input.

Consider the default implementation provided by swr:

// Default cache provider
const [cache, mutate] = initCache(new Map()) as [Cache<any>, ScopedMutator<any>]

This is effectively the same as:

const cacheMap: Cache<any> = new Map<Key, State<any, any>>()
const [cache, mutate] = initCache(cacheMap) as [Cache<any>, ScopedMutator<any>]

Which results in a type error:

Type 'Map<Key, State<any, any>>' is not assignable to type 'Cache<any>'.
     The types returned by 'keys()' are incompatible between these types.
       Type 'IterableIterator<Key>' is not assignable to type 'IterableIterator<string>'.
         Type 'Key' is not assignable to type 'string'.
           Type 'undefined' is not assignable to type 'string'.

This puts a burden on users/consumers of swr when implementing their own cache, especially if the underlying data structure is a Map.

My use case is creating a custom LRU Cache to back swr, see the following gist for its implementation: https://gist.github.com/dmmulroy/33c31bef81554b099726b3a680dad974

Because keys is typed as IterableIterator<string> I have to cast.

/**
   * Returns an iterable iterator over the keys in the cache.
   *
   * @returns {IterableIterator<string>} - An iterator of the cache keys.
   */
  public keys(): IterableIterator<string> {
    return this.cache.keys() as IterableIterator<string>
  }

An Alternative Approach

An alternative approach would be to update the Cache interface to the following:

export interface Cache<Data = any> {
  keys(): IterableIterator<string>
  get(key: string): State<Data> | undefined
  set(key: string, value: State<Data>): void
  delete(key: string): void
}

This actually may be more accurate and reflect what occurs at run time. As far as I can tell, any time the cache is accessed by swr internally the key is always serialized into a string via the serialize1 function prior to access.

You can see that any time the cache is accessed2, it's accessed via callbacks returned from createCacheHelper3 in which the SWRGlobalState is referenced/retrieved and used get to the setter callback from initCache4 which is stored in global state. In all instances (you can search by reference to confirm), the Getter and Setter callbacks are passed string keys which have been serialized.

In addition, I believe this may actually be worth considering because unstable_serialize5 is publicly exported. I assume this is to aid consumers/users if they choose to directly access/mutate the cache (despite explicitly being called out in the docs as anti pattern6) as seen in #2216.

Footnotes

  1. https://github.com/vercel/swr/blob/main/_internal/utils/serialize.ts#L6

  2. Getter Callback, Setter Callback, Previous value in Setter, Setter Callback from SWRGlobalState

  3. https://github.com/vercel/swr/blob/main/_internal/utils/helper.ts#L32

  4. https://github.com/vercel/swr/blob/main/_internal/utils/cache.ts#L26

  5. https://github.com/vercel/swr/blob/main/core/use-swr.ts#L679

  6. https://swr.vercel.app/docs/advanced/cache#modify-the-cache-data

@codesandbox-ci
Copy link

codesandbox-ci bot commented Apr 7, 2023

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 b58d4a0:

Sandbox Source
SWR-Basic Configuration
SWR-States Configuration
SWR-Infinite Configuration
SWR-SSR Configuration

@dmmulroy
Copy link
Contributor Author

dmmulroy commented Apr 8, 2023

I also just noticed that the docs are incorrect as well and list the type of Cache as the following:

interface Cache<Data> {
  get(key: string): Data | undefined
  set(key: string, value: Data): void
  delete(key: string): void
  keys(): IterableIterator<string>
}

@promer94
Copy link
Collaborator

promer94 commented Apr 8, 2023

Thanks for the PR !

I think we should take the alternative approach here.
It is more simple and the fact is that we only use string key here.

@dmmulroy
Copy link
Contributor Author

dmmulroy commented Apr 8, 2023

Awesome - I'll be happy to make those changes and get them pushed up tomorrow or sunday.

@dmmulroy dmmulroy changed the title Update Cache Interface keys method to return IterableIterator<Key> Update Cache Interface types Apr 8, 2023
@dmmulroy
Copy link
Contributor Author

dmmulroy commented Apr 8, 2023

Changes have been made, take a look when you have the chance @promer94 🚀

Copy link
Collaborator

@promer94 promer94 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks

@promer94 promer94 merged commit bb55887 into vercel:main Apr 8, 2023
4 checks passed
@dmmulroy dmmulroy deleted the update-cache-types branch April 9, 2023 17:35
kodiakhq bot pushed a commit to kula-app/OnLaunch that referenced this pull request Apr 10, 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 |
|---|---|---|---|---|---|
| [swr](https://swr.vercel.app) ([source](https://togithub.com/vercel/swr)) | [`2.1.2` -> `2.1.3`](https://renovatebot.com/diffs/npm/swr/2.1.2/2.1.3) | [![age](https://badges.renovateapi.com/packages/npm/swr/2.1.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/swr/2.1.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/swr/2.1.3/compatibility-slim/2.1.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/swr/2.1.3/confidence-slim/2.1.2)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>vercel/swr</summary>

### [`v2.1.3`](https://togithub.com/vercel/swr/releases/tag/v2.1.3)

[Compare Source](https://togithub.com/vercel/swr/compare/v2.1.2...v2.1.3)

#### What's Changed

-   Fix [#&#8203;2548](https://togithub.com/vercel/swr/issues/2548): pass origin key to subcription callback by [@&#8203;Zheaoli](https://togithub.com/Zheaoli) in [vercel/swr#2550
-   Examples: fix type in axios-typescript example by [@&#8203;daochouwangu](https://togithub.com/daochouwangu) in [vercel/swr#2552
-   Update Cache Interface types by [@&#8203;dmmulroy](https://togithub.com/dmmulroy) in [vercel/swr#2554
-   fix: data passed to refreshInterval function is not latest by [@&#8203;hong24](https://togithub.com/hong24) in [vercel/swr#2354
-   types: allow passing function as `Data` for `useSWRSubscriptionOptions` by [@&#8203;promer94](https://togithub.com/promer94) in [vercel/swr#2551

#### New Contributors

-   [@&#8203;Zheaoli](https://togithub.com/Zheaoli) made their first contribution in [vercel/swr#2550
-   [@&#8203;daochouwangu](https://togithub.com/daochouwangu) made their first contribution in [vercel/swr#2552
-   [@&#8203;dmmulroy](https://togithub.com/dmmulroy) made their first contribution in [vercel/swr#2554

**Full Changelog**: vercel/swr@v2.1.2...v2.1.3

</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://app.renovatebot.com/dashboard#github/kula-app/OnLaunch).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS40MC4wIiwidXBkYXRlZEluVmVyIjoiMzUuNDAuMCJ9-->
David-Duefrene pushed a commit to David-Duefrene/dataviewer that referenced this pull request Apr 12, 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 |
|---|---|---|---|---|---|
| [swr](https://swr.vercel.app)
([source](https://togithub.com/vercel/swr)) | [`2.1.2` ->
`2.1.3`](https://renovatebot.com/diffs/npm/swr/2.1.2/2.1.3) |
[![age](https://badges.renovateapi.com/packages/npm/swr/2.1.3/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/swr/2.1.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/swr/2.1.3/compatibility-slim/2.1.2)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/swr/2.1.3/confidence-slim/2.1.2)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>vercel/swr</summary>

### [`v2.1.3`](https://togithub.com/vercel/swr/releases/tag/v2.1.3)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.2...v2.1.3)

#### What's Changed

- Fix [#&#8203;2548](https://togithub.com/vercel/swr/issues/2548): pass
origin key to subcription callback by
[@&#8203;Zheaoli](https://togithub.com/Zheaoli) in
[vercel/swr#2550
- Examples: fix type in axios-typescript example by
[@&#8203;daochouwangu](https://togithub.com/daochouwangu) in
[vercel/swr#2552
- Update Cache Interface types by
[@&#8203;dmmulroy](https://togithub.com/dmmulroy) in
[vercel/swr#2554
- fix: data passed to refreshInterval function is not latest by
[@&#8203;hong24](https://togithub.com/hong24) in
[vercel/swr#2354
- types: allow passing function as `Data` for
`useSWRSubscriptionOptions` by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2551

#### New Contributors

- [@&#8203;Zheaoli](https://togithub.com/Zheaoli) made their first
contribution in
[vercel/swr#2550
- [@&#8203;daochouwangu](https://togithub.com/daochouwangu) made their
first contribution in
[vercel/swr#2552
- [@&#8203;dmmulroy](https://togithub.com/dmmulroy) made their first
contribution in
[vercel/swr#2554

**Full Changelog**:
vercel/swr@v2.1.2...v2.1.3

</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://app.renovatebot.com/dashboard#github/David-Duefrene/dataviewer).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS40MC4wIiwidXBkYXRlZEluVmVyIjoiMzUuNDAuMCJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
sebald pushed a commit to sebald/pattern-analyzer that referenced this pull request Apr 30, 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 |
|---|---|---|---|---|---|
| [swr](https://swr.vercel.app)
([source](https://togithub.com/vercel/swr)) | [`2.1.2` ->
`2.1.5`](https://renovatebot.com/diffs/npm/swr/2.1.2/2.1.5) |
[![age](https://badges.renovateapi.com/packages/npm/swr/2.1.5/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/swr/2.1.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/swr/2.1.5/compatibility-slim/2.1.2)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/swr/2.1.5/confidence-slim/2.1.2)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>vercel/swr</summary>

### [`v2.1.5`](https://togithub.com/vercel/swr/releases/tag/v2.1.5)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.4...v2.1.5)

#### What's Changed

- fix: missing interop helpers in bundle by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2582

**Full Changelog**:
vercel/swr@v2.1.4...v2.1.5

### [`v2.1.4`](https://togithub.com/vercel/swr/releases/tag/v2.1.4)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.3...v2.1.4)

#### What's Changed

- Upgrade bundler by [@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2557
- examples: fix invalid links by
[@&#8203;fxOne](https://togithub.com/fxOne) in
[vercel/swr#2559
- types: Allow auto-import by improving generated types by
[@&#8203;oosawy](https://togithub.com/oosawy) in
[vercel/swr#2563
- fix: pass serialized args to preload fetcher by
[@&#8203;oosawy](https://togithub.com/oosawy) in
[vercel/swr#2564
- chore: use provenance for release by
[@&#8203;HerringtonDarkholme](https://togithub.com/HerringtonDarkholme)
in
[vercel/swr#2571
- deps: update
[@&#8203;testing-library/react](https://togithub.com/testing-library/react)
to v14 by [@&#8203;koba04](https://togithub.com/koba04) in
[vercel/swr#2578
- fix: Fix dependency tracking and useSES bug by
[@&#8203;shuding](https://togithub.com/shuding) and
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2576

#### New Contributors

- [@&#8203;fxOne](https://togithub.com/fxOne) made their first
contribution in
[vercel/swr#2559
- [@&#8203;oosawy](https://togithub.com/oosawy) made their first
contribution in
[vercel/swr#2563
-
[@&#8203;HerringtonDarkholme](https://togithub.com/HerringtonDarkholme)
made their first contribution in
[vercel/swr#2571

**Full Changelog**:
vercel/swr@v2.1.3...v2.1.4

### [`v2.1.3`](https://togithub.com/vercel/swr/releases/tag/v2.1.3)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.2...v2.1.3)

#### What's Changed

- Fix [#&#8203;2548](https://togithub.com/vercel/swr/issues/2548): pass
origin key to subcription callback by
[@&#8203;Zheaoli](https://togithub.com/Zheaoli) in
[vercel/swr#2550
- Examples: fix type in axios-typescript example by
[@&#8203;daochouwangu](https://togithub.com/daochouwangu) in
[vercel/swr#2552
- Update Cache Interface types by
[@&#8203;dmmulroy](https://togithub.com/dmmulroy) in
[vercel/swr#2554
- fix: data passed to refreshInterval function is not latest by
[@&#8203;hong24](https://togithub.com/hong24) in
[vercel/swr#2354
- types: allow passing function as `Data` for
`useSWRSubscriptionOptions` by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2551

#### New Contributors

- [@&#8203;Zheaoli](https://togithub.com/Zheaoli) made their first
contribution in
[vercel/swr#2550
- [@&#8203;daochouwangu](https://togithub.com/daochouwangu) made their
first contribution in
[vercel/swr#2552
- [@&#8203;dmmulroy](https://togithub.com/dmmulroy) made their first
contribution in
[vercel/swr#2554

**Full Changelog**:
vercel/swr@v2.1.2...v2.1.3

</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 is behind base branch, 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://app.renovatebot.com/dashboard#github/sebald/pattern-analyzer).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS40MC4wIiwidXBkYXRlZEluVmVyIjoiMzUuNjYuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot added a commit to Unleash/unleash that referenced this pull request May 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 |
|---|---|---|---|---|---|
| [swr](https://swr.vercel.app)
([source](https://togithub.com/vercel/swr)) | [`2.0.4` ->
`2.1.5`](https://renovatebot.com/diffs/npm/swr/2.0.4/2.1.5) |
[![age](https://badges.renovateapi.com/packages/npm/swr/2.1.5/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/swr/2.1.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/swr/2.1.5/compatibility-slim/2.0.4)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/swr/2.1.5/confidence-slim/2.0.4)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>vercel/swr</summary>

### [`v2.1.5`](https://togithub.com/vercel/swr/releases/tag/v2.1.5)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.4...v2.1.5)

#### What's Changed

- fix: missing interop helpers in bundle by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2582

**Full Changelog**:
vercel/swr@v2.1.4...v2.1.5

### [`v2.1.4`](https://togithub.com/vercel/swr/releases/tag/v2.1.4)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.3...v2.1.4)

#### What's Changed

- Upgrade bundler by [@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2557
- examples: fix invalid links by
[@&#8203;fxOne](https://togithub.com/fxOne) in
[vercel/swr#2559
- types: Allow auto-import by improving generated types by
[@&#8203;oosawy](https://togithub.com/oosawy) in
[vercel/swr#2563
- fix: pass serialized args to preload fetcher by
[@&#8203;oosawy](https://togithub.com/oosawy) in
[vercel/swr#2564
- chore: use provenance for release by
[@&#8203;HerringtonDarkholme](https://togithub.com/HerringtonDarkholme)
in
[vercel/swr#2571
- deps: update
[@&#8203;testing-library/react](https://togithub.com/testing-library/react)
to v14 by [@&#8203;koba04](https://togithub.com/koba04) in
[vercel/swr#2578
- fix: Fix dependency tracking and useSES bug by
[@&#8203;shuding](https://togithub.com/shuding) and
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2576

#### New Contributors

- [@&#8203;fxOne](https://togithub.com/fxOne) made their first
contribution in
[vercel/swr#2559
- [@&#8203;oosawy](https://togithub.com/oosawy) made their first
contribution in
[vercel/swr#2563
-
[@&#8203;HerringtonDarkholme](https://togithub.com/HerringtonDarkholme)
made their first contribution in
[vercel/swr#2571

**Full Changelog**:
vercel/swr@v2.1.3...v2.1.4

### [`v2.1.3`](https://togithub.com/vercel/swr/releases/tag/v2.1.3)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.2...v2.1.3)

#### What's Changed

- Fix [#&#8203;2548](https://togithub.com/vercel/swr/issues/2548): pass
origin key to subcription callback by
[@&#8203;Zheaoli](https://togithub.com/Zheaoli) in
[vercel/swr#2550
- Examples: fix type in axios-typescript example by
[@&#8203;daochouwangu](https://togithub.com/daochouwangu) in
[vercel/swr#2552
- Update Cache Interface types by
[@&#8203;dmmulroy](https://togithub.com/dmmulroy) in
[vercel/swr#2554
- fix: data passed to refreshInterval function is not latest by
[@&#8203;hong24](https://togithub.com/hong24) in
[vercel/swr#2354
- types: allow passing function as `Data` for
`useSWRSubscriptionOptions` by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2551

#### New Contributors

- [@&#8203;Zheaoli](https://togithub.com/Zheaoli) made their first
contribution in
[vercel/swr#2550
- [@&#8203;daochouwangu](https://togithub.com/daochouwangu) made their
first contribution in
[vercel/swr#2552
- [@&#8203;dmmulroy](https://togithub.com/dmmulroy) made their first
contribution in
[vercel/swr#2554

**Full Changelog**:
vercel/swr@v2.1.2...v2.1.3

### [`v2.1.2`](https://togithub.com/vercel/swr/releases/tag/v2.1.2)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.1...v2.1.2)

##### Patches

-   Improved type inferring for `swr/subscription`
-   Adding `SWRSubscriptionOptions` type for `swr/subscription`

#### Changes

- test: add typing test for empty config by
[@&#8203;koba04](https://togithub.com/koba04) in
[vercel/swr#2521
- test: fix syntax error in Equal type alias implementation by
[@&#8203;SACHINnANYAKKARA](https://togithub.com/SACHINnANYAKKARA) in
[vercel/swr#2517
- chore: remove engines by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2536
- types: improve `useSWRSubscription` types by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2535
- Rename subscription types by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2537

#### New Contributors

- [@&#8203;SACHINnANYAKKARA](https://togithub.com/SACHINnANYAKKARA) made
their first contribution in
[vercel/swr#2517

**Full Changelog**:
vercel/swr@v2.1.1...v2.1.2

### [`v2.1.1`](https://togithub.com/vercel/swr/releases/tag/v2.1.1)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.1.0...v2.1.1)

#### Patches

- refactor: remove useless dataRef, always compare cached data by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2431
- fix: swr infers incorrect `data` type for default `SWRConfig` generic
type by [@&#8203;connorch](https://togithub.com/connorch) in
[vercel/swr#2506

#### Documentation

- docs: update subscription example by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2499

#### New Contributors

- [@&#8203;connorch](https://togithub.com/connorch) made their first
contribution in
[vercel/swr#2506

**Full Changelog**:
vercel/swr@v2.1.0...v2.1.1

### [`v2.1.0`](https://togithub.com/vercel/swr/releases/tag/v2.1.0)

[Compare
Source](https://togithub.com/vercel/swr/compare/v2.0.4...v2.1.0)

#### Feature

- Subscription mode by [@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#1263
- parallel option for useSWRInfinite by
[@&#8203;koba04](https://togithub.com/koba04) in
[vercel/swr#2404

Checkout [subscription docs](https://swr.vercel.app/docs/subscription)
and [useSWRInfinite parallel fetching
docs](https://swr.vercel.app/docs/pagination#parallel-fetching-mode) for
more details

#### Patches

- fix: use the latest config in useSWRMutation by
[@&#8203;koba04](https://togithub.com/koba04) in
[vercel/swr#2468
- Fix: type support for suspense and
fallbackData([#&#8203;2396](https://togithub.com/vercel/swr/issues/2396))
by [@&#8203;taro-28](https://togithub.com/taro-28) in
[vercel/swr#2452
- Error should be reset when new data comes by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2472
- fix: avoid creating new snapshot if cache is not updated at client
during streaming by [@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2475
- refactor: initialize the cache only on first access by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2479

#### Misc

- ci: fix publish workflow by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2453
- ci: faster e2e test by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2428
- test: add a test for keepPreviousData without changing key by
[@&#8203;koba04](https://togithub.com/koba04) in
[vercel/swr#2470
- Always assume subscriptions will return sub count from current key by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2460
- test: Fix flaky e2e test by
[@&#8203;promer94](https://togithub.com/promer94) in
[vercel/swr#2476
- chore: Add subscription example by
[@&#8203;huozhi](https://togithub.com/huozhi) in
[vercel/swr#2480

#### New Contributors

- [@&#8203;taro-28](https://togithub.com/taro-28) made their first
contribution in
[vercel/swr#2452

**Full Changelog**:
vercel/swr@v2.0.4...v2.1.0

</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://app.renovatebot.com/dashboard#github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS42OS4zIiwidXBkYXRlZEluVmVyIjoiMzUuNjkuMyIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants