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

Give more meaningful warning when modifying a Shareable #5548

Merged
merged 11 commits into from
May 8, 2024

Conversation

tjzel
Copy link
Collaborator

@tjzel tjzel commented Jan 2, 2024

Summary

Wanted to open this PR for a long time.

Currently we use Object.freeze in development on objects after they were converted to a Shareable. This is problematic for users since there is no information about why is the object immutable all of a sudden.

While this PR won't give a meaningful error when user tries to add a new property to the object when doing something like:

const a = {};

function foo(){
'worklet';
console.log(a.b);
};

runOnUI(worklet)();
a.b = 1;
runOnUI(worklet)();

but it seems to be a rare case and mostly the problems are with modifying existing properties.

Test plan

const a = { b: 1 };
makeShareableCloneRecursive(a);
a.b = 2; // Warning here.

@tjzel tjzel requested a review from piaskowyk January 2, 2024 16:58
Copy link
Member

@tomekzaw tomekzaw left a comment

Choose a reason for hiding this comment

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

Certainly a PR that we all need and deserve, let's just polish some rough edges.

docs/docs/guides/troubleshooting.mdx Outdated Show resolved Hide resolved
src/reanimated2/shareables.ts Outdated Show resolved Hide resolved
app/src/examples/CubesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/OldAnimatedSensorExample.tsx Outdated Show resolved Hide resolved
docs/docs/guides/troubleshooting.mdx Show resolved Hide resolved
docs/docs/guides/troubleshooting.mdx Outdated Show resolved Hide resolved
src/reanimated2/shareables.ts Outdated Show resolved Hide resolved
src/reanimated2/shareables.ts Outdated Show resolved Hide resolved
@tjzel tjzel force-pushed the @tjzel/shareable-freeze-warning branch from 635b72e to e9e9bf5 Compare January 5, 2024 09:11
@tjzel
Copy link
Collaborator Author

tjzel commented Jan 5, 2024

@tomekzaw I moved docs and examples part to a separate PR #5560 after applying review suggestions

src/reanimated2/shareables.ts Outdated Show resolved Hide resolved
docs/docs/guides/troubleshooting.mdx Outdated Show resolved Hide resolved
docs/docs/guides/troubleshooting.mdx Outdated Show resolved Hide resolved
docs/docs/guides/troubleshooting.mdx Show resolved Hide resolved
Copy link
Member

@piaskowyk piaskowyk left a comment

Choose a reason for hiding this comment

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

For me is ok 👌

src/reanimated2/shareables.ts Outdated Show resolved Hide resolved
src/reanimated2/shareables.ts Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
app/src/examples/ShareablesExample.tsx Outdated Show resolved Hide resolved
@tjzel tjzel added this pull request to the merge queue May 8, 2024
Merged via the queue into main with commit 7c5500f May 8, 2024
8 checks passed
@tjzel tjzel deleted the @tjzel/shareable-freeze-warning branch May 8, 2024 14:20
renovate bot added a commit to GSTJ/react-native-magic-modal that referenced this pull request Jun 3, 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-native-reanimated](https://togithub.com/software-mansion/react-native-reanimated)
| [`~3.11.0` ->
`~3.12.0`](https://renovatebot.com/diffs/npm/react-native-reanimated/3.11.0/3.12.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/react-native-reanimated/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-native-reanimated/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-native-reanimated/3.11.0/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-native-reanimated/3.11.0/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>software-mansion/react-native-reanimated
(react-native-reanimated)</summary>

###
[`v3.12.0`](https://togithub.com/software-mansion/react-native-reanimated/releases/tag/3.12.0)

[Compare
Source](https://togithub.com/software-mansion/react-native-reanimated/compare/3.11.0...3.12.0)

#### What's Changed

- Give more meaningful warning when modifying a Shareable by
[@&#8203;tjzel](https://togithub.com/tjzel) in
[software-mansion/react-native-reanimated#5548
- Make animated components use different tags for events by
[@&#8203;szydlovsky](https://togithub.com/szydlovsky) in
[software-mansion/react-native-reanimated#5960
- Add `warning` and `failing` test decorators by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[software-mansion/react-native-reanimated#5929
- Update useAnimatedKeyboard docs by
[@&#8203;maciekstosio](https://togithub.com/maciekstosio) in
[software-mansion/react-native-reanimated#5866
- Change the docs to mention, that `.springify()` works with
`.duration()` by [@&#8203;Latropos](https://togithub.com/Latropos) in
[software-mansion/react-native-reanimated#5990
- \[Android]\[Keyboard] More consistent inequality check to compute
keyboard state by [@&#8203;antFrancon](https://togithub.com/antFrancon)
in
[software-mansion/react-native-reanimated#5874
- fix typo on object key for `targetValues` in custom-animations.mdx by
[@&#8203;JDMathew](https://togithub.com/JDMathew) in
[software-mansion/react-native-reanimated#5994
- Remove outdated code for unsupported React Native versions by
[@&#8203;tomekzaw](https://togithub.com/tomekzaw) in
[software-mansion/react-native-reanimated#5979
- Remove REAInitializer by
[@&#8203;tomekzaw](https://togithub.com/tomekzaw) in
[software-mansion/react-native-reanimated#5681
- Prevent crash on non-existent view updates in Android by
[@&#8203;thomas-rx](https://togithub.com/thomas-rx) in
[software-mansion/react-native-reanimated#5767
- Fix location after shared element transition by
[@&#8203;piaskowyk](https://togithub.com/piaskowyk) in
[software-mansion/react-native-reanimated#6010
- Make `useScrollviewOffset` ref nullable and simplify its code by
[@&#8203;szydlovsky](https://togithub.com/szydlovsky) in
[software-mansion/react-native-reanimated#6009
- fix: use proper classes for bridgeless by
[@&#8203;WoLewicki](https://togithub.com/WoLewicki) in
[software-mansion/react-native-reanimated#5997
- docs: add
[@&#8203;swmansion/t-rex-ui](https://togithub.com/swmansion/t-rex-ui) by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[software-mansion/react-native-reanimated#6015
- Remove `CellRendererComponent` from Animated.FlatList props by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[software-mansion/react-native-reanimated#5951
- Add `useComposedEventHandler` hook by
[@&#8203;szydlovsky](https://togithub.com/szydlovsky) in
[software-mansion/react-native-reanimated#5890
- Align handling colors with RN by
[@&#8203;maciekstosio](https://togithub.com/maciekstosio) in
[software-mansion/react-native-reanimated#5825
- Add more tests - useSharedValue, useAnimatedStyle , useDerivedValue by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[software-mansion/react-native-reanimated#5981
- Make animation RollInLeft work with modifers by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[software-mansion/react-native-reanimated#6039
- Test predefined entering animation by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[software-mansion/react-native-reanimated#5995
- Tests: cancelAnimation, useFrameCallback, measure, withDecay by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[software-mansion/react-native-reanimated#6016
- docs: fix useAnimatedKeyboard page crash by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[software-mansion/react-native-reanimated#6056
- \[Web LA] Remove `existingTransform` by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[software-mansion/react-native-reanimated#6060

#### New Contributors

[@&#8203;antFrancon](https://togithub.com/antFrancon),
[@&#8203;JDMathew](https://togithub.com/JDMathew),
[@&#8203;thomas-rx](https://togithub.com/thomas-rx),
[@&#8203;exploIF](https://togithub.com/exploIF)

#### 🙌 Thank you for your contributions!

**Full Changelog**:
software-mansion/react-native-reanimated@3.11.0...3.12.0

Package build:
https://github.com/software-mansion/react-native-reanimated/actions/runs/9287839734

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **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://developer.mend.io/github/GSTJ/react-native-magic-modal).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@giantslogik
Copy link

@tomekzaw @tjzel this PR crashes our App (after upgrade to 3.12.0) . It crashes on launch with 'property is not configurable'. Any insights into debugging will be appreciated , it crashes at shareables.ts: 321 .
#6082

@tjzel
Copy link
Collaborator Author

tjzel commented Jun 10, 2024

@giantslogik It's fixed.

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

4 participants