Skip to content

Commit 7f0ee6b

Browse files
authored
feat(messenger): add generate-action-types CLI tool as subpath export (#8264)
## Explanation The script `scripts/generate-method-action-types.ts` generates TypeScript action type files for controllers/services that define `MESSENGER_EXPOSED_METHODS`. It was a monorepo-local script invoked via `tsx ../../scripts/generate-method-action-types.ts` from 44 packages. This PR moves it into `@metamask/messenger` as a CLI tool, keeping the library lightweight while making the codegen reusable in other repositories. **What changed:** - Add `generate-action-types/` subdirectory under `packages/messenger/src/` with modular source files (`parse-source.ts`, `generate-content.ts`, `check.ts`, `fix.ts`, `cli.ts`) - Add `messenger-generate-action-types` bin entry to `@metamask/messenger` - `yargs` is the only runtime dependency; `@metamask/utils`, `typescript`, and `eslint` are non-optional peer dependencies (required for the CLI, but provided by the consuming project). The core `Messenger` library remains lightweight. - Recursive directory search discovers controllers/services in subdirectories automatically, removing the need for per-subdirectory scripts - Update all 44 consuming packages to invoke the CLI via `tsx ../../packages/messenger/src/generate-action-types/cli.ts` - Delete old `scripts/generate-method-action-types.ts` - Functional tests via `execa` + `tsx` verify exact generated output for controllers and services **Working examples in external repos:** - MetaMask/smart-transactions-controller#575 - MetaMask/snaps#3914 ## References - Consumer PRs: [smart-transactions-controller#575](MetaMask/smart-transactions-controller#575), [snaps#3914](MetaMask/snaps#3914) ## Checklist - [x] I've updated the test suite for new or updated code as appropriate - [x] I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate - [x] I've communicated my changes to consumers by [updating changelogs for packages I've changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md) - [ ] I've introduced [breaking changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md) in this PR and have prepared draft pull requests for clients and consumer packages to resolve them <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Mostly build/tooling changes, but it touches many packages and changes the action-type generation pipeline; failures would surface as broken scripts or mismatched generated files across the monorepo. > > **Overview** > Adds a new `@metamask/messenger` codegen CLI (`messenger-generate-action-types`) that discovers controllers/services with `MESSENGER_EXPOSED_METHODS` and supports `--fix` and `--check` workflows, including optional ESLint formatting and extensive unit/functional tests. > > Migrates dozens of packages’ `generate-method-action-types` scripts to call the new CLI entrypoint, deletes the legacy `scripts/generate-method-action-types.ts`, and updates generated `*-method-action-types.ts` outputs (header/JSDoc normalization and some regenerated action unions). Also updates repo config to support the new tooling (ESLint rule exception for the generator folder and Jest module mapping for `@metamask/utils/node`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ca19d18. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent ebb4317 commit 7f0ee6b

70 files changed

Lines changed: 2738 additions & 892 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

eslint.config.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,12 @@ const config = createConfig([
221221
'n/no-deprecated-api': 'off',
222222
},
223223
},
224+
{
225+
files: ['packages/messenger/src/generate-action-types/**/*.{js,ts}'],
226+
rules: {
227+
'import-x/no-nodejs-modules': 'off',
228+
},
229+
},
224230
{
225231
files: [
226232
'packages/notification-services-controller/src/NotificationServicesPushController/services/push/*-web.ts',

jest.config.packages.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ module.exports = {
8383
'^@metamask/json-rpc-engine/v2$': [
8484
'<rootDir>/../json-rpc-engine/src/v2/index.ts',
8585
],
86+
'^@metamask/utils/node$': require.resolve('@metamask/utils/node'),
8687
'^@metamask/(.+)$': [
8788
'<rootDir>/../$1/src',
8889
// Some @metamask/* packages we are referencing aren't in this monorepo,

packages/account-tree-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/account-tree-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/account-tree-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/accounts-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/accounts-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/accounts-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/address-book-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/address-book-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/address-book-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/analytics-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/analytics-data-regulation-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-data-regulation-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-data-regulation-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/announcement-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/announcement-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/announcement-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/approval-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/approval-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/approval-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/assets-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"build:docs": "typedoc",
4141
"changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controller",
4242
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controller",
43-
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
43+
"generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts",
4444
"since-latest-release": "../../scripts/since-latest-release.sh",
4545
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4646
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

0 commit comments

Comments
 (0)