Releases: zuriscript/signalstory
Release 19.0.0
We are excited to announce that signalstory officially supports Angular 19.0.0 going forward! 🚀
In the coming weeks, you can look forward to many new features as we integrate some of our custom extensions directly into the core.
Not ready to upgrade to Angular 19 yet?
No problem! If you'd like to benefit from the new features but are still using Angular 18, feel free to reach out. We may include some of these features in an 18.x branch to support your current setup.
What's Changed
- Chore/upgrade 19 by @zuriscript in #98
Full Changelog: 18.0.0...19.0.0
18.0.0
What's Changed
From now on signalstory officially supports [email protected] going forward. Of course, issues involving earlier versions of angular will still be fixed. Following Breaking changes have been previously announced and will take effect in this version:
- Removes History plugin (use history tracker API instead)
- Removes
isModified
(usemodified
instead) - Removes
marksAsUnmodified
(useresetStoreStatus
instead) - Removes
setUnmodifiedStatus
(usesetInitializedStatus
instead) - Removes
enableLogging
from store config (use Logger Plugin instead)
Relevant PRs
- docs: minor documentation updates and fixes by @kerren in #92
- docs: fix typos by @deegeemee in #94
New Contributors
- @kerren made their first contribution in #92
- @deegeemee made their first contribution in #94
Full Changelog: 17.4.0...18.0.0
17.4.0
What's Changed
Transactional and multi-store history tracking
: This PR is all about improving history tracking. The new API supports robust undo and redo functionalities that span an arbitrary number of stores. Furthermore, you can use transactions to group a series of related actions, ensuring they are treated as a single, atomic unit during undo and redo operations. It provides better control over the scope of tracking and is more space efficient and performant. UsecanUndo
andcanRedo
signals to stay actively informed on whether undo or redo actions are possible. Read more.
Deprecation Notice
StoreHistoryPlugin
created byuseStoreHistory()
is discontinued, since the new API offers advanced features and supersedes this functionality.
Relevant PRs
- feat(plugin-history): ✨ introduce cross-store history tracking in #87
- refactor(core): ♻️ extract static field from HistoryTrackerBase to global constants in #88
- docs(core): 📝 improve Readme and some docs sections in #89
Full Changelog: 17.3.0...17.4.0
17.3.0
What's Changed
- Introducing State Snapshot feature, providing users with the ability to capture and restore the state of multiple stores within an application. This is particularly useful for scenarios requiring transactional guarantees, enabling users to roll back across various stores. See the docs
- Introducing new Store status signals and some renaming. You can now check if an effect has initialized a store. More info in PR #78
- New
maxLength
option for the history plugin. Users can now set a maximum length for the history, providing better control over memory consumption. If left unspecified, the history will still grow without boundaries, maintaining backward compatibility with version17.*
. Starting from version18
, a defined default value for maxLength will be in place. See the updated docs - You can now directly configure projection functions using
configureIndexedDb
method - Docs have been improved and you can now search the docs using docsearch by algolia
Contributors Notice
For this release, I have taken the time to prepare a good environment for potential contributors and collaborators.
- We have a Code of Conduct
- We have specified Contributing conventions
- We use
Commitlint
+Husky
+Commitizen
to enable conventional commits - We have templates for PRs and Issues
- We use github actions to test and lint the code and to ensure that no PR breaks the tree-shakability of the library
Deprecation Notice
isModified()
is deprecated, usemodified()
instead.markAsUnmodified()
is deprecated, useresetStoreStatus()
instead.setUnmodifiedStatus
is deprecated, usesetInitializedStatus
instead.
Relevant PRs
- feat(core): ✨ Introduce State Snapshot feature in #68
- feat(plugin-status): ✨ enhance store status plugin and improve naming in #78
- feat(plugin-persistence): ✨ include projection in configureIndexedDb in #79
- feat(plugin-history): ✨ introduce pruning for limiting memory usage in #81
- feat(core): ✨ expose StorePlugin type in #82
- docs: 📝 add algolia docsearch support in #84
- docs: 📝 add howtos and improve multiple doc pages in #83
- docs: 📝 add github star button to landing page in #85
- docs(core): 📝 add snapshot doc page in #71
- ci: 🎡 add workflow for running tests and performing checks in #72
- ci: 🎡 specify project in build command in #73
- chore: 🔨 remove eslint-plugin-tree-shaking in #76
- chore: 🔨 add better issue templates in #77
- chore: 🔨 add ressources for contribution in #70
Full Changelog: 17.2.0...17.3.0
17.2.0
What's Changed
- Introducing PerformanceCounterPlugin for Real-time Performance Analysis in #59
Read more in the docs - Introducing native IndexedDb adapter in #63
You can now use IndexedDB as persistence storage for your stores, enjoying native support, pooling, and migration features. Read more - Introducing custom projection hooks for persistence plugin in #63
You can now declare functions applied before storing and after loading from storage. This can be useful for obfuscating sensitive data or for saving space. See for yourself - Introducing improved Feature Detection for SSR in #64
Signalstory is now SSR friendly, so you can leave Devtoosl Plugin and Storage Plugin in the list without risking an error on the server.
This feature has been discussed here: #53 - Support tuple types in Immutable type definition in #60
Now tuple types can also be wrapped in an Immutable. - Introducing invocationId to effect processors for distinguishing closely timed effect executions in #58
- Bugfix: Sideeffects in effect postprocessors should be consolidated in a single finalize block in #56
- Bugfix: Successive Processors are now fully wrapped, hence ordering is consistent with middleware encapsulation in #57
- Lots of work on docs, images and README in #51, #52, #61, #62, #65
Full Changelog: 17.1.0...17.2.0
17.1.0
What's Changed
- Allow StorePlugins to pre and post process effects in #40
Now you can pre and post process both Commands and Effect objects (Read more) - Introduce configuration object to effect creation in #41
createEffect
now takes a configuration object as parameter to allow more configuration parameters - Make pre and postprocessors nullable to reduce memory footprint in #42
- Introduce StoreStatus Plugin in #43
The newStoreStatus Plugin
makes it easy to keep track of the loading and modification statuses of your store. Get notified, as soon as your store is loading during an async effect or if it has been modified since initalization (Read more). - Remove explicit logger and use a dedicated plugin instead in #44
To improve and simplify the code, explicit logging activated with theenableLogging
configuration has been removed. Use the Logger plugin instead (Read more). - Various improvements concerning docs, README, images and the sample project in #38 #39 #45 #46 #48 #49 #50
Deprecation Notice
In this version, the following features have been deprecated. It's important to note that these functionalities will continue to work until the next major release, which is expected around the same time as Angular 18. So, you've got some time to make the necessary adjustments in your code:
- The
enableLogging
option inStoreConfig
is deprecated. Instead, use theLoggerPlugin
. At the moment,enableLogging
will automatically register the plugin for you. - The
withInjectionContext
parameter increateEffect
is now deprecated and will be removed. It has been integrated into theStoreEffectConfig
parameter.
Full Changelog: 17.0.1...17.1.0
17.0.1
We're thrilled to announce the official stable release of signalstory version 17.0.1 — a monumental leap forward in our journey! 🎉 This release, comes with long-term support, and promises a robust and dependable experience for our users. 🌟
What's Changed
- Introducing testing utilities in #32
- Improved Docs in #33
- Upgrade to angular 17 in #34
- Remove cloneAndMutateFunc due to deprecation in #35
Breaking changes
cloneAndMutateFunc
has been removed fromImmutableStoreConfig
. You have to usemutationProducerFn
as of now.
Migration
- Simply install [email protected]
- No breaking changes except for the removal of
cloneAndMutateFunc
which has been declared asdeprecated
in earlier versions - What about
mutate
?
Starting from Angular version 17, themutate
feature has been removed from the signal public API (read more). Additionally, the base equality function for signals has been changed, as now signal updates will trigger a notification only when the actual reference of the value object changes (applicable if the signal value is not primitive). While signalstory will continue to provide the mutate method, starting from version 17, mutate will implicitly create a shallow copy for the mutation, ensuring that consumers receive notifications.
Remark about [email protected]
Accidentally, the peer dependencies of signalstory for angular were not updated to angular 17 before publishing to npmjs. This has been fixed with [email protected]
Full Changelog: 0.1.3...17.0.1
0.1.3
What's Changed
- Make Persistence Plugin synchronous and therefore independent of signal effects in #30
- Some docs improvements
Full Changelog: 0.1.2...0.1.3
0.1.2
What's Changed
- Check browser support, Fix eslint issues in #16
- Feature/fix-built-in-plugins-precedence in #17
- Feature/es-lint-and-agadoo in #18
- Introducing stateEqaulityFn and stricEquality for immutable stores in #20
Deprecation Notice
- cloneAndMutateFunc is deprecated for mutationProducerFn (has same semantics)
Full Changelog: 0.1.1...0.1.2
0.1.1
What's Changed
- Improve mobile view, fix error in Readme in #8
- Improve docs and remove vscode folder in #10
- Introducing deep freeze plugin in #11
Full Changelog: 0.1.0...0.1.1