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: Remove circular dependencies #2125

Merged
merged 3 commits into from
May 15, 2024
Merged

Conversation

dplewis
Copy link
Member

@dplewis dplewis commented May 15, 2024

Pull Request

Issue

The SDK has circular dependencies, require cycles are allowed, but can result in uninitialized values. This prevents the SDK from moving to ES6 for tree-shaking and full Typescript support.

1) ParseACL.js > ParseRole.js
2) ParseObject.js > ParseACL.js > ParseRole.js
3) ParseUser.js > ParseObject.js > ParseACL.js
4) ParseObject.js > ParseOp.js
5) ParseObject.js > ParseOp.js > ParseRelation.js
6) ParseOp.js > ParseRelation.js
7) ParseObject.js > ParseOp.js > ParseRelation.js > ParseQuery.js > OfflineQuery.js > decode.js
8) ParseOp.js > ParseRelation.js > ParseQuery.js > OfflineQuery.js > decode.js
9) ParseRelation.js > ParseQuery.js > OfflineQuery.js > decode.js
10) ParseObject.js > ParseOp.js > ParseRelation.js > ParseQuery.js > OfflineQuery.js > equals.js
11) ParseObject.js > ParseOp.js > ParseRelation.js > ParseQuery.js
12) ParseOp.js > ParseRelation.js > ParseQuery.js > encode.js
13) ParseRelation.js > ParseQuery.js > encode.js
14) ParseObject.js > ParseOp.js > arrayContainsObject.js
15) ParseObject.js > SingleInstanceStateController.js
16) uuid.js

Closes: #1448

Approach

  • Using CoreManager to centralize modules for refactoring
  • Add Op, User, Query, Object and Role to CoreManager
  • Convert uuid.js to typescript
  • Remove localStorage mock as jest automatically mocks it
  • Add new circular dependency check to CI

Shoutout to @swittk for coming up with the idea and testing it out.

Tasks

  • Add tests
  • Add changes to documentation (guides, repository pages, code comments)

Copy link

Thanks for opening this pull request!

Copy link

codecov bot commented May 15, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (72bc9ac) to head (523bb8b).
Report is 24 commits behind head on alpha.

Additional details and impacted files
@@             Coverage Diff             @@
##            alpha     #2125      +/-   ##
===========================================
+ Coverage   99.98%   100.00%   +0.01%     
===========================================
  Files          61        64       +3     
  Lines        6185      6327     +142     
  Branches     1499      1506       +7     
===========================================
+ Hits         6184      6327     +143     
+ Misses          1         0       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@dplewis dplewis requested a review from a team May 15, 2024 03:36
@dplewis
Copy link
Member Author

dplewis commented May 15, 2024

There is a check circular job on Parse Server but not in the SDK.

.madgerc Outdated Show resolved Hide resolved
Signed-off-by: Manuel <5673677+mtrezza@users.noreply.github.com>
@mtrezza mtrezza changed the title fix: Circular Dependencies fix: Remove circular dependencies May 15, 2024
@mtrezza mtrezza merged commit b415165 into parse-community:alpha May 15, 2024
10 of 11 checks passed
parseplatformorg pushed a commit that referenced this pull request May 15, 2024
# [5.1.0-alpha.10](5.1.0-alpha.9...5.1.0-alpha.10) (2024-05-15)

### Bug Fixes

* Remove circular dependencies ([#2125](#2125)) ([b415165](b415165))
@parseplatformorg
Copy link
Contributor

🎉 This change has been released in version 5.1.0-alpha.10

@parseplatformorg parseplatformorg added the state:released-alpha Released as alpha version label May 15, 2024
@dplewis dplewis deleted the circular-deps branch May 15, 2024 19:59
parseplatformorg pushed a commit that referenced this pull request May 16, 2024
# [5.1.0-beta.1](5.0.0...5.1.0-beta.1) (2024-05-16)

### Bug Fixes

* `Parse.GeoPoint.current` returns `undefined` ([#2127](#2127)) ([3860535](3860535))
* Chrome browser console warning about unsafe header `access-control-expose-headers` when calling Cloud Function ([#2095](#2095)) ([7b73c03](7b73c03))
* Live Query not working on Expo React Native ([#2109](#2109)) ([7a89665](7a89665))
* Local datastore throws error when `Parse.Query.notEqualTo` is set to `null` ([#2102](#2102)) ([6afd32a](6afd32a))
* Multiple object updates of nested keys overwrite each other ([#1451](#1451)) ([fa4341a](fa4341a))
* Pending updates to nested field causes `ParseObject.toJSON()` to return incorrect object ([#1453](#1453)) ([23cc573](23cc573))
* Remove circular dependencies ([#2125](#2125)) ([b415165](b415165))

### Features

* Add password validation for user with unverified email via `Parse.User.verifyPassword` using master key and option `ignoreEmailVerification: true` ([#2076](#2076)) ([b0adf7e](b0adf7e))
* Add support for setting `Parse.ACL` from json ([#2097](#2097)) ([72bc9ac](72bc9ac))
* Allow setting custom queue for handling offline operations via `Parse.EventuallyQueue` ([#2106](#2106)) ([f92e4d4](f92e4d4))
* Improve installation object `Parse.Installation.currentInstallation` to support web push notifications ([#2119](#2119)) ([4fc62ce](4fc62ce))
* Lazy load `Parse.CoreManager` controllers to add support for swappable `CryptoController`, `LocalDatastoreController`, `StorageController`, `WebSocketController`, `ParseLiveQuery` ([#2100](#2100)) ([fbd0ab1](fbd0ab1))
@parseplatformorg
Copy link
Contributor

🎉 This change has been released in version 5.1.0-beta.1

@parseplatformorg parseplatformorg added the state:released-beta Released as beta version label May 16, 2024
parseplatformorg pushed a commit that referenced this pull request May 16, 2024
# [5.1.0](5.0.0...5.1.0) (2024-05-16)

### Bug Fixes

* `Parse.GeoPoint.current` returns `undefined` ([#2127](#2127)) ([3860535](3860535))
* Chrome browser console warning about unsafe header `access-control-expose-headers` when calling Cloud Function ([#2095](#2095)) ([7b73c03](7b73c03))
* Live Query not working on Expo React Native ([#2109](#2109)) ([7a89665](7a89665))
* Local datastore throws error when `Parse.Query.notEqualTo` is set to `null` ([#2102](#2102)) ([6afd32a](6afd32a))
* Multiple object updates of nested keys overwrite each other ([#1451](#1451)) ([fa4341a](fa4341a))
* Pending updates to nested field causes `ParseObject.toJSON()` to return incorrect object ([#1453](#1453)) ([23cc573](23cc573))
* Remove circular dependencies ([#2125](#2125)) ([b415165](b415165))

### Features

* Add password validation for user with unverified email via `Parse.User.verifyPassword` using master key and option `ignoreEmailVerification: true` ([#2076](#2076)) ([b0adf7e](b0adf7e))
* Add support for setting `Parse.ACL` from json ([#2097](#2097)) ([72bc9ac](72bc9ac))
* Allow setting custom queue for handling offline operations via `Parse.EventuallyQueue` ([#2106](#2106)) ([f92e4d4](f92e4d4))
* Improve installation object `Parse.Installation.currentInstallation` to support web push notifications ([#2119](#2119)) ([4fc62ce](4fc62ce))
* Lazy load `Parse.CoreManager` controllers to add support for swappable `CryptoController`, `LocalDatastoreController`, `StorageController`, `WebSocketController`, `ParseLiveQuery` ([#2100](#2100)) ([fbd0ab1](fbd0ab1))
@parseplatformorg
Copy link
Contributor

🎉 This change has been released in version 5.1.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
state:released Released as stable version state:released-alpha Released as alpha version state:released-beta Released as beta version
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[React Native]: Require cycle warning
3 participants