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

fix(utils/atomWithStorage): defaultStorage with disabled local storage crashes on mount #2354

Conversation

benediktschlager
Copy link
Contributor

Related Issues or Discussions

Fixes downstream issue for https://ui.shadcn.com/
It crashes when cookies are disabled with this exception:
image

Summary

On Firefox accessing the property localStorage of window results in a DOMException: The operation is insecure.
This PR will handle this case gracefully and fall back to providing no storage implementation. This should be fine as we cannot store anything in a cookie-free browser.

Check List

  • yarn run prettier for formatting code and docs

Copy link

vercel bot commented Jan 22, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
jotai ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jan 24, 2024 11:16am

Copy link

codesandbox-ci bot commented Jan 22, 2024

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 76afd16:

Sandbox Source
React Configuration
React TypeScript Configuration
React Browserify Configuration
React Snowpack Configuration
Next.js Configuration
Next.js with custom Babel config Configuration
React with custom Babel config Configuration

Copy link
Member

@dai-shi dai-shi left a comment

Choose a reason for hiding this comment

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

Hi! This looks like a nice improvement!
Please check comments.

src/vanilla/utils/atomWithStorage.ts Outdated Show resolved Hide resolved
src/vanilla/utils/atomWithStorage.ts Outdated Show resolved Hide resolved
tests/react/vanilla-utils/atomWithStorage.test.tsx Outdated Show resolved Hide resolved
@dai-shi
Copy link
Member

dai-shi commented Jan 23, 2024

On Firefox accessing the property localStorage of window results in a DOMException: The operation is insecure.

On Chrome, it's the same with slightly different message:
DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.

@dai-shi dai-shi added this to the v2.6.3 milestone Jan 23, 2024
@dai-shi
Copy link
Member

dai-shi commented Jan 24, 2024

@benediktschlager hi, are you still around?

return window.localStorage
} catch (e) {
// Window could be undefined or local storage could be disabled
if (e instanceof TypeError || e instanceof DOMException) {
Copy link
Member

Choose a reason for hiding this comment

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

Hmm, this is what I tried in Node.js:

> try { window.localStorage } catch (e) { console.log(e instanceof TypeError) }
false
undefined
> try { window.localStorage } catch (e) { console.log(e instanceof ReferenceError) }
true
undefined

Maybe, it's not stable. On the other hand, when is the case we want to throw e?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh, it seems on node the window instance is not even defined.
I'm wondering under which circumstances the window instance is not defined, but this library is used?
As far as I understand, Jotai only works alongside React?

Copy link
Member

Choose a reason for hiding this comment

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

SSR=Server Side Rendering.

@benediktschlager
Copy link
Contributor Author

Hi @dai-shi, I included your feedback.
Can you check again?
Some non-required steps in the pipeline are failing.
Is this fine, or should I add a as any cast to the test to mute this error?

benediktschlager and others added 2 commits January 24, 2024 12:03
Co-authored-by: Daishi Kato <dai-shi@users.noreply.github.com>
Co-authored-by: Daishi Kato <dai-shi@users.noreply.github.com>
@dai-shi
Copy link
Member

dai-shi commented Jan 24, 2024

oops, can you run prettier please?

Copy link
Member

@dai-shi dai-shi left a comment

Choose a reason for hiding this comment

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

Thanks for your contribution!

@dai-shi dai-shi changed the title fix(utils): defaultStorage with disabled local storage crashes on mount fix(utils/atomWithStorage): defaultStorage with disabled local storage crashes on mount Jan 24, 2024
@dai-shi dai-shi merged commit 4f80be9 into pmndrs:main Jan 24, 2024
33 checks passed
davydkov pushed a commit to likec4/likec4 that referenced this pull request Feb 7, 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 |
|---|---|---|---|---|---|
| [jotai](https://togithub.com/pmndrs/jotai) | [`^2.6.0` ->
`^2.6.4`](https://renovatebot.com/diffs/npm/jotai/2.6.0/2.6.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.6.0/2.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.6.0/2.6.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pmndrs/jotai (jotai)</summary>

### [`v2.6.4`](https://togithub.com/pmndrs/jotai/releases/tag/v2.6.4)

[Compare
Source](https://togithub.com/pmndrs/jotai/compare/v2.6.3...v2.6.4)

Performance improvement! Check it out!

##### What's Changed

- refactor: refactoring store and options type by
[@&#8203;ssi02014](https://togithub.com/ssi02014) in
[pmndrs/jotai#2360
- refactor: modified Args type by
[@&#8203;ssi02014](https://togithub.com/ssi02014) in
[pmndrs/jotai#2367
- Improve performance of recomputeDependents by
[@&#8203;samkline](https://togithub.com/samkline) in
[pmndrs/jotai#2363
- fix(vanilla): fix unexpected cache in jotai-scope by
[@&#8203;yf-yang](https://togithub.com/yf-yang) in
[pmndrs/jotai#2371

##### New Contributors

- [@&#8203;ssi02014](https://togithub.com/ssi02014) made their first
contribution in
[pmndrs/jotai#2360
- [@&#8203;samkline](https://togithub.com/samkline) made their first
contribution in
[pmndrs/jotai#2363
- [@&#8203;yf-yang](https://togithub.com/yf-yang) made their first
contribution in
[pmndrs/jotai#2371

**Full Changelog**:
pmndrs/jotai@v2.6.3...v2.6.4

### [`v2.6.3`](https://togithub.com/pmndrs/jotai/releases/tag/v2.6.3)

[Compare
Source](https://togithub.com/pmndrs/jotai/compare/v2.6.2...v2.6.3)

Some improvements in core and utils 👏

#### What's Changed

- fix: atoms should not remount on recalculations (with async
dependencies) by [@&#8203;dmaskasky](https://togithub.com/dmaskasky) in
[pmndrs/jotai#2347
- fix(utils): atomWithReducer for jotai-scope by
[@&#8203;dai-shi](https://togithub.com/dai-shi) in
[pmndrs/jotai#2351
- fix(utils/atomWithStorage): defaultStorage with disabled local storage
crashes on mount by
[@&#8203;benediktschlager](https://togithub.com/benediktschlager) in
[pmndrs/jotai#2354
- feat(vanilla): customizable atom.unstable_is by
[@&#8203;dai-shi](https://togithub.com/dai-shi) in
[pmndrs/jotai#2356

#### New Contributors

- [@&#8203;SpringHgui](https://togithub.com/SpringHgui) made their first
contribution in
[pmndrs/jotai#2320
- [@&#8203;sakurawen](https://togithub.com/sakurawen) made their first
contribution in
[pmndrs/jotai#2358
- [@&#8203;JoltCode](https://togithub.com/JoltCode) made their first
contribution in
[pmndrs/jotai#2357
- [@&#8203;benediktschlager](https://togithub.com/benediktschlager) made
their first contribution in
[pmndrs/jotai#2354

**Full Changelog**:
pmndrs/jotai@v2.6.2...v2.6.3

### [`v2.6.2`](https://togithub.com/pmndrs/jotai/releases/tag/v2.6.2)

[Compare
Source](https://togithub.com/pmndrs/jotai/compare/v2.6.1...v2.6.2)

Some improvements for atomWithStorage. Feedback is welcome.

#### What's Changed

- fix(vanilla): should mount once with atom creator atom by
[@&#8203;nogaten](https://togithub.com/nogaten) in
[pmndrs/jotai#2319
- feat(utils): createJSONStrage options by
[@&#8203;dai-shi](https://togithub.com/dai-shi) in
[pmndrs/jotai#2324
- feat(utils): add withStorageValidator by
[@&#8203;dai-shi](https://togithub.com/dai-shi) in
[pmndrs/jotai#2336

#### New Contributors

- [@&#8203;L-Qun](https://togithub.com/L-Qun) made their first
contribution in
[pmndrs/jotai#2318
- [@&#8203;ahme-dev](https://togithub.com/ahme-dev) made their first
contribution in
[pmndrs/jotai#2332
- [@&#8203;nogaten](https://togithub.com/nogaten) made their first
contribution in
[pmndrs/jotai#2319

**Full Changelog**:
pmndrs/jotai@v2.6.1...v2.6.2

### [`v2.6.1`](https://togithub.com/pmndrs/jotai/releases/tag/v2.6.1)

[Compare
Source](https://togithub.com/pmndrs/jotai/compare/v2.6.0...v2.6.1)

This version has two minor improvements for library authors. It's
wonderful to see Jotai ecosystem growing. No major bugs have been
reported lately. It's fairly okay to say the current version is pretty
stable.

#### What's Changed

- fix(utils): add init property to the return type of atomWithReset by
[@&#8203;jaesoekjjang](https://togithub.com/jaesoekjjang) in
[pmndrs/jotai#2304
- fix(utils): add description for the RESET symbol. by
[@&#8203;MiroslavPetrik](https://togithub.com/MiroslavPetrik) in
[pmndrs/jotai#2307

#### New Contributors

- [@&#8203;wherehows](https://togithub.com/wherehows) made their first
contribution in
[pmndrs/jotai#2270
- [@&#8203;benson00077](https://togithub.com/benson00077) made their
first contribution in
[pmndrs/jotai#2284
- [@&#8203;ioExpander](https://togithub.com/ioExpander) made their first
contribution in
[pmndrs/jotai#2280
- [@&#8203;jaesoekjjang](https://togithub.com/jaesoekjjang) made their
first contribution in
[pmndrs/jotai#2304

**Full Changelog**:
pmndrs/jotai@v2.6.0...v2.6.1

</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/likec4/likec4).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNzMuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE3My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

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