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: referential equalities should ignore child nodes #244

Merged
merged 8 commits into from
Jul 14, 2023

Conversation

KATT
Copy link
Contributor

@KATT KATT commented Jul 14, 2023

Closes #245

  • Short-circuit result of the walker on already-seen objects
  • Will make outputs less noisy
  • Should make superjson faster too

yarn test --watch --testNamePattern "#245" --testPathPattern index

@KATT KATT changed the title fix: referential equalities should not include children fix: referential equalities should ignore child nodes Jul 14, 2023
Comment on lines +168 to +171
if (seen) {
// short-circuit result if we've seen this object before
return seen;
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I actually would prefer to return the same here as when we hit circular references here ({ transformedValue: null }) as it would make the output a lot smaller, but that would likely be a breaking change

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@Skn0tt:
would it be OK to return null here under some sort of options flag? it would make big outputs a lot smaller

Copy link
Member

Choose a reason for hiding this comment

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

I like that idea conceptually - less duplicated data is always better - but I agree it's both a breaking change (the output JSON wouldn't have the same structure anymore), and it makes SuperJSON output harder to understand.

I'm assuming you'd like to reduce the output size to save bandwidth, right? Maybe we could perform some kind of benchmark on the difference this would make in practice - I could imagine that with Gzip / Brotli, the difference isn't that big. If we find that the difference is significant even with compression, then I agree we should add a flag for this behaviour! (not in this PR though)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Will do a follow-up PR! 👀

@KATT KATT marked this pull request as ready for review July 14, 2023 13:53
@KATT KATT requested a review from Skn0tt as a code owner July 14, 2023 13:53
src/plainer.ts Outdated Show resolved Hide resolved
src/plainer.ts Outdated Show resolved Hide resolved
@Skn0tt Skn0tt mentioned this pull request Jul 14, 2023
Copy link
Member

@Skn0tt Skn0tt left a comment

Choose a reason for hiding this comment

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

This looks really good! My half-baked attempt at solving the test is here: #246 But I wholly prefer your approach.

Comment on lines +168 to +171
if (seen) {
// short-circuit result if we've seen this object before
return seen;
}
Copy link
Member

Choose a reason for hiding this comment

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

I like that idea conceptually - less duplicated data is always better - but I agree it's both a breaking change (the output JSON wouldn't have the same structure anymore), and it makes SuperJSON output harder to understand.

I'm assuming you'd like to reduce the output size to save bandwidth, right? Maybe we could perform some kind of benchmark on the difference this would make in practice - I could imagine that with Gzip / Brotli, the difference isn't that big. If we find that the difference is significant even with compression, then I agree we should add a flag for this behaviour! (not in this PR though)

@Skn0tt Skn0tt merged commit 601fc26 into blitz-js:main Jul 14, 2023
3 checks passed
@KATT KATT deleted the regression branch July 14, 2023 14:42
@Skn0tt
Copy link
Member

Skn0tt commented Jul 17, 2023

Chia1104 added a commit to Chia1104/chia1104.dev that referenced this pull request Jul 21, 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 |
|---|---|---|---|---|---|
| [superjson](https://togithub.com/blitz-js/superjson) | [`1.12.4` ->
`1.13.1`](https://renovatebot.com/diffs/npm/superjson/1.12.4/1.13.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/superjson/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/superjson/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/superjson/1.12.4/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/superjson/1.12.4/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>blitz-js/superjson (superjson)</summary>

###
[`v1.13.1`](https://togithub.com/blitz-js/superjson/releases/tag/v1.13.1)

[Compare
Source](https://togithub.com/blitz-js/superjson/compare/v1.13.0...v1.13.1)

#### What's Changed

- Bump json5 from 1.0.1 to 1.0.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#218
- Bump minimatch from 3.0.4 to 3.1.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#213
- Bump decode-uri-component from 0.2.0 to 0.2.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#212
- Bump tough-cookie from 4.1.2 to 4.1.3 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#248
- fix: TypeError: SuperJSON is not a constructor by
[@&#8203;juliusmarminge](https://togithub.com/juliusmarminge) in
[blitz-js/superjson#250

#### New Contributors

- [@&#8203;juliusmarminge](https://togithub.com/juliusmarminge) made
their first contribution in
[blitz-js/superjson#250

**Full Changelog**:
blitz-js/superjson@v1.13.0...v1.13.1

###
[`v1.13.0`](https://togithub.com/blitz-js/superjson/releases/tag/v1.13.0)

[Compare
Source](https://togithub.com/blitz-js/superjson/compare/v1.12.4...v1.13.0)

#### What's Changed

- fix: referential equalities should ignore child nodes by
[@&#8203;KATT](https://togithub.com/KATT) in
[blitz-js/superjson#244
- feat: add `dedupe` flag by [@&#8203;KATT](https://togithub.com/KATT)
in
[blitz-js/superjson#247

**Full Changelog**:
blitz-js/superjson@v1.12.4...v1.13.0

</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/Chia1104/chia1104.dev).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi44LjExIiwidXBkYXRlZEluVmVyIjoiMzYuOC4xMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->
Chia1104 added a commit to Chia1104/chia-stack that referenced this pull request Jul 25, 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 |
|---|---|---|---|---|---|
| [superjson](https://togithub.com/blitz-js/superjson) | [`1.12.4` ->
`1.13.1`](https://renovatebot.com/diffs/npm/superjson/1.12.4/1.13.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/superjson/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/superjson/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/superjson/1.12.4/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/superjson/1.12.4/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>blitz-js/superjson (superjson)</summary>

###
[`v1.13.1`](https://togithub.com/blitz-js/superjson/releases/tag/v1.13.1)

[Compare
Source](https://togithub.com/blitz-js/superjson/compare/v1.13.0...v1.13.1)

#### What's Changed

- Bump json5 from 1.0.1 to 1.0.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#218
- Bump minimatch from 3.0.4 to 3.1.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#213
- Bump decode-uri-component from 0.2.0 to 0.2.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#212
- Bump tough-cookie from 4.1.2 to 4.1.3 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[blitz-js/superjson#248
- fix: TypeError: SuperJSON is not a constructor by
[@&#8203;juliusmarminge](https://togithub.com/juliusmarminge) in
[blitz-js/superjson#250

#### New Contributors

- [@&#8203;juliusmarminge](https://togithub.com/juliusmarminge) made
their first contribution in
[blitz-js/superjson#250

**Full Changelog**:
blitz-js/superjson@v1.13.0...v1.13.1

###
[`v1.13.0`](https://togithub.com/blitz-js/superjson/releases/tag/v1.13.0)

[Compare
Source](https://togithub.com/blitz-js/superjson/compare/v1.12.4...v1.13.0)

#### What's Changed

- fix: referential equalities should ignore child nodes by
[@&#8203;KATT](https://togithub.com/KATT) in
[blitz-js/superjson#244
- feat: add `dedupe` flag by [@&#8203;KATT](https://togithub.com/KATT)
in
[blitz-js/superjson#247

**Full Changelog**:
blitz-js/superjson@v1.12.4...v1.13.0

</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/Chia1104/chia-stack).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMS4wIiwidXBkYXRlZEluVmVyIjoiMzYuMTEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->
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.

referential equalities are unnecessarily noisy
2 participants