briebug / ngrx-auto-entity

NgRx Auto-Entity: Simplifying Reactive State
https://briebug.gitbook.io/ngrx-auto-entity/
Other
66 stars 12 forks source link

Update for using angular v13 and NGRX v13 #204

Closed alejandroaap closed 1 year ago

alejandroaap commented 2 years ago

Hi,

Given that version 13 of angular has already been released and that NGRX has released version 13.0.0-rc.0, when will a new version of this library be available?

Thanks

jrista commented 2 years ago

Hi @alejandroaap. Excellent question! We are currently testing auto-entity with 13. We have been trying to maintain backwards compatibility with older versions of Angular, as many companies/organizations aren't able to stay abreast of the curve. Currently we support Angular 9-12. With the latest versions, we dropped support for Angular 8, to prepare the way for using the Partial IVY builds.

Technically, Partial IVY is supposed to be "forward" compatible with future Ivy instruction sets, so I am hoping that supporting NG13...well, really hoping its already supported. But if not, I am hoping that supporting it will not be a challenge with partial ivy builds.

I am a bit more concerned about the NgRx 13 changes. NgRx already has very strict types, and 13 seems to make them even more strict. This may be a breaking point for backwards compatibility in NgRx Auto-Entity, as now Variadic Tuple Types are used in NgRx for createAction & createSelector, and there have been some other changes that might impact us. NgRx isn't exactly the most friendly framework for extensions such as ours. ;) We'll keep you posted though and let you know what we experience with our testing here.

Inexad commented 2 years ago

Compability for ng13 would be awesome! Currently we are waiting with updating to ng13 for this package to be updated before.

alejandroaap commented 2 years ago

@jrista Thank you very much for the information. When will a beta version be available to test?

jrista commented 2 years ago

Quick update. Preliminary investigation is indicating that supporting both ng12 and ng13 will not be possible with a single version of ngrx-auto-entity.

Angular 13 has moved to RxJs 7, which is not backwards compatible with prior versions of RxJs. Further, there is no compatibility library (which in fact was something we at BrieBug looked into making ourselves at one point, and realized with the extent of the breaking changes in RxJs 7, it would simply not be possible...too many foundational changes in core facilities to make a compat lib viable.) So to support ng13, we will likely need to make a hard break from rxjs 6.

I am willing to do that, and I have been working on ngrx-auro-entity again lately to try and wrap up some key core features we wanted to get in for a v1.0 release. What I think I'll be doing is this. Get auto-entity released as a "final" version (not sure what versions I'll use yet...either just 1.0, or maybe try to align with ngrx or angular versions...)

Once I have a final feature-complete release, I'll work in creating a version that supports newer dependency versions for rxjs, and get another version released for angular 13. I suspect we may have to do a release per version of angular from now on, as sadly...most of the javascript community doesn't seem too concerned about backwards compatibility.

alejandroaap commented 2 years ago

Hi @jrista, do you have an estimated date for a beta version?

jrista commented 2 years ago

Nothing concrete. Because of the changes in Angular and NgRx in the latest versions, we are going to have to split out development. I'm working on getting a final version that is as stable as possible for the current functionality. Once we have that, then I'll work on refactoring the internal functionality to support Angular 13 and NgRx 13 to account for their breaking changes. Now that the end of year rush for client projects is over, I'll have more time to focus on this, so hopefully we will have that final release (which we will probably call NgRx Auto-Entity v12 to align with Angular 12 and NgRx 12) within a couple weeks tops. After that, I am hoping it won't be too challenging to refactor for NgRx 13. The big difference is the jump to RxJs 7, so I am not completely sure just how extensive changes for that will be.

alejandroaap commented 2 years ago

@jrista Great, thanks for the information. Eager to try those new features.

Inexad commented 2 years ago

@jrista Thanks for this info! I'm also eager to try those new features.

jrista commented 2 years ago

@Inexad @alejandroaap Quick question. Are you guys on Angular 13, or are you planning on moving to NG 13 or 14 soon?

alejandroaap commented 2 years ago

Hi @jrista,

We are currently on angular 13 and the only library left to update is ngrx and this one. As soon as it is available, we will proceed to migrate to ngrx 13.

Greetings ;)

Inexad commented 2 years ago

Hi @jrista,

Same for us. But some projects we wait on updating to 13 because we want these packages to update to.

jrista commented 2 years ago

@Inexad Thanks for the feedback. I'm working on getting this library squared away for v12 and v13 releases. I have a few features to implement, a few tweaks to make, and then I should be able to five into dealing with all the breaking changes in rxjs 7, ng 13 and ngrx 13 to get this working for the latest Angular.

jrista commented 2 years ago

@Inexad @alejandroaap Been cleaning up my branches today, pulled in all the dependabot alert branches into my main work branch, and have consolidated my fixes from various branches. I have one more major thing to do for 0.8.0-beta.1, and I'll get it released. This will be a beta release, but fundamentally the external API is not actually changing, and should be entirely backwards compatible with 0.7.x. This still supports up through, but not beyond, Angular 12, but it will pave the way for the final feature implementation (a new set of operators to support auto-correlated auto-entity behavior.) After that, I should be able to release v12, to align with Angular 12.

Once v12 is out, I'll begin the work of upgrading angular and ngrx and rxjs to v13s and v7. Hopefully that won't be too challenging, although I am curious to see how RxJs 7 and Angular 13 affect some of our internal functionality (notably the integration we have with Angular's injector, which was required for some of the magic of Auto-Entity.) Anyway, new beta release, 0.8.0-beta.1, coming within the next few days hopefully.

Inexad commented 2 years ago

@jrista This is great! Looking forward to use the new version. Keep up the great work !

jrista commented 2 years ago

@Inexad @alejandroaap Ok. Last major refactoring effort is done. The internal state structure has been changed, and all the selectors optimized as a result, which should lead to more efficient selectors that only recompute their memo when related data actually changes.

I need to finish unit testing this, then I'll get 0.8.0 beta out for testing. Note that this release has some potentially breaking changes due to internal changes...and if you were relying on internal aspects of our state you might be affected, but for the most part should be compatible with 0.7.x.

alejandroaap commented 2 years ago

Hi @jrista, thank you very much for the information. When the beta version is available I will proceed to try it. Greetings.

Inexad commented 2 years ago

Hi @jrista thanks !! I will update and start using the new version. ASAP. I hope you don't have to struggle to much for a ng13 version. Regards

jrista commented 2 years ago

@Inexad @alejandroaap Hi guys. Just wanted to provide you with an update, since its been longer than I expected. I have run into a couple of delays and snags with the latest update. The first is testing the recent changes has been more time consuming than expected, as it is a rather foundational change. I decided to clean up the repo and try to lean it up a bit along the way (removed the now defunct root angular app.)

The biggest hurdle has been my recent upgrade to a Mac M1. This has been a challenging upgrade, as the M1 is not, IMO, really ready for prime time as a developer platform. Too many things have changed, notably with node.js and other dev related tools. I've been running into a number of challenges getting the project to build.

I wanted to reassure you I AM working on the problem, and as soon as I have this next build to a releasable state, I'll be releasing it immediately, albeit with a -beta.1 version suffix. ;) Apologies for the delays. I hope to have things resolved as soon as I can.

jrista commented 2 years ago

@Inexad @alejandroaap Alright guys. So sorry for the delays. I think I've finally sorted out all the various dev issues with this new mac. I also sorted out unit testing issues I was having due to changes in node.js and npm versions, updates to various packages, etc. I will be getting a preliminary beta build out tonight or tomorrow with the latest changes. I'll begin working on ng13 support as soon as I can here.

gabwest commented 2 years ago

@jrista Yay! I can finally start working on updating to ng13. Awesome job! 🥳

jrista commented 2 years ago

@gabwest Soon! Not quite there yet, but I did some extra work with the latest PR to remove code that was hampering progress, lighten up the repo, upgrade Jest, and do a few other things to pave the way for NG13 support.

For those interested, you can view the PR #216. There are some significant internal changes, but they should be transparent to the public API. I'd welcome any feedback on this PR here as well, if anyone is interested @Inexad @alejandroaap.

jrista commented 2 years ago

Ok, v0.8.0-beta.1 has been published. I don't recommend this for code to be released immediately. I have done pretty extensive testing, and I think its working well, so it should be fine for dev environments. I'll be keeping an eye out for bug reports though and will get them tackled as quickly as possible when they are reported. I'll be pivoting to working on NG/NGRX 13+ support now.

gabwest commented 2 years ago

Ok, v0.8.0-beta.1 has been published. I don't recommend this for code to be released immediately. I have done pretty extensive testing, and I think its working well, so it should be fine for dev environments. I'll be keeping an eye out for bug reports though and will get them tackled as quickly as possible when they are reported. I'll be pivoting to working on NG/NGRX 13+ support now.

Thank you for the awesome job you've been doing with this. :)

jrista commented 2 years ago

Working on releasing v12.0.0 official release, with support for Angular 9-12. We were trying to add some richer functionality around how keys are identified, however that will have to be a breaking change, which we are not ready to do at the moment. With that issue shelved, once v12 is released we will be updating angular and ngrx to 13 and rxjs to 7. Hopefully any breaking changes there won't take much time, and we'll have v13.0.0 released soon as well.

Inexad commented 2 years ago

@jrista I'm very happy to hear this! How's the progress with v12 ? Anything we can do to help ?

jrista commented 2 years ago

@jrista I'm very happy to hear this! How's the progress with v12 ? Anything we can do to help ?

The v12 release is coming. The only real task for it is unit testing, to make sure I have enough coverage on the critical aspects of the library before I try to upgrade angular, ngrx and rxjs for v13. I had an extremely high torque client come up with a very, very tight deadline this week, which has forced me to put auto-entity on hold for the moment. I am hoping once the next couple of key releases for this client are out, I'll be able to get back into auto-entity. The unit testing is my net, and will help me understand what's broken where, once I make the rxjs upgrade to v7 and ngrx upgrades in particular. I'm most concerned about those, as from my research so far, there have been some breaking changes that may affect the lib.

jrista commented 2 years ago

@Inexad Regarding how you could help... I am really trying to get unit testing coverage up as much as possible. That is very easily something anyone from the community can help with, and I would GREATLY welcome any such help! Getting unit testing coverage as high as we can should help ease the transition into Angular 13 and Angular 14, once I release auto-entity v12. If you would be willing to help with that, it would certainly expedite getting this final release out the door. Basically, anything that does not already have any unit testing is the low hanging fruit, and that should only require test implementation, and no feature code. If you want to help, just dive in, and submit PRs when you are ready, and I'll check them out. Thank you!

jrista commented 1 year ago

@gabwest @alejandroaap FYI, version 13.x of Auto-Entity should support Angular versions 13, 14 and 15. Current testing shows it does, however we are not really using Angular 15 in-house yet, so we cannot guarantee 100% stability or compatibility yet.