Skip to content

Commit 0471bbc

Browse files
cryptodev-2smcmire
andauthored
feat: extract generate-action-types CLI into @metamask/messenger-cli (#8378)
## Explanation The `generate-action-types` CLI tool currently lives inside `@metamask/messenger`. Consumers may use different ESLint or TypeScript versions, which complicates usage when these are peer dependencies. This PR extracts the CLI into its own dedicated package (`@metamask/messenger-cli`) so consumers can install it as a devDependency with their own ESLint/TypeScript versions. ### Changes - **New `@metamask/messenger-cli` package** with all CLI source files and tests (100% coverage). - `eslint` and `typescript` are peer dependencies (uses the project's versions to avoid formatting mismatches). - `@metamask/utils` and `yargs` are regular dependencies. - CLI-only package — no public API exports, no typedoc. - Binary: `messenger-action-types --generate` / `messenger-action-types --check` - **`@metamask/messenger` is unchanged for consumers** (non-breaking). The existing CLI and binary remain, with a deprecation warning pointing to the new package. - **Per-package scripts** renamed to `messenger-action-types:generate` and `messenger-action-types:check` (matching `changelog:update`/`changelog:validate` pattern). - **Removed `tsx` devDependency** from ~49 consumer packages (no longer needed per-package). - **Updated root scripts** to `messenger-action-types:check` and `messenger-action-types:generate`. - **Updated CI, docs, and metadata** (`lint-build-test.yml`, `controller-guidelines.md`, `teams.json`, `CODEOWNERS`, `eslint.config.mjs`, `yarn.config.cjs`). This package will also serve as the home for `@metamask/messenger-docs` in a follow-up, consolidating all messenger CLI tooling in one place. ## References - Related to #8264 ## 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 - [ ] I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Mostly build/dev-tooling changes, but it rewires lint/CI scripts and per-package workflows; mistakes could break generation checks or CI across many workspaces. > > **Overview** > Introduces a new workspace package, `@metamask/messenger-cli`, that provides the `messenger-action-types` binary to **generate** and **check** `*-method-action-types.ts` files (including source discovery, JSDoc extraction, optional ESLint formatting, and full test coverage). > > Updates the monorepo to use the new CLI everywhere: root `lint`/`lint:fix` and CI now run `messenger-action-types:*`, and many workspace `package.json` scripts are renamed from `generate-method-action-types` to `messenger-action-types:generate`/`:check` pointing at the new CLI. > > Marks the old `@metamask/messenger` `messenger-generate-action-types` CLI as **deprecated** via a runtime warning, and updates docs/metadata/config (`README`, controller guidelines, `CODEOWNERS`, `teams.json`, `eslint.config.mjs`, `tsconfig*`, `yarn.config.cjs`) to register the new package and its build exceptions. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ab18925. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Elliot Winkler <elliot.winkler@gmail.com>
1 parent d16a5f7 commit 0471bbc

81 files changed

Lines changed: 2648 additions & 58 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.

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
/packages/controller-utils @MetaMask/core-platform
8787
/packages/eth-json-rpc-middleware @MetaMask/core-platform
8888
/packages/messenger @MetaMask/core-platform
89+
/packages/messenger-cli @MetaMask/core-platform
8990
/packages/sample-controllers @MetaMask/core-platform
9091
/packages/polling-controller @MetaMask/core-platform
9192
/packages/preferences-controller @MetaMask/core-platform

.github/workflows/lint-build-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
- constraints
3939
- lint:dependencies
4040
- lint:teams
41-
- generate-method-action-types:check
41+
- messenger-action-types:check
4242
- readme-content:check
4343
steps:
4444
- name: Checkout and setup environment

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ Each package in this repository has its own README where you can find installati
6464
- [`@metamask/logging-controller`](packages/logging-controller)
6565
- [`@metamask/message-manager`](packages/message-manager)
6666
- [`@metamask/messenger`](packages/messenger)
67+
- [`@metamask/messenger-cli`](packages/messenger-cli)
6768
- [`@metamask/money-account-controller`](packages/money-account-controller)
6869
- [`@metamask/multichain-account-service`](packages/multichain-account-service)
6970
- [`@metamask/multichain-api-middleware`](packages/multichain-api-middleware)
@@ -149,6 +150,7 @@ linkStyle default opacity:0.5
149150
logging_controller(["@metamask/logging-controller"]);
150151
message_manager(["@metamask/message-manager"]);
151152
messenger(["@metamask/messenger"]);
153+
messenger_cli(["@metamask/messenger-cli"]);
152154
money_account_controller(["@metamask/money-account-controller"]);
153155
multichain_account_service(["@metamask/multichain-account-service"]);
154156
multichain_api_middleware(["@metamask/multichain-api-middleware"]);

docs/code-guidelines/controller-guidelines.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ Instead, you can follow this process:
457457

458458
1. Define a constant in your controller file called `MESSENGER_EXPOSED_METHODS`, listing the methods you want to expose.
459459
2. Remove manual action registrations; instead, call `registerMethodActionHandlers` and pass `MESSENGER_EXPOSED_METHODS`.
460-
3. Remove messenger action types; instead, run `yarn generate-method-action-types`. This will create a file called `${ControllerName}-method-action-types.ts`, which exports a type called `${ControllerName}MethodActions`.
460+
3. Remove messenger action types; instead, run `yarn messenger-action-types:generate`. This will create a file called `${ControllerName}-method-action-types.ts`, which exports a type called `${ControllerName}MethodActions`.
461461
4. Import `${ControllerName}-method-action-types.ts` in your controller file, and add `${ControllerName}MethodActions` to `${ControllerName}Actions`.
462462
5. Export the action types from `${ControllerName}-method-action-types.ts` in your package's `index.ts` file. Do **not** export the `${ControllerName}MethodActions` type.
463463

eslint.config.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,12 @@ const config = createConfig([
293293
'import-x/no-nodejs-modules': 'off',
294294
},
295295
},
296+
{
297+
files: ['packages/messenger-cli/src/**/*.{js,ts}'],
298+
rules: {
299+
'import-x/no-nodejs-modules': 'off',
300+
},
301+
},
296302
{
297303
files: [
298304
'packages/notification-services-controller/src/NotificationServicesPushController/services/push/*-web.ts',

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@
2121
"changelog:update": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:update",
2222
"changelog:validate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:validate",
2323
"create-package": "tsx scripts/create-package",
24-
"generate-method-action-types": "yarn workspaces foreach --all --parallel --interlaced --verbose run generate-method-action-types",
25-
"generate-method-action-types:check": "yarn generate-method-action-types --check",
26-
"lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn generate-method-action-types --check && yarn readme-content:check",
24+
"lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn messenger-action-types:check && yarn readme-content:check",
2725
"lint:dependencies": "depcheck && yarn dedupe --check",
2826
"lint:dependencies:fix": "depcheck && yarn dedupe",
2927
"lint:eslint": "yarn build:only-clean && NODE_OPTIONS='--max-old-space-size=6144' yarn eslint",
30-
"lint:fix": "yarn lint:eslint --fix --prune-suppressions && echo && yarn lint:misc --write && yarn constraints --fix && yarn lint:dependencies:fix && yarn generate-method-action-types --fix && yarn readme-content:update",
28+
"lint:fix": "yarn lint:eslint --fix --prune-suppressions && echo && yarn lint:misc --write && yarn constraints --fix && yarn lint:dependencies:fix && yarn messenger-action-types:generate && yarn readme-content:update",
3129
"lint:misc": "prettier --no-error-on-unmatched-pattern '**/*.json' '**/*.md' '**/*.yml' '!.yarnrc.yml' '!merged-packages/**' --ignore-path .gitignore",
3230
"lint:misc:check": "yarn lint:misc --check",
3331
"lint:teams": "tsx scripts/lint-teams-json.ts",
32+
"messenger-action-types:check": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run messenger-action-types:check",
33+
"messenger-action-types:generate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run messenger-action-types:generate",
3434
"prepack": "./scripts/prepack.sh",
3535
"prepare-preview-builds": "./scripts/prepare-preview-builds.sh",
3636
"readme-content:check": "tsx scripts/update-readme-content.ts --check",

packages/account-tree-controller/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
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 ../../packages/messenger/src/generate-action-types/cli.ts",
43+
"messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check",
44+
"messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
4445
"since-latest-release": "../../scripts/since-latest-release.sh",
4546
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4647
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/accounts-controller/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
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 ../../packages/messenger/src/generate-action-types/cli.ts",
43+
"messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check",
44+
"messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
4445
"since-latest-release": "../../scripts/since-latest-release.sh",
4546
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4647
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/address-book-controller/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
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 ../../packages/messenger/src/generate-action-types/cli.ts",
43+
"messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check",
44+
"messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
4445
"since-latest-release": "../../scripts/since-latest-release.sh",
4546
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4647
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

packages/analytics-controller/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
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 ../../packages/messenger/src/generate-action-types/cli.ts",
43+
"messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check",
44+
"messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
4445
"since-latest-release": "../../scripts/since-latest-release.sh",
4546
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
4647
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",

0 commit comments

Comments
 (0)