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

refactor: add multiple file exports for notifications controllers #4604

Merged
merged 16 commits into from
Sep 2, 2024

Conversation

Prithpal-Sooriya
Copy link
Contributor

@Prithpal-Sooriya Prithpal-Sooriya commented Aug 13, 2024

Explanation

This adds multiple exports to the @metamask/profile-sync-controller and @metamask/notification-services-controller.

This will allow classes, functions, variables to be imported more naturally compared to the named exports. This will potentially help with tree shaking.

List of all imports:

// Profile Sync Controller
import {} from '@metamask/profile-sync-controller'
import {} from '@metamask/profile-sync-controller/auth'
import {} from '@metamask/profile-sync-controller/auth/mocks'
import {} from '@metamask/profile-sync-controller/user-storage'
import {} from '@metamask/profile-sync-controller/user-storage/mocks'
import {} from '@metamask/profile-sync-controller/sdk'

// Notification Services
import {} from '@metamask/notification-services-controller'
import {} from '@metamask/notification-services-controller/notification-services'
import {} from '@metamask/notification-services-controller/notification-services/types'
import {} from '@metamask/notification-services-controller/notification-services/processors'
import {} from '@metamask/notification-services-controller/notification-services/constants'
import {} from '@metamask/notification-services-controller/notification-services/ui'
import {} from '@metamask/notification-services-controller/notification-services/mocks'

import {} from '@metamask/notification-services-controller/push-services'
import {} from '@metamask/notification-services-controller/push-services/types'
import {} from '@metamask/notification-services-controller/push-services/utils'
import {} from '@metamask/notification-services-controller/push-services/mocks'

NOTE - we will keep backwards compatibility with named exports. I think we'll also probably export all (e.g export * ...) to flatten the named exports structure.

References

N/A

Changelog

@metamask/profile-sync-controller

  • CHANGED: updated package.json to support multiple subpath exports.
  • ADDED: subpath folders and additional package.json files to make folders resolvable in JS projects.

@metamask/notification-services-controller

  • CHANGED: updated package.json to support multiple subpath exports.
  • ADDED: subpath folders and additional package.json files to make folders resolvable in JS projects.

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've highlighted breaking changes using the "BREAKING" category above as appropriate

@Prithpal-Sooriya
Copy link
Contributor Author

@metamaskbot publish-preview

@Prithpal-Sooriya
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "18.0.0-preview-12fc043b",
  "@metamask-previews/address-book-controller": "5.0.0-preview-12fc043b",
  "@metamask-previews/announcement-controller": "7.0.0-preview-12fc043b",
  "@metamask-previews/approval-controller": "7.0.2-preview-12fc043b",
  "@metamask-previews/assets-controllers": "37.0.0-preview-12fc043b",
  "@metamask-previews/base-controller": "6.0.2-preview-12fc043b",
  "@metamask-previews/build-utils": "3.0.0-preview-12fc043b",
  "@metamask-previews/chain-controller": "0.1.1-preview-12fc043b",
  "@metamask-previews/composable-controller": "7.0.0-preview-12fc043b",
  "@metamask-previews/controller-utils": "11.0.2-preview-12fc043b",
  "@metamask-previews/ens-controller": "13.0.1-preview-12fc043b",
  "@metamask-previews/eth-json-rpc-provider": "4.1.2-preview-12fc043b",
  "@metamask-previews/gas-fee-controller": "19.0.1-preview-12fc043b",
  "@metamask-previews/json-rpc-engine": "9.0.2-preview-12fc043b",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.2-preview-12fc043b",
  "@metamask-previews/keyring-controller": "17.1.2-preview-12fc043b",
  "@metamask-previews/logging-controller": "5.0.0-preview-12fc043b",
  "@metamask-previews/message-manager": "10.0.2-preview-12fc043b",
  "@metamask-previews/name-controller": "8.0.0-preview-12fc043b",
  "@metamask-previews/network-controller": "20.1.0-preview-12fc043b",
  "@metamask-previews/notification-controller": "6.0.0-preview-12fc043b",
  "@metamask-previews/notification-services-controller": "0.2.1-preview-12fc043b",
  "@metamask-previews/permission-controller": "11.0.0-preview-12fc043b",
  "@metamask-previews/permission-log-controller": "3.0.0-preview-12fc043b",
  "@metamask-previews/phishing-controller": "10.1.1-preview-12fc043b",
  "@metamask-previews/polling-controller": "9.0.1-preview-12fc043b",
  "@metamask-previews/preferences-controller": "13.0.1-preview-12fc043b",
  "@metamask-previews/profile-sync-controller": "0.2.1-preview-12fc043b",
  "@metamask-previews/queued-request-controller": "4.0.0-preview-12fc043b",
  "@metamask-previews/rate-limit-controller": "6.0.0-preview-12fc043b",
  "@metamask-previews/selected-network-controller": "17.0.0-preview-12fc043b",
  "@metamask-previews/signature-controller": "18.0.1-preview-12fc043b",
  "@metamask-previews/transaction-controller": "35.1.0-preview-12fc043b",
  "@metamask-previews/user-operation-controller": "14.0.1-preview-12fc043b"
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

These package.json files are to help ensure that the subfolders are resolvable in JS projects & linters.

This pattern was inspired by how it is resolved through redux-toolkit.
https://github.com/reduxjs/redux-toolkit/blob/master/packages/toolkit/query/react/package.json

Screenshot 2024-08-14 at 11 19 30

Copy link
Contributor Author

Choose a reason for hiding this comment

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

TS projects are able to resolve this, as the root package.json describes all the exports. However linters and JS projects may find it difficult, especially if the export name is an alias (e.g. does not map 1:1 with the output directory)

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'm open to change if there is another pattern we can utilise.

this ensures that JS projects are able to find and resolve the paths to the module sub-files.
E.g. "Unable to resolve path to module '@metamask-previews/profile-sync-controller/user-storage'. (eslintimport/no-unresolved)"
@Prithpal-Sooriya
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "18.0.0-preview-21d139ea",
  "@metamask-previews/address-book-controller": "5.0.0-preview-21d139ea",
  "@metamask-previews/announcement-controller": "7.0.0-preview-21d139ea",
  "@metamask-previews/approval-controller": "7.0.2-preview-21d139ea",
  "@metamask-previews/assets-controllers": "37.0.0-preview-21d139ea",
  "@metamask-previews/base-controller": "6.0.2-preview-21d139ea",
  "@metamask-previews/build-utils": "3.0.0-preview-21d139ea",
  "@metamask-previews/chain-controller": "0.1.1-preview-21d139ea",
  "@metamask-previews/composable-controller": "7.0.0-preview-21d139ea",
  "@metamask-previews/controller-utils": "11.0.2-preview-21d139ea",
  "@metamask-previews/ens-controller": "13.0.1-preview-21d139ea",
  "@metamask-previews/eth-json-rpc-provider": "4.1.3-preview-21d139ea",
  "@metamask-previews/gas-fee-controller": "19.0.1-preview-21d139ea",
  "@metamask-previews/json-rpc-engine": "9.0.2-preview-21d139ea",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.2-preview-21d139ea",
  "@metamask-previews/keyring-controller": "17.1.2-preview-21d139ea",
  "@metamask-previews/logging-controller": "5.0.0-preview-21d139ea",
  "@metamask-previews/message-manager": "10.0.2-preview-21d139ea",
  "@metamask-previews/name-controller": "8.0.0-preview-21d139ea",
  "@metamask-previews/network-controller": "20.1.0-preview-21d139ea",
  "@metamask-previews/notification-controller": "6.0.0-preview-21d139ea",
  "@metamask-previews/notification-services-controller": "0.2.1-preview-21d139ea",
  "@metamask-previews/permission-controller": "11.0.0-preview-21d139ea",
  "@metamask-previews/permission-log-controller": "3.0.0-preview-21d139ea",
  "@metamask-previews/phishing-controller": "10.1.1-preview-21d139ea",
  "@metamask-previews/polling-controller": "9.0.1-preview-21d139ea",
  "@metamask-previews/preferences-controller": "13.0.1-preview-21d139ea",
  "@metamask-previews/profile-sync-controller": "0.2.1-preview-21d139ea",
  "@metamask-previews/queued-request-controller": "4.0.0-preview-21d139ea",
  "@metamask-previews/rate-limit-controller": "6.0.0-preview-21d139ea",
  "@metamask-previews/selected-network-controller": "17.0.0-preview-21d139ea",
  "@metamask-previews/signature-controller": "18.0.1-preview-21d139ea",
  "@metamask-previews/transaction-controller": "35.1.1-preview-21d139ea",
  "@metamask-previews/user-operation-controller": "14.0.1-preview-21d139ea"
}

will need to discuss with the team how we can better handle workspace validation.
yarn.config.cjs Outdated Show resolved Hide resolved
@Prithpal-Sooriya
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "18.0.0-preview-5a93d655",
  "@metamask-previews/address-book-controller": "5.0.0-preview-5a93d655",
  "@metamask-previews/announcement-controller": "7.0.0-preview-5a93d655",
  "@metamask-previews/approval-controller": "7.0.2-preview-5a93d655",
  "@metamask-previews/assets-controllers": "37.0.0-preview-5a93d655",
  "@metamask-previews/base-controller": "6.0.2-preview-5a93d655",
  "@metamask-previews/build-utils": "3.0.0-preview-5a93d655",
  "@metamask-previews/chain-controller": "0.1.1-preview-5a93d655",
  "@metamask-previews/composable-controller": "7.0.0-preview-5a93d655",
  "@metamask-previews/controller-utils": "11.0.2-preview-5a93d655",
  "@metamask-previews/ens-controller": "13.0.1-preview-5a93d655",
  "@metamask-previews/eth-json-rpc-provider": "4.1.3-preview-5a93d655",
  "@metamask-previews/gas-fee-controller": "19.0.1-preview-5a93d655",
  "@metamask-previews/json-rpc-engine": "9.0.2-preview-5a93d655",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.2-preview-5a93d655",
  "@metamask-previews/keyring-controller": "17.1.2-preview-5a93d655",
  "@metamask-previews/logging-controller": "5.0.0-preview-5a93d655",
  "@metamask-previews/message-manager": "10.0.2-preview-5a93d655",
  "@metamask-previews/name-controller": "8.0.0-preview-5a93d655",
  "@metamask-previews/network-controller": "20.1.0-preview-5a93d655",
  "@metamask-previews/notification-controller": "6.0.0-preview-5a93d655",
  "@metamask-previews/notification-services-controller": "0.2.1-preview-5a93d655",
  "@metamask-previews/permission-controller": "11.0.0-preview-5a93d655",
  "@metamask-previews/permission-log-controller": "3.0.0-preview-5a93d655",
  "@metamask-previews/phishing-controller": "10.1.1-preview-5a93d655",
  "@metamask-previews/polling-controller": "9.0.1-preview-5a93d655",
  "@metamask-previews/preferences-controller": "13.0.1-preview-5a93d655",
  "@metamask-previews/profile-sync-controller": "0.2.1-preview-5a93d655",
  "@metamask-previews/queued-request-controller": "4.0.0-preview-5a93d655",
  "@metamask-previews/rate-limit-controller": "6.0.0-preview-5a93d655",
  "@metamask-previews/selected-network-controller": "17.0.0-preview-5a93d655",
  "@metamask-previews/signature-controller": "18.0.1-preview-5a93d655",
  "@metamask-previews/transaction-controller": "35.1.1-preview-5a93d655",
  "@metamask-previews/user-operation-controller": "14.0.1-preview-5a93d655"
}

@Prithpal-Sooriya Prithpal-Sooriya added the team-notifications Notification Team changes. https://github.com/orgs/MetaMask/teams/notifications label Aug 29, 2024
@Prithpal-Sooriya Prithpal-Sooriya marked this pull request as ready for review August 29, 2024 12:52
@Prithpal-Sooriya Prithpal-Sooriya requested a review from a team as a code owner August 29, 2024 12:52
@Prithpal-Sooriya
Copy link
Contributor Author

@metamaskbot publish-preview

@Prithpal-Sooriya Prithpal-Sooriya marked this pull request as draft August 29, 2024 12:53
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "18.1.0-preview-04657153",
  "@metamask-previews/address-book-controller": "5.0.0-preview-04657153",
  "@metamask-previews/announcement-controller": "7.0.0-preview-04657153",
  "@metamask-previews/approval-controller": "7.0.2-preview-04657153",
  "@metamask-previews/assets-controllers": "37.0.0-preview-04657153",
  "@metamask-previews/base-controller": "6.0.3-preview-04657153",
  "@metamask-previews/build-utils": "3.0.0-preview-04657153",
  "@metamask-previews/chain-controller": "0.1.1-preview-04657153",
  "@metamask-previews/composable-controller": "8.0.0-preview-04657153",
  "@metamask-previews/controller-utils": "11.1.0-preview-04657153",
  "@metamask-previews/ens-controller": "13.0.1-preview-04657153",
  "@metamask-previews/eth-json-rpc-provider": "4.1.3-preview-04657153",
  "@metamask-previews/gas-fee-controller": "19.0.1-preview-04657153",
  "@metamask-previews/json-rpc-engine": "9.0.2-preview-04657153",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.2-preview-04657153",
  "@metamask-previews/keyring-controller": "17.1.2-preview-04657153",
  "@metamask-previews/logging-controller": "5.0.0-preview-04657153",
  "@metamask-previews/message-manager": "10.0.2-preview-04657153",
  "@metamask-previews/name-controller": "8.0.0-preview-04657153",
  "@metamask-previews/network-controller": "20.2.0-preview-04657153",
  "@metamask-previews/notification-controller": "6.0.0-preview-04657153",
  "@metamask-previews/notification-services-controller": "0.2.1-preview-04657153",
  "@metamask-previews/permission-controller": "11.0.0-preview-04657153",
  "@metamask-previews/permission-log-controller": "3.0.0-preview-04657153",
  "@metamask-previews/phishing-controller": "12.0.0-preview-04657153",
  "@metamask-previews/polling-controller": "9.0.1-preview-04657153",
  "@metamask-previews/preferences-controller": "13.0.1-preview-04657153",
  "@metamask-previews/profile-sync-controller": "0.2.1-preview-04657153",
  "@metamask-previews/queued-request-controller": "4.0.0-preview-04657153",
  "@metamask-previews/rate-limit-controller": "6.0.0-preview-04657153",
  "@metamask-previews/selected-network-controller": "17.0.0-preview-04657153",
  "@metamask-previews/signature-controller": "18.1.0-preview-04657153",
  "@metamask-previews/transaction-controller": "35.2.0-preview-04657153",
  "@metamask-previews/user-operation-controller": "14.0.1-preview-04657153"
}

@Prithpal-Sooriya Prithpal-Sooriya marked this pull request as ready for review September 2, 2024 10:50
Copy link
Contributor

@mathieuartu mathieuartu left a comment

Choose a reason for hiding this comment

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

Nice one!!

@Prithpal-Sooriya Prithpal-Sooriya merged commit ecb96d6 into main Sep 2, 2024
116 checks passed
@Prithpal-Sooriya Prithpal-Sooriya deleted the notifications-multiple-exports branch September 2, 2024 12:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
team-notifications Notification Team changes. https://github.com/orgs/MetaMask/teams/notifications
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants