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(store): do not use refCount() since it makes the stream cold #1883

Merged
merged 1 commit into from
Jul 29, 2022

Conversation

arturovt
Copy link
Member

@arturovt arturovt commented Jul 24, 2022

Issue: #1880

I don't know if there're other ways to fix that issue since using refCount() just makes the stream cold when there're no observers, but publishReplay buffers the last received value. See the issue and unit test.

The shareReplay increases the number of ticks by 1, but fixes the issue.

@codeclimate
Copy link

codeclimate bot commented Jul 24, 2022

Code Climate has analyzed commit 9b476ff and detected 0 issues on this pull request.

The test coverage on the diff in this pull request is 100.0% (50% is the threshold).

This pull request will bring the total coverage in the repository to 96.3% (0.0% change).

View more on Code Climate.

@bundlemon
Copy link

bundlemon bot commented Jul 24, 2022

BundleMon

Unchanged files (6)
Status Path Size Limits
fesm5/ngxs-store.js
134.05KB 145KB / +0.5%
fesm2015/ngxs-store.js
115.08KB 125KB / +0.5%
fesm5/ngxs-store-operators.js
10.07KB 15KB / +0.5%
fesm2015/ngxs-store-operators.js
9.94KB 15KB / +0.5%
fesm5/ngxs-store-internals.js
6.58KB 20KB / +0.5%
fesm2015/ngxs-store-internals.js
5.65KB 20KB / +0.5%

Total files change -14B 0%

Groups updated (2)
Status Path Size Limits
@ngxs/store(esm5)[gzip]
./esm5/**/*.js
175.34KB (-52B -0.03%) +1%
@ngxs/store(esm2015)[gzip]
./esm2015/**/*.js
168.78KB (-66B -0.04%) +1%
Unchanged groups (4)
Status Path Size Limits
@ngxs/store(umd)[gzip]
./bundles/*.umd.js
39.74KB +1%
@ngxs/store(fesm5)[gzip]
./fesm5/*.js
29.08KB +1%
@ngxs/store(fesm2015)[gzip]
./fesm2015/*.js
26.69KB +1%
@ngxs/store(umd.min)[gzip]
./bundles/*.umd.min.js
13.64KB +1%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@bundlemon
Copy link

bundlemon bot commented Jul 24, 2022

BundleMon (NGXS Plugins)

Unchanged files (28)
Status Path Size Limits
Plugins(umd)[gzip]
router-plugin/bundles/ngxs-router-plugin.umd.
js
7.71KB +1%
Plugins(umd)[gzip]
hmr-plugin/bundles/ngxs-hmr-plugin.umd.js
6.96KB +1%
Plugins(umd)[gzip]
websocket-plugin/bundles/ngxs-websocket-plugi
n.umd.js
6.87KB +1%
Plugins(umd)[gzip]
storage-plugin/bundles/ngxs-storage-plugin.um
d.js
6.6KB +1%
Plugins(umd)[gzip]
form-plugin/bundles/ngxs-form-plugin.umd.js
6.4KB +1%
Plugins(umd)[gzip]
devtools-plugin/bundles/ngxs-devtools-plugin.
umd.js
6.16KB +1%
Plugins(umd)[gzip]
logger-plugin/bundles/ngxs-logger-plugin.umd.
js
5.77KB +1%
Plugins(fesm5)[gzip]
router-plugin/fesm5/ngxs-router-plugin.js
4.31KB +1%
Plugins(fesm2015)[gzip]
router-plugin/fesm2015/ngxs-router-plugin.js
4.02KB +1%
Plugins(fesm5)[gzip]
hmr-plugin/fesm5/ngxs-hmr-plugin.js
3.62KB +1%
Plugins(fesm5)[gzip]
websocket-plugin/fesm5/ngxs-websocket-plugin.
js
3.53KB +1%
Plugins(fesm5)[gzip]
storage-plugin/fesm5/ngxs-storage-plugin.js
3.31KB +1%
Plugins(fesm2015)[gzip]
hmr-plugin/fesm2015/ngxs-hmr-plugin.js
3.25KB +1%
Plugins(fesm2015)[gzip]
websocket-plugin/fesm2015/ngxs-websocket-plug
in.js
3.15KB +1%
Plugins(umd.min)[gzip]
hmr-plugin/bundles/ngxs-hmr-plugin.umd.min.js
3.1KB +1%
Plugins(fesm5)[gzip]
form-plugin/fesm5/ngxs-form-plugin.js
3.04KB +1%
Plugins(fesm2015)[gzip]
storage-plugin/fesm2015/ngxs-storage-plugin.j
s
2.98KB +1%
Plugins(fesm5)[gzip]
devtools-plugin/fesm5/ngxs-devtools-plugin.js
2.83KB +1%
Plugins(umd.min)[gzip]
router-plugin/bundles/ngxs-router-plugin.umd.
min.js
2.72KB +1%
Plugins(fesm2015)[gzip]
form-plugin/fesm2015/ngxs-form-plugin.js
2.71KB +1%
Plugins(fesm2015)[gzip]
devtools-plugin/fesm2015/ngxs-devtools-plugin
.js
2.65KB +1%
Plugins(fesm5)[gzip]
logger-plugin/fesm5/ngxs-logger-plugin.js
2.48KB +1%
Plugins(umd.min)[gzip]
form-plugin/bundles/ngxs-form-plugin.umd.min.
js
2.41KB +1%
Plugins(fesm2015)[gzip]
logger-plugin/fesm2015/ngxs-logger-plugin.js
2.37KB +1%
Plugins(umd.min)[gzip]
storage-plugin/bundles/ngxs-storage-plugin.um
d.min.js
2.23KB +1%
Plugins(umd.min)[gzip]
websocket-plugin/bundles/ngxs-websocket-plugi
n.umd.min.js
2.18KB +1%
Plugins(umd.min)[gzip]
logger-plugin/bundles/ngxs-logger-plugin.umd.
min.js
1.95KB +1%
Plugins(umd.min)[gzip]
devtools-plugin/bundles/ngxs-devtools-plugin.
umd.min.js
1.86KB +1%

No change in files bundle size

Unchanged groups (6)
Status Path Size Limits
All Plugins(esm5)[gzip]
./-plugin/esm5/**/.js
119.1KB +1%
All Plugins(esm2015)[gzip]
./-plugin/esm2015/**/.js
113.79KB +1%
All Plugins(umd)[gzip]
./-plugin/bundles/.umd.js
46.47KB +1%
All Plugins(fesm5)[gzip]
./-plugin/fesm5/.js
23.12KB +1%
All Plugins(fesm2015)[gzip]
./-plugin/fesm2015/.js
21.13KB +1%
All Plugins(umd.min)[gzip]
./-plugin/bundles/.umd.min.js
16.44KB +1%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@bundlemon
Copy link

bundlemon bot commented Jul 24, 2022

BundleMon (Integration Projects)

Files updated (4)
Status Path Size Limits
Main bundles(Gzip)
hello-world-ng12-ivy/dist-integration/main.(h
ash).js
67.67KB (-59B -0.09%) +1%
Main bundles(Gzip)
hello-world-ng11-ivy/dist-integration/main.(h
ash).js
70.96KB (-74B -0.1%) +1%
Main bundles(Gzip)
hello-world-ng13-ivy/dist-integration/main.(h
ash).js
69.57KB (-88B -0.12%) +1%
Main bundles(Gzip)
hello-world-ng14-ivy/dist-integration/main.(h
ash).js
65.27KB (-118B -0.18%) +1%

Total files change -339B -0.12%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

Copy link
Member

@markwhitfeld markwhitfeld left a comment

Choose a reason for hiding this comment

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

I'm happy with this solution! Nicely done.
Just a question, does the extra tick happen once for the app, or once for every new subscription, or an extra time for every emitted change?

@arturovt
Copy link
Member Author

arturovt commented Jul 28, 2022

Just a question, does the extra tick happen once for the app, or once for every new subscription, or an extra time for every emitted change?

I'm not really sure how this works in unit tests since ticks seem to be called illegibly there. I've just tested it in real app with patching tick through:

const tick = ApplicationRef.prototype.tick;
let ticksCalled = 0;
ApplicationRef.prototype.tick = function () {
  console.log(`Ticks: ${ticksCalled++}`);
  return tick.call(this);
};

Ticks are called in a normal way per each event (like clicks, timers, etc), but I don't see any difference in the amount of ticks for this change in the real app (like if I change shareReplay to refCount and back).

@markwhitfeld
Copy link
Member

I'm happy with that. Thank you!

@markwhitfeld markwhitfeld merged commit a6cc926 into master Jul 29, 2022
@markwhitfeld markwhitfeld deleted the fix/1880 branch July 29, 2022 12:35
@arturovt arturovt added this to the v3.7.5 milestone Aug 8, 2022
crapStone pushed a commit to Calciumdibromid/CaBr2 that referenced this pull request Aug 12, 2022
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@ngxs/form-plugin](https://github.com/ngxs/store) | dependencies | patch | [`3.7.4` -> `3.7.5`](https://renovatebot.com/diffs/npm/@ngxs%2fform-plugin/3.7.4/3.7.5) |
| [@ngxs/storage-plugin](https://github.com/ngxs/store) | dependencies | patch | [`3.7.4` -> `3.7.5`](https://renovatebot.com/diffs/npm/@ngxs%2fstorage-plugin/3.7.4/3.7.5) |
| [@ngxs/store](https://github.com/ngxs/store) | dependencies | patch | [`3.7.4` -> `3.7.5`](https://renovatebot.com/diffs/npm/@ngxs%2fstore/3.7.4/3.7.5) |

---

### Release Notes

<details>
<summary>ngxs/store</summary>

### [`v3.7.5`](https://github.com/ngxs/store/blob/HEAD/CHANGELOG.md#&#8203;375-2022-08-08)

[Compare Source](ngxs/store@v3.7.4...v3.7.5)

-   Performance: Tree-shake no type on the action error [#&#8203;1858](ngxs/store#1858)
-   Fix: Give back control to `developmentMode` config property [#&#8203;1878](ngxs/store#1878)
-   Fix: Do not use `refCount()` since it makes selectable stream cold [#&#8203;1883](ngxs/store#1883)
-   Fix: Remove `?` from `ctx` parameter of lifecycle hooks since they are never undefined [#&#8203;1889](ngxs/store#1889)
-   Fix: Avoid incorrectly ordered state observable events [#&#8203;1908](ngxs/store#1908)
-   Fix: Router Plugin - Prevent router overriding valid navigation [#&#8203;1907](ngxs/store#1907)
-   Fix: Storage Plugin - Provide more meaningful error message when the storage quota exceeds [#&#8203;1863](ngxs/store#1863)
-   Fix: Storage Plugin - Ensure the deserialization is not skipped for master key [#&#8203;1887](ngxs/store#1887)
-   Fix: Storage Plugin - Do not re-hydrate the whole state when the feature state is added [#&#8203;1887](ngxs/store#1887)
-   Fix: Devtools Plugin - Enable time-traveling for navigation actions [#&#8203;1868](ngxs/store#1868)
-   Fix: Form Plugin - Prevent actions infinite loop with multiple `ngxsForm` directives [#&#8203;1890](ngxs/store#1890)
-   Fix: Do not check if the state class is injectable within the decorator since the `ɵprov` will not exist in JIT mode [#&#8203;1867](ngxs/store#1867)
-   Revert: revert select decorator changes and add deprecation note [#&#8203;1871](ngxs/store#1871)

</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 these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xNTEuMiIsInVwZGF0ZWRJblZlciI6IjMyLjE1Mi4wIn0=-->

Co-authored-by: cabr2-bot <[email protected]>
Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1497
Reviewed-by: Epsilon_02 <[email protected]>
Co-authored-by: Calciumdibromid Bot <[email protected]>
Co-committed-by: Calciumdibromid Bot <[email protected]>
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.

2 participants