From fc97abc2280f58a6e3239e9888eb0cea8c3d4375 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 11:47:42 +0200 Subject: [PATCH 01/14] feat: extract generate-action-types CLI into @metamask/messenger-cli --- .github/CODEOWNERS | 1 + .github/workflows/lint-build-test.yml | 2 +- README.md | 16 + docs/code-guidelines/controller-guidelines.md | 2 +- eslint.config.mjs | 6 + package.json | 8 +- packages/account-tree-controller/package.json | 2 - packages/accounts-controller/package.json | 2 - packages/address-book-controller/package.json | 2 - packages/analytics-controller/package.json | 2 - .../package.json | 2 - packages/announcement-controller/package.json | 2 - packages/approval-controller/package.json | 2 - packages/assets-controller/package.json | 2 - packages/assets-controllers/package.json | 2 - packages/base-data-service/package.json | 2 - packages/claims-controller/package.json | 2 - packages/client-controller/package.json | 2 - packages/compliance-controller/package.json | 2 - .../config-registry-controller/package.json | 2 - packages/connectivity-controller/package.json | 2 - packages/core-backend/package.json | 2 - packages/delegation-controller/package.json | 2 - packages/earn-controller/package.json | 2 - packages/ens-controller/package.json | 2 - packages/gas-fee-controller/package.json | 2 - .../gator-permissions-controller/package.json | 2 - packages/geolocation-controller/package.json | 2 - packages/logging-controller/package.json | 2 - packages/messenger-cli/CHANGELOG.md | 16 + packages/messenger-cli/LICENSE | 20 + packages/messenger-cli/README.md | 15 + packages/messenger-cli/jest.config.js | 29 + packages/messenger-cli/package.json | 77 +++ packages/messenger-cli/src/check.test.ts | 154 +++++ packages/messenger-cli/src/check.ts | 115 ++++ packages/messenger-cli/src/cli.test.ts | 504 ++++++++++++++ packages/messenger-cli/src/cli.ts | 139 ++++ packages/messenger-cli/src/fix.test.ts | 146 ++++ packages/messenger-cli/src/fix.ts | 50 ++ .../src/generate-content.test.ts | 84 +++ .../messenger-cli/src/generate-content.ts | 53 ++ packages/messenger-cli/src/index.ts | 6 + .../messenger-cli/src/parse-source.test.ts | 624 ++++++++++++++++++ packages/messenger-cli/src/parse-source.ts | 439 ++++++++++++ packages/messenger-cli/src/types.ts | 6 + packages/messenger-cli/tsconfig.build.json | 10 + packages/messenger-cli/tsconfig.json | 8 + packages/messenger-cli/typedoc.json | 7 + packages/messenger/CHANGELOG.md | 5 + .../src/generate-action-types/cli.ts | 4 + .../money-account-controller/package.json | 2 - .../multichain-account-service/package.json | 2 - packages/name-controller/package.json | 2 - packages/network-controller/package.json | 2 - .../package.json | 2 - .../package.json | 2 - packages/permission-controller/package.json | 2 - .../permission-log-controller/package.json | 2 - packages/perps-controller/package.json | 2 - packages/phishing-controller/package.json | 2 - packages/preferences-controller/package.json | 2 - .../profile-metrics-controller/package.json | 2 - packages/profile-sync-controller/package.json | 2 - packages/ramps-controller/package.json | 2 - .../package.json | 2 - packages/sample-controllers/package.json | 2 - .../package.json | 2 - .../selected-network-controller/package.json | 2 - packages/shield-controller/package.json | 2 - packages/signature-controller/package.json | 2 - packages/social-controllers/package.json | 1 - packages/storage-service/package.json | 2 - packages/subscription-controller/package.json | 2 - packages/transaction-controller/package.json | 2 - .../transaction-pay-controller/package.json | 2 - .../user-operation-controller/package.json | 2 - .../package-template/package.json | 1 - teams.json | 1 + tsconfig.build.json | 3 + tsconfig.json | 3 + yarn.lock | 71 +- 82 files changed, 2570 insertions(+), 152 deletions(-) create mode 100644 packages/messenger-cli/CHANGELOG.md create mode 100644 packages/messenger-cli/LICENSE create mode 100644 packages/messenger-cli/README.md create mode 100644 packages/messenger-cli/jest.config.js create mode 100644 packages/messenger-cli/package.json create mode 100644 packages/messenger-cli/src/check.test.ts create mode 100644 packages/messenger-cli/src/check.ts create mode 100644 packages/messenger-cli/src/cli.test.ts create mode 100644 packages/messenger-cli/src/cli.ts create mode 100644 packages/messenger-cli/src/fix.test.ts create mode 100644 packages/messenger-cli/src/fix.ts create mode 100644 packages/messenger-cli/src/generate-content.test.ts create mode 100644 packages/messenger-cli/src/generate-content.ts create mode 100644 packages/messenger-cli/src/index.ts create mode 100644 packages/messenger-cli/src/parse-source.test.ts create mode 100644 packages/messenger-cli/src/parse-source.ts create mode 100644 packages/messenger-cli/src/types.ts create mode 100644 packages/messenger-cli/tsconfig.build.json create mode 100644 packages/messenger-cli/tsconfig.json create mode 100644 packages/messenger-cli/typedoc.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d3b3be15de9..345b70bd039 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -86,6 +86,7 @@ /packages/controller-utils @MetaMask/core-platform /packages/eth-json-rpc-middleware @MetaMask/core-platform /packages/messenger @MetaMask/core-platform +/packages/messenger-cli @MetaMask/core-platform /packages/sample-controllers @MetaMask/core-platform /packages/polling-controller @MetaMask/core-platform /packages/preferences-controller @MetaMask/core-platform diff --git a/.github/workflows/lint-build-test.yml b/.github/workflows/lint-build-test.yml index a0e3ecd7ef0..1632568ea35 100644 --- a/.github/workflows/lint-build-test.yml +++ b/.github/workflows/lint-build-test.yml @@ -38,7 +38,7 @@ jobs: - constraints - lint:dependencies - lint:teams - - generate-method-action-types:check + - messenger-action-types-codegen:check steps: - name: Checkout and setup environment uses: MetaMask/action-checkout-and-setup@v2 diff --git a/README.md b/README.md index 90acc603a7b..352fec4e6ec 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Each package in this repository has its own README where you can find installati - [`@metamask/logging-controller`](packages/logging-controller) - [`@metamask/message-manager`](packages/message-manager) - [`@metamask/messenger`](packages/messenger) +- [`@metamask/messenger-cli`](packages/messenger-cli) - [`@metamask/money-account-controller`](packages/money-account-controller) - [`@metamask/multichain-account-service`](packages/multichain-account-service) - [`@metamask/multichain-api-middleware`](packages/multichain-api-middleware) @@ -149,6 +150,7 @@ linkStyle default opacity:0.5 logging_controller(["@metamask/logging-controller"]); message_manager(["@metamask/message-manager"]); messenger(["@metamask/messenger"]); + messenger_cli(["@metamask/messenger-cli"]); money_account_controller(["@metamask/money-account-controller"]); multichain_account_service(["@metamask/multichain-account-service"]); multichain_api_middleware(["@metamask/multichain-api-middleware"]); @@ -219,6 +221,7 @@ linkStyle default opacity:0.5 assets_controller --> network_controller; assets_controller --> network_enablement_controller; assets_controller --> permission_controller; + assets_controller --> phishing_controller; assets_controller --> polling_controller; assets_controller --> preferences_controller; assets_controller --> transaction_controller; @@ -264,6 +267,7 @@ linkStyle default opacity:0.5 bridge_status_controller --> controller_utils; bridge_status_controller --> gas_fee_controller; bridge_status_controller --> keyring_controller; + bridge_status_controller --> messenger; bridge_status_controller --> network_controller; bridge_status_controller --> polling_controller; bridge_status_controller --> profile_sync_controller; @@ -329,6 +333,7 @@ linkStyle default opacity:0.5 eth_json_rpc_provider --> json_rpc_engine; gas_fee_controller --> base_controller; gas_fee_controller --> controller_utils; + gas_fee_controller --> messenger; gas_fee_controller --> network_controller; gas_fee_controller --> polling_controller; gator_permissions_controller --> base_controller; @@ -346,6 +351,10 @@ linkStyle default opacity:0.5 message_manager --> base_controller; message_manager --> controller_utils; message_manager --> messenger; + money_account_controller --> accounts_controller; + money_account_controller --> base_controller; + money_account_controller --> keyring_controller; + money_account_controller --> messenger; multichain_account_service --> accounts_controller; multichain_account_service --> base_controller; multichain_account_service --> keyring_controller; @@ -415,6 +424,7 @@ linkStyle default opacity:0.5 polling_controller --> base_controller; polling_controller --> controller_utils; polling_controller --> network_controller; + polling_controller --> messenger; preferences_controller --> base_controller; preferences_controller --> messenger; profile_metrics_controller --> accounts_controller; @@ -439,6 +449,7 @@ linkStyle default opacity:0.5 remote_feature_flag_controller --> controller_utils; remote_feature_flag_controller --> messenger; sample_controllers --> base_controller; + sample_controllers --> base_data_service; sample_controllers --> messenger; sample_controllers --> network_controller; sample_controllers --> controller_utils; @@ -464,6 +475,10 @@ linkStyle default opacity:0.5 signature_controller --> logging_controller; signature_controller --> messenger; signature_controller --> network_controller; + social_controllers --> base_controller; + social_controllers --> base_data_service; + social_controllers --> controller_utils; + social_controllers --> messenger; storage_service --> messenger; subscription_controller --> base_controller; subscription_controller --> controller_utils; @@ -480,6 +495,7 @@ linkStyle default opacity:0.5 transaction_controller --> messenger; transaction_controller --> network_controller; transaction_controller --> remote_feature_flag_controller; + transaction_controller --> connectivity_controller; transaction_controller --> eth_block_tracker; transaction_controller --> eth_json_rpc_provider; transaction_pay_controller --> assets_controller; diff --git a/docs/code-guidelines/controller-guidelines.md b/docs/code-guidelines/controller-guidelines.md index fd59467d9e1..62c32334938 100644 --- a/docs/code-guidelines/controller-guidelines.md +++ b/docs/code-guidelines/controller-guidelines.md @@ -457,7 +457,7 @@ Instead, you can follow this process: 1. Define a constant in your controller file called `MESSENGER_EXPOSED_METHODS`, listing the methods you want to expose. 2. Remove manual action registrations; instead, call `registerMethodActionHandlers` and pass `MESSENGER_EXPOSED_METHODS`. -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`. +3. Remove messenger action types; instead, run `yarn messenger-action-types-codegen`. This will create a file called `${ControllerName}-method-action-types.ts`, which exports a type called `${ControllerName}MethodActions`. 4. Import `${ControllerName}-method-action-types.ts` in your controller file, and add `${ControllerName}MethodActions` to `${ControllerName}Actions`. 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. diff --git a/eslint.config.mjs b/eslint.config.mjs index e1dbfdb5c2d..492f1c99c3c 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -293,6 +293,12 @@ const config = createConfig([ 'import-x/no-nodejs-modules': 'off', }, }, + { + files: ['packages/messenger-cli/src/**/*.{js,ts}'], + rules: { + 'import-x/no-nodejs-modules': 'off', + }, + }, { files: [ 'packages/notification-services-controller/src/NotificationServicesPushController/services/push/*-web.ts', diff --git a/package.json b/package.json index 61359b640c3..c1122986a89 100644 --- a/package.json +++ b/package.json @@ -21,16 +21,16 @@ "changelog:update": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:update", "changelog:validate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:validate", "create-package": "tsx scripts/create-package", - "generate-method-action-types": "yarn workspaces foreach --all --parallel --interlaced --verbose run generate-method-action-types", - "generate-method-action-types:check": "yarn generate-method-action-types --check", - "lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn generate-method-action-types --check", + "lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn messenger-action-types-codegen --check", "lint:dependencies": "depcheck && yarn dedupe --check", "lint:dependencies:fix": "depcheck && yarn dedupe", "lint:eslint": "yarn build:only-clean && NODE_OPTIONS='--max-old-space-size=6144' yarn eslint", - "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", + "lint:fix": "yarn lint:eslint --fix --prune-suppressions && echo && yarn lint:misc --write && yarn constraints --fix && yarn lint:dependencies:fix && yarn messenger-action-types-codegen --fix", "lint:misc": "prettier --no-error-on-unmatched-pattern '**/*.json' '**/*.md' '**/*.yml' '!.yarnrc.yml' '!merged-packages/**' --ignore-path .gitignore", "lint:misc:check": "yarn lint:misc --check", "lint:teams": "tsx scripts/lint-teams-json.ts", + "messenger-action-types-codegen": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose exec tsx ../../packages/messenger-cli/src/cli.ts", + "messenger-action-types-codegen:check": "yarn messenger-action-types-codegen --check", "prepack": "./scripts/prepack.sh", "prepare-preview-builds": "./scripts/prepare-preview-builds.sh", "setup": "yarn install", diff --git a/packages/account-tree-controller/package.json b/packages/account-tree-controller/package.json index 913d5c6e8b8..56d0673903b 100644 --- a/packages/account-tree-controller/package.json +++ b/packages/account-tree-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/account-tree-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/account-tree-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -72,7 +71,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index 3e68ed75441..aa64793f9c4 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/accounts-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/accounts-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -77,7 +76,6 @@ "@types/readable-stream": "^2.3.0", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/address-book-controller/package.json b/packages/address-book-controller/package.json index 2163d205592..606f691db36 100644 --- a/packages/address-book-controller/package.json +++ b/packages/address-book-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/address-book-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/address-book-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -60,7 +59,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/analytics-controller/package.json b/packages/analytics-controller/package.json index 964e7114785..aeb67f7a690 100644 --- a/packages/analytics-controller/package.json +++ b/packages/analytics-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -59,7 +58,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/analytics-data-regulation-controller/package.json b/packages/analytics-data-regulation-controller/package.json index 9b397773c7e..85da3bb77a8 100644 --- a/packages/analytics-data-regulation-controller/package.json +++ b/packages/analytics-data-regulation-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-data-regulation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-data-regulation-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -61,7 +60,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/announcement-controller/package.json b/packages/announcement-controller/package.json index 5d345be8e2d..1d01b2a8b3f 100644 --- a/packages/announcement-controller/package.json +++ b/packages/announcement-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/announcement-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/announcement-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -58,7 +57,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/approval-controller/package.json b/packages/approval-controller/package.json index d74a42ea293..09e22cdd415 100644 --- a/packages/approval-controller/package.json +++ b/packages/approval-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/approval-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/approval-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -61,7 +60,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/assets-controller/package.json b/packages/assets-controller/package.json index a0c02ecc311..f2baf8a9a05 100644 --- a/packages/assets-controller/package.json +++ b/packages/assets-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -85,7 +84,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/assets-controllers/package.json b/packages/assets-controllers/package.json index 509696eb624..7ecfc68e690 100644 --- a/packages/assets-controllers/package.json +++ b/packages/assets-controllers/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controllers", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controllers", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -111,7 +110,6 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/base-data-service/package.json b/packages/base-data-service/package.json index 6886dde1bb2..9b4072feaad 100644 --- a/packages/base-data-service/package.json +++ b/packages/base-data-service/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/base-data-service", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/base-data-service", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "publish:preview": "yarn npm publish --tag preview", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", @@ -63,7 +62,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/claims-controller/package.json b/packages/claims-controller/package.json index 8c179f0edcf..3584482d915 100644 --- a/packages/claims-controller/package.json +++ b/packages/claims-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/claims-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/claims-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -62,7 +61,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/client-controller/package.json b/packages/client-controller/package.json index b362d692810..4c21ce7790e 100644 --- a/packages/client-controller/package.json +++ b/packages/client-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/client-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/client-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -59,7 +58,6 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/compliance-controller/package.json b/packages/compliance-controller/package.json index 990c373b4b5..9f0ed4373de 100644 --- a/packages/compliance-controller/package.json +++ b/packages/compliance-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/compliance-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/compliance-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -63,7 +62,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/config-registry-controller/package.json b/packages/config-registry-controller/package.json index ad0ef27874c..35ed4f93b8f 100644 --- a/packages/config-registry-controller/package.json +++ b/packages/config-registry-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/config-registry-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/config-registry-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "publish:preview": "yarn npm publish --tag preview", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", @@ -69,7 +68,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/connectivity-controller/package.json b/packages/connectivity-controller/package.json index 4544cdd7429..bff62281fc5 100644 --- a/packages/connectivity-controller/package.json +++ b/packages/connectivity-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/connectivity-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/connectivity-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -59,7 +58,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/core-backend/package.json b/packages/core-backend/package.json index 28de51c2cc1..ad7ff6b4d5d 100644 --- a/packages/core-backend/package.json +++ b/packages/core-backend/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/core-backend", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/core-backend", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -65,7 +64,6 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/delegation-controller/package.json b/packages/delegation-controller/package.json index d109f833aa9..c53a3aaac14 100644 --- a/packages/delegation-controller/package.json +++ b/packages/delegation-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/delegation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/delegation-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -61,7 +60,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/earn-controller/package.json b/packages/earn-controller/package.json index e852c001825..8e2cb901d27 100644 --- a/packages/earn-controller/package.json +++ b/packages/earn-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/earn-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/earn-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -67,7 +66,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/ens-controller/package.json b/packages/ens-controller/package.json index 3df46a600b7..b1098a73188 100644 --- a/packages/ens-controller/package.json +++ b/packages/ens-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/ens-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/ens-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -63,7 +62,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/gas-fee-controller/package.json b/packages/gas-fee-controller/package.json index db5d9a0677c..f2ba1a67121 100644 --- a/packages/gas-fee-controller/package.json +++ b/packages/gas-fee-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/gas-fee-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/gas-fee-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -72,7 +71,6 @@ "jest-when": "^3.4.2", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/gator-permissions-controller/package.json b/packages/gator-permissions-controller/package.json index d43da7af8d5..7e7938cb781 100644 --- a/packages/gator-permissions-controller/package.json +++ b/packages/gator-permissions-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/gator-permissions-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/gator-permissions-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -68,7 +67,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/geolocation-controller/package.json b/packages/geolocation-controller/package.json index 119390c884f..eda38b8b0b1 100644 --- a/packages/geolocation-controller/package.json +++ b/packages/geolocation-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/geolocation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/geolocation-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -59,7 +58,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/logging-controller/package.json b/packages/logging-controller/package.json index 6f845bddd8b..033371d899f 100644 --- a/packages/logging-controller/package.json +++ b/packages/logging-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/logging-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/logging-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -60,7 +59,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/messenger-cli/CHANGELOG.md b/packages/messenger-cli/CHANGELOG.md new file mode 100644 index 00000000000..640b5a95550 --- /dev/null +++ b/packages/messenger-cli/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- Initial release, extracted from `@metamask/messenger` ([#8378](https://github.com/MetaMask/core/pull/8378)) + - CLI tool for generating TypeScript action type files for controllers and services that define `MESSENGER_EXPOSED_METHODS`. + - Available as a CLI binary (`messenger-action-types-codegen`). + +[Unreleased]: https://github.com/MetaMask/core/ diff --git a/packages/messenger-cli/LICENSE b/packages/messenger-cli/LICENSE new file mode 100644 index 00000000000..c8a0ff6be3a --- /dev/null +++ b/packages/messenger-cli/LICENSE @@ -0,0 +1,20 @@ +MIT License + +Copyright (c) 2026 MetaMask + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE diff --git a/packages/messenger-cli/README.md b/packages/messenger-cli/README.md new file mode 100644 index 00000000000..428c915c8d1 --- /dev/null +++ b/packages/messenger-cli/README.md @@ -0,0 +1,15 @@ +# `@metamask/messenger-cli` + +CLI tools for the MetaMask messenger system + +## Installation + +`yarn add @metamask/messenger-cli` + +or + +`npm install @metamask/messenger-cli` + +## Contributing + +This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). diff --git a/packages/messenger-cli/jest.config.js b/packages/messenger-cli/jest.config.js new file mode 100644 index 00000000000..d29f3f6c0db --- /dev/null +++ b/packages/messenger-cli/jest.config.js @@ -0,0 +1,29 @@ +/* + * For a detailed explanation regarding each configuration property and type check, visit: + * https://jestjs.io/docs/configuration + */ + +const merge = require('deepmerge'); +const path = require('path'); + +const baseConfig = require('../../jest.config.packages'); + +const displayName = path.basename(__dirname); + +module.exports = merge(baseConfig, { + // The display name when running multiple projects + displayName, + + // cli.ts is tested via execa subprocess in cli.test.ts; Jest can't instrument it + coveragePathIgnorePatterns: ['./src/cli.ts'], + + // An object that configures minimum threshold enforcement for coverage results + coverageThreshold: { + global: { + branches: 100, + functions: 100, + lines: 100, + statements: 100, + }, + }, +}); diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json new file mode 100644 index 00000000000..a7dfd1a7611 --- /dev/null +++ b/packages/messenger-cli/package.json @@ -0,0 +1,77 @@ +{ + "name": "@metamask/messenger-cli", + "version": "0.0.0", + "description": "CLI tools for the MetaMask messenger system", + "keywords": [ + "MetaMask", + "Ethereum" + ], + "homepage": "https://github.com/MetaMask/core/tree/main/packages/messenger-cli#readme", + "bugs": { + "url": "https://github.com/MetaMask/core/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/MetaMask/core.git" + }, + "license": "MIT", + "sideEffects": false, + "exports": { + ".": { + "import": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + }, + "./package.json": "./package.json" + }, + "main": "./dist/index.cjs", + "types": "./dist/index.d.cts", + "bin": { + "messenger-action-types-codegen": "./dist/cli.mjs" + }, + "files": [ + "dist/" + ], + "scripts": { + "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references", + "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean", + "build:docs": "typedoc", + "changelog:update": "../../scripts/update-changelog.sh @metamask/messenger-cli", + "changelog:validate": "../../scripts/validate-changelog.sh @metamask/messenger-cli", + "since-latest-release": "../../scripts/since-latest-release.sh", + "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", + "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", + "test:verbose": "NODE_OPTIONS=--experimental-vm-modules jest --verbose", + "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch" + }, + "dependencies": { + "@metamask/utils": "^11.9.0", + "eslint": "^9.39.1", + "typescript": "~5.3.3", + "yargs": "^17.7.2" + }, + "devDependencies": { + "@metamask/auto-changelog": "^3.4.4", + "@ts-bridge/cli": "^0.6.4", + "@types/jest": "^29.5.14", + "@types/yargs": "^17.0.32", + "deepmerge": "^4.2.2", + "execa": "^5.0.0", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", + "typedoc": "^0.25.13", + "typedoc-plugin-missing-exports": "^2.0.0" + }, + "engines": { + "node": "^18.18 || >=20" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/packages/messenger-cli/src/check.test.ts b/packages/messenger-cli/src/check.test.ts new file mode 100644 index 00000000000..b46e0682242 --- /dev/null +++ b/packages/messenger-cli/src/check.test.ts @@ -0,0 +1,154 @@ +import { createSandbox } from '@metamask/utils/node'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +import { checkActionTypesFiles } from './check'; +import { generateActionTypesContent } from './generate-content'; +import type { SourceInfo } from './parse-source'; + +const { withinSandbox } = createSandbox('messenger/check-action-types'); + +describe('checkActionTypesFiles', () => { + it('reports up to date when files match (no ESLint)', async () => { + expect.assertions(1); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + const content = generateActionTypesContent(controller); + await fs.promises.writeFile( + path.join(directoryPath, 'TestController-method-action-types.ts'), + content, + 'utf8', + ); + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + const result = await checkActionTypesFiles([controller], null); + consoleSpy.mockRestore(); + + expect(result).toBe(true); + }); + }); + + it('reports out of date when files differ', async () => { + expect.assertions(1); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + await fs.promises.writeFile( + path.join(directoryPath, 'TestController-method-action-types.ts'), + '// outdated content\n', + 'utf8', + ); + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + const result = await checkActionTypesFiles([controller], null); + consoleSpy.mockRestore(); + consoleErrorSpy.mockRestore(); + + expect(result).toBe(false); + }); + }); + + it('reports missing files', async () => { + expect.assertions(1); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + const result = await checkActionTypesFiles([controller], null); + consoleSpy.mockRestore(); + consoleErrorSpy.mockRestore(); + + expect(result).toBe(false); + }); + }); + + it('reports non-ENOENT errors when accessing files', async () => { + expect.assertions(2); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + // Mock fs.promises.access to throw a non-ENOENT error + const accessSpy = jest + .spyOn(fs.promises, 'access') + .mockRejectedValue( + Object.assign(new Error('EPERM'), { code: 'EPERM' }), + ); + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + const result = await checkActionTypesFiles([controller], null); + + expect(consoleErrorSpy).toHaveBeenCalledWith( + expect.stringContaining('Error reading'), + expect.anything(), + ); + expect(result).toBe(false); + + accessSpy.mockRestore(); + consoleSpy.mockRestore(); + consoleErrorSpy.mockRestore(); + }); + }); + + it('uses ESLint when provided', async () => { + expect.assertions(3); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + const content = generateActionTypesContent(controller); + await fs.promises.writeFile( + path.join(directoryPath, 'TestController-method-action-types.ts'), + content, + 'utf8', + ); + + const mockEslint = { + instance: { lintFiles: jest.fn().mockResolvedValue([]) }, + eslintClass: { + outputFixes: jest.fn().mockResolvedValue(undefined), + }, + }; + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + const result = await checkActionTypesFiles([controller], mockEslint); + consoleSpy.mockRestore(); + + expect(mockEslint.instance.lintFiles).toHaveBeenCalled(); + expect(mockEslint.eslintClass.outputFixes).toHaveBeenCalled(); + expect(result).toBe(true); + }); + }); +}); diff --git a/packages/messenger-cli/src/check.ts b/packages/messenger-cli/src/check.ts new file mode 100644 index 00000000000..24fd1747695 --- /dev/null +++ b/packages/messenger-cli/src/check.ts @@ -0,0 +1,115 @@ +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +import { generateActionTypesContent } from './generate-content'; +import type { SourceInfo } from './parse-source'; +import type { ESLint } from './types'; + +/** + * Checks if generated action types files are up to date. + * + * @param sources - Array of source information objects. + * @param eslint - Optional ESLint instance and static methods for formatting. + * @returns Whether all files are up to date. + */ +export async function checkActionTypesFiles( + sources: SourceInfo[], + eslint: ESLint | null, +): Promise { + let hasErrors = false; + + const fileComparisonJobs: { + expectedTempFile: string; + actualFile: string; + baseFileName: string; + }[] = []; + + try { + for (const source of sources) { + console.log(`\nšŸ”§ Checking ${source.name}...`); + const outputDir = path.dirname(source.filePath); + const baseFileName = path.basename(source.filePath, '.ts'); + const actualFile = path.join( + outputDir, + `${baseFileName}-method-action-types.ts`, + ); + + const expectedContent = generateActionTypesContent(source); + const expectedTempFile = actualFile.replace('.ts', '.tmp.ts'); + + try { + await fs.promises.access(actualFile); + + await fs.promises.writeFile(expectedTempFile, expectedContent, 'utf8'); + + fileComparisonJobs.push({ + expectedTempFile, + actualFile, + baseFileName, + }); + } catch (error) { + if ((error as NodeJS.ErrnoException).code === 'ENOENT') { + console.error( + `āŒ ${baseFileName}-method-action-types.ts does not exist`, + ); + } else { + console.error( + `āŒ Error reading ${baseFileName}-method-action-types.ts:`, + error, + ); + } + hasErrors = true; + } + } + + if (fileComparisonJobs.length > 0) { + if (eslint) { + console.log('\nšŸ“ Running ESLint to compare files...'); + + const results = await eslint.instance.lintFiles( + fileComparisonJobs.map((job) => job.expectedTempFile), + ); + await eslint.eslintClass.outputFixes(results); + } + + for (const job of fileComparisonJobs) { + const expectedContent = await fs.promises.readFile( + job.expectedTempFile, + 'utf8', + ); + const actualContent = await fs.promises.readFile( + job.actualFile, + 'utf8', + ); + + if (expectedContent === actualContent) { + console.log( + `āœ… ${job.baseFileName}-method-action-types.ts is up to date`, + ); + } else { + console.error( + `āŒ ${job.baseFileName}-method-action-types.ts is out of date`, + ); + hasErrors = true; + } + } + } + } finally { + for (const job of fileComparisonJobs) { + try { + await fs.promises.unlink(job.expectedTempFile); + } catch { + // Ignore cleanup errors + } + } + } + + if (hasErrors) { + console.error('\nšŸ’„ Some action type files are out of date or missing.'); + console.error('Run `messenger-action-types-codegen --fix` to update them.'); + return false; + } + + console.log('\nšŸŽ‰ All action type files are up to date!'); + return true; +} diff --git a/packages/messenger-cli/src/cli.test.ts b/packages/messenger-cli/src/cli.test.ts new file mode 100644 index 00000000000..373c70fecee --- /dev/null +++ b/packages/messenger-cli/src/cli.test.ts @@ -0,0 +1,504 @@ +import { createSandbox } from '@metamask/utils/node'; +import execa from 'execa'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +const ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const TSX_PATH = path.join(ROOT_DIR, 'node_modules', '.bin', 'tsx'); +const CLI_PATH = path.join( + ROOT_DIR, + 'packages', + 'messenger-cli', + 'src', + 'cli.ts', +); + +/** + * Runs the CLI with the given arguments. + * + * @param args - The CLI arguments. + * @returns The execa result. + */ +async function runCLI(args: string[]): Promise { + return await execa(TSX_PATH, [CLI_PATH, ...args], { + cwd: ROOT_DIR, + reject: false, + all: true, + }); +} + +/** + * Recursively lists generated `-method-action-types.ts` files in a directory. + * + * @param dir - The directory to search. + * @returns Sorted list of relative paths to generated files. + */ +async function listGeneratedFiles(dir: string): Promise { + const results: string[] = []; + + async function walk(current: string): Promise { + const entries = await fs.promises.readdir(current, { withFileTypes: true }); + for (const entry of entries) { + const fullPath = path.join(current, entry.name); + if (entry.isDirectory()) { + await walk(fullPath); + } else if (entry.name.endsWith('-method-action-types.ts')) { + results.push(path.relative(dir, fullPath)); + } + } + } + + await walk(dir); + return results.sort(); +} + +const { withinSandbox } = createSandbox('messenger/cli-functional'); + +jest.setTimeout(30_000); + +describe('generate-action-types CLI (functional)', () => { + describe('--fix', () => { + it('generates FooController-method-action-types.ts for a controller with multiple documented methods', async () => { + expect.assertions(3); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'FooController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['getState', 'reset'] as const; + +class FooController { + /** + * Gets the current state. + */ + getState() { + return {}; + } + + /** + * Resets the controller. + */ + reset() { + return; + } +} +`, + 'utf8', + ); + + const result = await runCLI(['--fix', directoryPath]); + expect(result.exitCode).toBe(0); + + const generatedFiles = await listGeneratedFiles(directoryPath); + expect(generatedFiles).toStrictEqual([ + 'FooController-method-action-types.ts', + ]); + + const content = await fs.promises.readFile( + path.join(directoryPath, 'FooController-method-action-types.ts'), + 'utf8', + ); + expect(content).toBe(`/** + * This file is auto generated. + * Do not edit manually. + */ + +import type { FooController } from './FooController'; + +/** + * Gets the current state. + */ +export type FooControllerGetStateAction = { + type: \`FooController:getState\`; + handler: FooController['getState']; +}; + +/** + * Resets the controller. + */ +export type FooControllerResetAction = { + type: \`FooController:reset\`; + handler: FooController['reset']; +}; + +/** + * Union of all FooController action types. + */ +export type FooControllerMethodActions = FooControllerGetStateAction | FooControllerResetAction; +`); + }); + }); + + it('generates DataService-method-action-types.ts for a service with JSDoc containing @param and @returns', async () => { + expect.assertions(3); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'DataService.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['fetchItems'] as const; + +class DataService { + /** + * Fetches items from the API. + * + * @returns The items. + */ + fetchItems() { + return []; + } +} +`, + 'utf8', + ); + + const result = await runCLI(['--fix', directoryPath]); + expect(result.exitCode).toBe(0); + + const generatedFiles = await listGeneratedFiles(directoryPath); + expect(generatedFiles).toStrictEqual([ + 'DataService-method-action-types.ts', + ]); + + const content = await fs.promises.readFile( + path.join(directoryPath, 'DataService-method-action-types.ts'), + 'utf8', + ); + expect(content).toBe(`/** + * This file is auto generated. + * Do not edit manually. + */ + +import type { DataService } from './DataService'; + +/** + * Fetches items from the API. + * + * @returns The items. + */ +export type DataServiceFetchItemsAction = { + type: \`DataService:fetchItems\`; + handler: DataService['fetchItems']; +}; + +/** + * Union of all DataService action types. + */ +export type DataServiceMethodActions = DataServiceFetchItemsAction; +`); + }); + }); + + it('generates correct types for a controller with many methods without JSDoc', async () => { + expect.assertions(3); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'BarController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['enable', 'disable', 'isEnabled'] as const; + +class BarController { + enable() { return; } + disable() { return; } + isEnabled() { return true; } +} +`, + 'utf8', + ); + + const result = await runCLI(['--fix', directoryPath]); + expect(result.exitCode).toBe(0); + + const generatedFiles = await listGeneratedFiles(directoryPath); + expect(generatedFiles).toStrictEqual([ + 'BarController-method-action-types.ts', + ]); + + const content = await fs.promises.readFile( + path.join(directoryPath, 'BarController-method-action-types.ts'), + 'utf8', + ); + expect(content).toBe(`/** + * This file is auto generated. + * Do not edit manually. + */ + +import type { BarController } from './BarController'; + +export type BarControllerEnableAction = { + type: \`BarController:enable\`; + handler: BarController['enable']; +}; + +export type BarControllerDisableAction = { + type: \`BarController:disable\`; + handler: BarController['disable']; +}; + +export type BarControllerIsEnabledAction = { + type: \`BarController:isEnabled\`; + handler: BarController['isEnabled']; +}; + +/** + * Union of all BarController action types. + */ +export type BarControllerMethodActions = BarControllerEnableAction | BarControllerDisableAction | BarControllerIsEnabledAction; +`); + }); + }); + + it('generates AuthService-method-action-types.ts for a service with @param and @returns JSDoc', async () => { + expect.assertions(3); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'AuthService.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['authenticate'] as const; + +class AuthService { + /** + * Authenticates the user. + * + * @param token - The auth token. + * @returns Whether authentication succeeded. + */ + authenticate(token: string) { + return token.length > 0; + } +} +`, + 'utf8', + ); + + const result = await runCLI(['--fix', directoryPath]); + expect(result.exitCode).toBe(0); + + const generatedFiles = await listGeneratedFiles(directoryPath); + expect(generatedFiles).toStrictEqual([ + 'AuthService-method-action-types.ts', + ]); + + const content = await fs.promises.readFile( + path.join(directoryPath, 'AuthService-method-action-types.ts'), + 'utf8', + ); + expect(content).toBe(`/** + * This file is auto generated. + * Do not edit manually. + */ + +import type { AuthService } from './AuthService'; + +/** + * Authenticates the user. + * + * @param token - The auth token. + * @returns Whether authentication succeeded. + */ +export type AuthServiceAuthenticateAction = { + type: \`AuthService:authenticate\`; + handler: AuthService['authenticate']; +}; + +/** + * Union of all AuthService action types. + */ +export type AuthServiceMethodActions = AuthServiceAuthenticateAction; +`); + }); + }); + + it('generates separate files for both a controller and service in the same directory', async () => { + expect.assertions(8); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'MyController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doWork'] as const; +class MyController { + doWork() { return true; } +} +`, + 'utf8', + ); + await fs.promises.writeFile( + path.join(directoryPath, 'MyService.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['query'] as const; +class MyService { + query() { return []; } +} +`, + 'utf8', + ); + + const result = await runCLI(['--fix', directoryPath]); + expect(result.exitCode).toBe(0); + + const generatedFiles = await listGeneratedFiles(directoryPath); + expect(generatedFiles).toStrictEqual([ + 'MyController-method-action-types.ts', + 'MyService-method-action-types.ts', + ]); + + const controllerContent = await fs.promises.readFile( + path.join(directoryPath, 'MyController-method-action-types.ts'), + 'utf8', + ); + expect(controllerContent).toContain('MyControllerDoWorkAction'); + expect(controllerContent).toContain("handler: MyController['doWork']"); + expect(controllerContent).toContain('MyControllerMethodActions'); + + const serviceContent = await fs.promises.readFile( + path.join(directoryPath, 'MyService-method-action-types.ts'), + 'utf8', + ); + expect(serviceContent).toContain('MyServiceQueryAction'); + expect(serviceContent).toContain("handler: MyService['query']"); + expect(serviceContent).toContain('MyServiceMethodActions'); + }); + }); + + it('discovers and generates files for sources in nested subdirectories', async () => { + expect.assertions(4); + + await withinSandbox(async ({ directoryPath }) => { + const subDir = path.join(directoryPath, 'nested'); + await fs.promises.mkdir(subDir); + await fs.promises.writeFile( + path.join(subDir, 'NestedController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doNested'] as const; +class NestedController { + doNested() { return 'nested'; } +} +`, + 'utf8', + ); + + const result = await runCLI(['--fix', directoryPath]); + expect(result.exitCode).toBe(0); + + const generatedFiles = await listGeneratedFiles(directoryPath); + expect(generatedFiles).toStrictEqual([ + path.join('nested', 'NestedController-method-action-types.ts'), + ]); + + const content = await fs.promises.readFile( + path.join(subDir, 'NestedController-method-action-types.ts'), + 'utf8', + ); + expect(content).toContain('NestedControllerDoNestedAction'); + expect(content).toContain("handler: NestedController['doNested']"); + }); + }); + + it('warns and generates no files when no sources are found', async () => { + expect.assertions(3); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'empty.ts'), + 'export const foo = 1;', + 'utf8', + ); + + const result = await runCLI(['--fix', directoryPath]); + expect(result.exitCode).toBe(0); + expect(result.all).toContain('No controllers/services found'); + + const generatedFiles = await listGeneratedFiles(directoryPath); + expect(generatedFiles).toStrictEqual([]); + }); + }); + }); + + describe('--check', () => { + it('exits 0 when generated files are up to date', async () => { + expect.assertions(2); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'TestController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff'] as const; +class TestController { + doStuff() { return true; } +} +`, + 'utf8', + ); + + await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--check', directoryPath]); + + expect(result.exitCode).toBe(0); + expect(result.all).toContain('up to date'); + }); + }); + + it('exits 1 when generated files are out of date', async () => { + expect.assertions(2); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'TestController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff'] as const; +class TestController { + doStuff() { return true; } +} +`, + 'utf8', + ); + await fs.promises.writeFile( + path.join(directoryPath, 'TestController-method-action-types.ts'), + '// outdated\n', + 'utf8', + ); + + const result = await runCLI(['--check', directoryPath]); + + expect(result.exitCode).toBe(1); + expect(result.all).toContain('out of date'); + }); + }); + + it('exits 1 when generated files are missing', async () => { + expect.assertions(2); + + await withinSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'TestController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff'] as const; +class TestController { + doStuff() { return true; } +} +`, + 'utf8', + ); + + const result = await runCLI(['--check', directoryPath]); + + expect(result.exitCode).toBe(1); + expect(result.all).toContain('does not exist'); + }); + }); + }); + + describe('argument validation', () => { + it('exits 1 when neither --check nor --fix is provided', async () => { + expect.assertions(1); + + await withinSandbox(async ({ directoryPath }) => { + const result = await runCLI([directoryPath]); + expect(result.exitCode).toBe(1); + }); + }); + }); +}); diff --git a/packages/messenger-cli/src/cli.ts b/packages/messenger-cli/src/cli.ts new file mode 100644 index 00000000000..5fd021ebf5b --- /dev/null +++ b/packages/messenger-cli/src/cli.ts @@ -0,0 +1,139 @@ +#!/usr/bin/env node + +import yargs from 'yargs'; + +import { checkActionTypesFiles } from './check'; +import { generateAllActionTypesFiles } from './fix'; +import { findSourcesWithExposedMethods } from './parse-source'; +import type { ESLint } from './types'; + +type CommandLineArguments = { + check: boolean; + fix: boolean; + sourcePath: string; +}; + +/** + * Parses the given CLI arguments. + * + * @param args - The arguments to parse. + * @returns The parsed command line arguments. + */ +async function parseCommandLineArguments( + args: string[], +): Promise { + const { + check, + fix, + path: sourcePath, + } = await yargs(args) + .command( + '$0 [path]', + 'Generate method action types for controller and service messengers', + (yargsInstance) => { + yargsInstance.positional('path', { + type: 'string', + description: + 'Path to the folder where controllers/services are located', + default: 'src', + }); + }, + ) + .option('check', { + type: 'boolean', + description: 'Check if generated action type files are up to date', + default: false, + }) + .option('fix', { + type: 'boolean', + description: 'Generate/update action type files', + default: false, + }) + .help() + .check((argv) => { + if (!argv.check && !argv.fix) { + throw new Error('Either --check or --fix must be provided.\n'); + } + return true; + }).argv; + + return { + check, + fix, + sourcePath: sourcePath as string, + }; +} + +/** + * Attempt to load ESLint from the current project. Returns null if unavailable. + * + * @returns An ESLint object with instance and static methods, or null if unavailable. + */ +async function loadESLint(): Promise { + try { + const { ESLint: ESLintClass } = await import('eslint'); + const instance = new ESLintClass({ + fix: true, + errorOnUnmatchedPattern: false, + }); + return { + instance, + eslintClass: ESLintClass, + }; + } catch { + console.warn( + 'āš ļø ESLint could not be loaded. Generated files will not be formatted.', + ); + return null; + } +} + +/** + * Main entry point for the CLI. + */ +async function main(): Promise { + const { fix, sourcePath } = await parseCommandLineArguments( + globalThis.process.argv.slice(2), + ); + + console.log( + 'šŸ” Searching for controllers/services with MESSENGER_EXPOSED_METHODS...', + ); + + const sources = await findSourcesWithExposedMethods(sourcePath); + + if (sources.length === 0) { + console.log( + 'āš ļø No controllers/services found with MESSENGER_EXPOSED_METHODS', + ); + return; + } + + console.log( + `šŸ“¦ Found ${sources.length} controller(s)/service(s) with exposed methods`, + ); + + const eslint = await loadESLint(); + + if (fix) { + const success = await generateAllActionTypesFiles(sources, eslint); + if (success) { + console.log('\nšŸŽ‰ All action types generated successfully!'); + } else { + // eslint-disable-next-line no-restricted-globals + process.exitCode = 1; + } + } else { + const success = await checkActionTypesFiles(sources, eslint); + if (!success) { + // eslint-disable-next-line no-restricted-globals + process.exitCode = 1; + } + } +} + +main().catch((error) => { + console.error('āŒ Script failed:', error); + // eslint-disable-next-line no-restricted-globals + process.exitCode = 1; +}); diff --git a/packages/messenger-cli/src/fix.test.ts b/packages/messenger-cli/src/fix.test.ts new file mode 100644 index 00000000000..6a318da162f --- /dev/null +++ b/packages/messenger-cli/src/fix.test.ts @@ -0,0 +1,146 @@ +import { createSandbox } from '@metamask/utils/node'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +import { generateAllActionTypesFiles } from './fix'; +import { generateActionTypesContent } from './generate-content'; +import type { SourceInfo } from './parse-source'; + +const { withinSandbox } = createSandbox('messenger/fix-action-types'); + +describe('generateAllActionTypesFiles', () => { + it('generates files for controllers (no ESLint)', async () => { + expect.assertions(1); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + await generateAllActionTypesFiles([controller], null); + consoleSpy.mockRestore(); + + const outputFile = path.join( + directoryPath, + 'TestController-method-action-types.ts', + ); + const content = await fs.promises.readFile(outputFile, 'utf8'); + const expected = generateActionTypesContent(controller); + + expect(content).toBe(expected); + }); + }); + + it('generates files for multiple controllers', async () => { + expect.assertions(2); + + await withinSandbox(async ({ directoryPath }) => { + const controllers: SourceInfo[] = [ + { + name: 'FooController', + filePath: path.join(directoryPath, 'FooController.ts'), + methods: [{ name: 'doFoo', jsDoc: '' }], + }, + { + name: 'BarService', + filePath: path.join(directoryPath, 'BarService.ts'), + methods: [{ name: 'doBar', jsDoc: '' }], + }, + ]; + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + await generateAllActionTypesFiles(controllers, null); + consoleSpy.mockRestore(); + + const fooFile = path.join( + directoryPath, + 'FooController-method-action-types.ts', + ); + const barFile = path.join( + directoryPath, + 'BarService-method-action-types.ts', + ); + + const fooContent = await fs.promises.readFile(fooFile, 'utf8'); + const barContent = await fs.promises.readFile(barFile, 'utf8'); + + expect(fooContent).toContain('FooController'); + expect(barContent).toContain('BarService'); + }); + }); + + it('invokes ESLint when provided', async () => { + expect.assertions(3); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + const mockEslint = { + instance: { lintFiles: jest.fn().mockResolvedValue([]) }, + eslintClass: { + outputFixes: jest.fn().mockResolvedValue(undefined), + getErrorResults: jest.fn().mockReturnValue([]), + }, + }; + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + await generateAllActionTypesFiles([controller], mockEslint); + consoleSpy.mockRestore(); + + expect(mockEslint.instance.lintFiles).toHaveBeenCalledWith([ + path.join(directoryPath, 'TestController-method-action-types.ts'), + ]); + expect(mockEslint.eslintClass.outputFixes).toHaveBeenCalled(); + expect(mockEslint.eslintClass.getErrorResults).toHaveBeenCalled(); + }); + }); + + it('returns false when ESLint reports errors', async () => { + expect.assertions(2); + + await withinSandbox(async ({ directoryPath }) => { + const controller: SourceInfo = { + name: 'TestController', + filePath: path.join(directoryPath, 'TestController.ts'), + methods: [{ name: 'doStuff', jsDoc: '' }], + }; + + const mockEslint = { + instance: { + lintFiles: jest.fn().mockResolvedValue([{ filePath: 'test.ts' }]), + }, + eslintClass: { + outputFixes: jest.fn().mockResolvedValue(undefined), + getErrorResults: jest + .fn() + .mockReturnValue([{ filePath: 'test.ts', messages: ['err'] }]), + }, + }; + + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + const result = await generateAllActionTypesFiles( + [controller], + mockEslint, + ); + + expect(result).toBe(false); + expect(consoleErrorSpy).toHaveBeenCalledWith( + 'āŒ ESLint errors:', + expect.anything(), + ); + + consoleSpy.mockRestore(); + consoleErrorSpy.mockRestore(); + }); + }); +}); diff --git a/packages/messenger-cli/src/fix.ts b/packages/messenger-cli/src/fix.ts new file mode 100644 index 00000000000..25e0f3a9711 --- /dev/null +++ b/packages/messenger-cli/src/fix.ts @@ -0,0 +1,50 @@ +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +import { generateActionTypesContent } from './generate-content'; +import type { SourceInfo } from './parse-source'; +import type { ESLint } from './types'; + +/** + * Generates action types files for all controllers/services. + * + * @param sources - Array of source information objects. + * @param eslint - Optional ESLint instance and static methods for formatting. + * @returns Whether all files were generated successfully. + */ +export async function generateAllActionTypesFiles( + sources: SourceInfo[], + eslint: ESLint | null, +): Promise { + const outputFiles: string[] = []; + + for (const source of sources) { + console.log(`\nšŸ”§ Processing ${source.name}...`); + const outputDir = path.dirname(source.filePath); + const baseFileName = path.basename(source.filePath, '.ts'); + const outputFile = path.join( + outputDir, + `${baseFileName}-method-action-types.ts`, + ); + + const generatedContent = generateActionTypesContent(source); + await fs.promises.writeFile(outputFile, generatedContent, 'utf8'); + outputFiles.push(outputFile); + console.log(`āœ… Generated action types for ${source.name}`); + } + + if (outputFiles.length > 0 && eslint) { + console.log('\nšŸ“ Running ESLint on generated files...'); + + const results = await eslint.instance.lintFiles(outputFiles); + await eslint.eslintClass.outputFixes(results); + const errors = eslint.eslintClass.getErrorResults(results); + if (errors.length > 0) { + console.error('āŒ ESLint errors:', errors); + return false; + } + console.log('āœ… ESLint formatting applied'); + } + + return true; +} diff --git a/packages/messenger-cli/src/generate-content.test.ts b/packages/messenger-cli/src/generate-content.test.ts new file mode 100644 index 00000000000..4636869b4d1 --- /dev/null +++ b/packages/messenger-cli/src/generate-content.test.ts @@ -0,0 +1,84 @@ +import { generateActionTypesContent } from './generate-content'; +import type { SourceInfo } from './parse-source'; + +describe('generateActionTypesContent', () => { + it('generates action types for a controller with one method', () => { + const controller: SourceInfo = { + name: 'FooController', + filePath: '/some/path/FooController.ts', + + methods: [ + { + name: 'doSomething', + jsDoc: '', + signature: 'doSomething', + }, + ], + }; + + const result = generateActionTypesContent(controller); + + expect(result).toContain('This file is auto generated.'); + expect(result).toContain( + "import type { FooController } from './FooController';", + ); + expect(result).toContain('export type FooControllerDoSomethingAction = {'); + expect(result).toContain('type: `FooController:doSomething`;'); + expect(result).toContain("handler: FooController['doSomething'];"); + expect(result).toContain( + 'export type FooControllerMethodActions = FooControllerDoSomethingAction;', + ); + }); + + it('generates action types for a controller with multiple methods', () => { + const controller: SourceInfo = { + name: 'BarController', + filePath: '/some/path/BarController.ts', + + methods: [ + { name: 'methodA', jsDoc: '' }, + { name: 'methodB', jsDoc: '' }, + ], + }; + + const result = generateActionTypesContent(controller); + + expect(result).toContain('export type BarControllerMethodAAction = {'); + expect(result).toContain('export type BarControllerMethodBAction = {'); + expect(result).toContain( + 'export type BarControllerMethodActions = BarControllerMethodAAction | BarControllerMethodBAction;', + ); + }); + + it('includes JSDoc comments when present', () => { + const controller: SourceInfo = { + name: 'FooController', + filePath: '/some/path/FooController.ts', + + methods: [ + { + name: 'doSomething', + jsDoc: '/**\n * Does something.\n */', + signature: 'doSomething', + }, + ], + }; + + const result = generateActionTypesContent(controller); + + expect(result).toContain('/**\n * Does something.\n */'); + }); + + it('generates no union type for controllers with no methods', () => { + const controller: SourceInfo = { + name: 'EmptyController', + filePath: '/some/path/EmptyController.ts', + + methods: [], + }; + + const result = generateActionTypesContent(controller); + + expect(result).not.toContain('EmptyControllerMethodActions'); + }); +}); diff --git a/packages/messenger-cli/src/generate-content.ts b/packages/messenger-cli/src/generate-content.ts new file mode 100644 index 00000000000..88fda26fba2 --- /dev/null +++ b/packages/messenger-cli/src/generate-content.ts @@ -0,0 +1,53 @@ +import * as path from 'node:path'; + +import type { SourceInfo } from './parse-source'; + +/** + * Generates the content for the action types file. + * + * @param source - The source information object (controller or service). + * @returns The content for the action types file. + */ +export function generateActionTypesContent(source: SourceInfo): string { + const baseFileName = path.basename(source.filePath, '.ts'); + const sourceImportPath = `./${baseFileName}`; + + let content = `/** + * This file is auto generated. + * Do not edit manually. + */ + +import type { ${source.name} } from '${sourceImportPath}'; + +`; + + const actionTypeNames: string[] = []; + + for (const method of source.methods) { + const capitalizedName = + method.name.charAt(0).toUpperCase() + method.name.slice(1); + const actionTypeName = `${source.name}${capitalizedName}Action`; + const actionString = `${source.name}:${method.name}`; + + actionTypeNames.push(actionTypeName); + + if (method.jsDoc) { + content += `${method.jsDoc}\n`; + } + + content += `export type ${actionTypeName} = { + type: \`${actionString}\`; + handler: ${source.name}['${method.name}']; +};\n\n`; + } + + if (actionTypeNames.length > 0) { + const unionTypeName = `${source.name}MethodActions`; + content += `/** + * Union of all ${source.name} action types. + */ +export type ${unionTypeName} = ${actionTypeNames.join(' | ')};\n`; + } + + return `${content.trimEnd()}\n`; +} diff --git a/packages/messenger-cli/src/index.ts b/packages/messenger-cli/src/index.ts new file mode 100644 index 00000000000..4b4086a97c2 --- /dev/null +++ b/packages/messenger-cli/src/index.ts @@ -0,0 +1,6 @@ +export { checkActionTypesFiles } from './check'; +export { generateAllActionTypesFiles } from './fix'; +export { generateActionTypesContent } from './generate-content'; +export { findSourcesWithExposedMethods, parseSourceFile } from './parse-source'; +export type { SourceInfo, MethodInfo } from './parse-source'; +export type { ESLint } from './types'; diff --git a/packages/messenger-cli/src/parse-source.test.ts b/packages/messenger-cli/src/parse-source.test.ts new file mode 100644 index 00000000000..80366d4994a --- /dev/null +++ b/packages/messenger-cli/src/parse-source.test.ts @@ -0,0 +1,624 @@ +import { createSandbox } from '@metamask/utils/node'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +import { findSourcesWithExposedMethods, parseSourceFile } from './parse-source'; + +const { withinSandbox: withinParseSourceSandbox } = createSandbox( + 'messenger/parse-source', +); +const { withinSandbox: withinFindControllersSandbox } = createSandbox( + 'messenger/find-controllers', +); + +describe('parseSourceFile', () => { + it('extracts controller info from a file with MESSENGER_EXPOSED_METHODS', async () => { + expect.assertions(1); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const controllerFile = path.join(directoryPath, 'TestController.ts'); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff'] as const; + +class TestController { + /** + * Does stuff. + */ + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).toStrictEqual({ + name: 'TestController', + filePath: controllerFile, + methods: [ + { + name: 'doStuff', + jsDoc: '/**\n * Does stuff.\n */', + }, + ], + }); + }); + }); + + it('returns null for a file without MESSENGER_EXPOSED_METHODS', async () => { + expect.assertions(1); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const controllerFile = path.join(directoryPath, 'NoExposed.ts'); + await fs.promises.writeFile( + controllerFile, + ` +class NoExposedController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).toBeNull(); + }); + }); + + it('returns null for a file with empty MESSENGER_EXPOSED_METHODS', async () => { + expect.assertions(1); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const controllerFile = path.join(directoryPath, 'EmptyController.ts'); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = [] as const; + +class EmptyController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).toBeNull(); + }); + }); + + it('handles array literals without as const', async () => { + expect.assertions(2); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const controllerFile = path.join( + directoryPath, + 'PlainArrayController.ts', + ); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff']; + +class PlainArrayController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).not.toBeNull(); + expect(result?.methods.map((method) => method.name)).toStrictEqual([ + 'doStuff', + ]); + }); + }); + + it('works with Service class names', async () => { + expect.assertions(2); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const serviceFile = path.join(directoryPath, 'TestService.ts'); + await fs.promises.writeFile( + serviceFile, + ` +const MESSENGER_EXPOSED_METHODS = ['fetchData'] as const; + +class TestService { + fetchData() { + return []; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(serviceFile); + + expect(result).not.toBeNull(); + expect(result?.name).toBe('TestService'); + }); + }); + + it('extracts methods without JSDoc', async () => { + expect.assertions(2); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const controllerFile = path.join(directoryPath, 'NoDocController.ts'); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff'] as const; + +class NoDocController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).not.toBeNull(); + expect(result?.methods[0].jsDoc).toBe(''); + }); + }); + + it('handles inherited methods via type checker', async () => { + expect.assertions(5); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + // Create a tsconfig.json so the type checker can work + await fs.promises.writeFile( + path.join(directoryPath, 'tsconfig.json'), + JSON.stringify({ + compilerOptions: { + target: 'ES2020', + module: 'commonjs', + strict: true, + }, + include: ['./*.ts'], + }), + 'utf8', + ); + + await fs.promises.writeFile( + path.join(directoryPath, 'BaseController.ts'), + ` +export class BaseController { + /** + * Base method. + */ + baseMethod() { + return 'base'; + } +} +`, + 'utf8', + ); + + const controllerFile = path.join(directoryPath, 'ChildController.ts'); + await fs.promises.writeFile( + controllerFile, + ` +import { BaseController } from './BaseController'; + +const MESSENGER_EXPOSED_METHODS = ['doStuff', 'baseMethod'] as const; + +class ChildController extends BaseController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).not.toBeNull(); + expect(result?.methods).toHaveLength(2); + expect(result?.methods[0].name).toBe('doStuff'); + expect(result?.methods[1].name).toBe('baseMethod'); + expect(result?.methods[1].jsDoc).toContain('Base method.'); + }); + }); + + it('handles inherited methods without JSDoc', async () => { + expect.assertions(4); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'tsconfig.json'), + JSON.stringify({ + compilerOptions: { + target: 'ES2020', + module: 'commonjs', + strict: true, + }, + include: ['./*.ts'], + }), + 'utf8', + ); + + await fs.promises.writeFile( + path.join(directoryPath, 'BaseNoDoc.ts'), + ` +export class BaseNoDoc { + baseMethod() { + return 'base'; + } +} +`, + 'utf8', + ); + + const controllerFile = path.join( + directoryPath, + 'ChildNoDocController.ts', + ); + await fs.promises.writeFile( + controllerFile, + ` +import { BaseNoDoc } from './BaseNoDoc'; + +const MESSENGER_EXPOSED_METHODS = ['doStuff', 'baseMethod'] as const; + +class ChildNoDocController extends BaseNoDoc { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).not.toBeNull(); + expect(result?.methods).toHaveLength(2); + expect(result?.methods[1].name).toBe('baseMethod'); + // Method without JSDoc should have empty string + expect(result?.methods[1].jsDoc).toBe(''); + }); + }); + + it('handles exposed method not found in hierarchy', async () => { + expect.assertions(4); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'tsconfig.json'), + JSON.stringify({ + compilerOptions: { + target: 'ES2020', + module: 'commonjs', + strict: true, + }, + include: ['./*.ts'], + }), + 'utf8', + ); + + const controllerFile = path.join( + directoryPath, + 'MissingMethodController.ts', + ); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff', 'nonExistentMethod'] as const; + +class MissingMethodController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).not.toBeNull(); + expect(result?.methods).toHaveLength(2); + expect(result?.methods[1].name).toBe('nonExistentMethod'); + expect(result?.methods[1].jsDoc).toBe(''); + }); + }); + + it('formats JSDoc with empty middle lines', async () => { + expect.assertions(4); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const controllerFile = path.join( + directoryPath, + 'EmptyLineDocController.ts', + ); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff'] as const; + +class EmptyLineDocController { + /** + * First line. + * + * After empty line. + */ + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const result = await parseSourceFile(controllerFile); + + expect(result).not.toBeNull(); + expect(result?.methods[0].jsDoc).toContain(' *\n'); + expect(result?.methods[0].jsDoc).toContain(' * First line.'); + expect(result?.methods[0].jsDoc).toContain(' * After empty line.'); + }); + }); + + it('extracts JSDoc with non-standard middle lines', async () => { + expect.assertions(3); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + const controllerFile = path.join(directoryPath, 'WeirdDocController.ts'); + // Write file with a JSDoc containing a line without * prefix and an empty line without * prefix + const source = [ + '', + "const MESSENGER_EXPOSED_METHODS = ['doStuff'] as const;", + '', + 'class WeirdDocController {', + ' /**', + ' This line has no asterisk prefix.', + ' ', + ' */', + ' doStuff() {', + ' return true;', + ' }', + '}', + '', + ].join('\n'); + await fs.promises.writeFile(controllerFile, source, 'utf8'); + + const result = await parseSourceFile(controllerFile); + + expect(result).not.toBeNull(); + expect(result?.methods[0].jsDoc).toContain( + ' * This line has no asterisk prefix.', + ); + // The empty line (only whitespace, no *) should become ' *' + expect(result?.methods[0].jsDoc).toContain(' *\n'); + }); + }); + + it('handles inherited methods with malformed tsconfig', async () => { + expect.assertions(2); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + // Write an invalid tsconfig to trigger readConfigFile error + await fs.promises.writeFile( + path.join(directoryPath, 'tsconfig.json'), + 'this is not valid json', + 'utf8', + ); + + const controllerFile = path.join( + directoryPath, + 'BadTsconfigController.ts', + ); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff', 'inherited'] as const; + +class BadTsconfigController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + const result = await parseSourceFile(controllerFile); + + expect(result).toBeNull(); + expect(consoleErrorSpy).toHaveBeenCalled(); + + consoleErrorSpy.mockRestore(); + }); + }); + + it('handles inherited methods when tsconfig is missing', async () => { + expect.assertions(2); + + await withinParseSourceSandbox(async ({ directoryPath }) => { + // No tsconfig.json in directoryPath — createProgramForFile should fail with assert + const controllerFile = path.join( + directoryPath, + 'NoTsconfigController.ts', + ); + await fs.promises.writeFile( + controllerFile, + ` +const MESSENGER_EXPOSED_METHODS = ['doStuff', 'inheritedMethod'] as const; + +class NoTsconfigController { + doStuff() { + return true; + } +} +`, + 'utf8', + ); + + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + const result = await parseSourceFile(controllerFile); + + // Should return null because assert fails when type checker can't be created + expect(result).toBeNull(); + expect(consoleErrorSpy).toHaveBeenCalled(); + + consoleErrorSpy.mockRestore(); + }); + }); + + it('returns null and logs error for invalid file', async () => { + expect.assertions(2); + + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + + const result = await parseSourceFile('/nonexistent/file.ts'); + + expect(result).toBeNull(); + expect(consoleErrorSpy).toHaveBeenCalled(); + consoleErrorSpy.mockRestore(); + }); +}); + +describe('findSourcesWithExposedMethods', () => { + it('finds controllers with MESSENGER_EXPOSED_METHODS in a directory', async () => { + expect.assertions(2); + + await withinFindControllersSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'FooController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doFoo'] as const; +class FooController { + doFoo() { return 'foo'; } +} +`, + 'utf8', + ); + + await fs.promises.writeFile( + path.join(directoryPath, 'BarController.ts'), + ` +class BarController { + doBar() { return 'bar'; } +} +`, + 'utf8', + ); + + const result = await findSourcesWithExposedMethods(directoryPath); + + expect(result).toHaveLength(1); + expect(result[0].name).toBe('FooController'); + }); + }); + + it('skips test files', async () => { + expect.assertions(1); + + await withinFindControllersSandbox(async ({ directoryPath }) => { + await fs.promises.writeFile( + path.join(directoryPath, 'FooController.test.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doFoo'] as const; +class FooController { + doFoo() { return 'foo'; } +} +`, + 'utf8', + ); + + const result = await findSourcesWithExposedMethods(directoryPath); + + expect(result).toHaveLength(0); + }); + }); + + it('finds sources in nested subdirectories', async () => { + expect.assertions(2); + + await withinFindControllersSandbox(async ({ directoryPath }) => { + const subDir = path.join(directoryPath, 'nested'); + await fs.promises.mkdir(subDir); + + await fs.promises.writeFile( + path.join(subDir, 'NestedController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doNested'] as const; +class NestedController { + doNested() { return 'nested'; } +} +`, + 'utf8', + ); + + const result = await findSourcesWithExposedMethods(directoryPath); + + expect(result).toHaveLength(1); + expect(result[0].name).toBe('NestedController'); + }); + }); + + it('skips excluded directories like node_modules', async () => { + expect.assertions(1); + + await withinFindControllersSandbox(async ({ directoryPath }) => { + const nodeModulesDir = path.join(directoryPath, 'node_modules'); + await fs.promises.mkdir(nodeModulesDir); + + await fs.promises.writeFile( + path.join(nodeModulesDir, 'HiddenController.ts'), + ` +const MESSENGER_EXPOSED_METHODS = ['doHidden'] as const; +class HiddenController { + doHidden() { return 'hidden'; } +} +`, + 'utf8', + ); + + const result = await findSourcesWithExposedMethods(directoryPath); + + expect(result).toHaveLength(0); + }); + }); + + it('throws an error when the path is not a directory', async () => { + await expect( + findSourcesWithExposedMethods('/nonexistent/path'), + ).rejects.toThrow('The specified path is not a directory'); + }); + + it('re-throws non-ENOENT errors from isDirectory', async () => { + const statSpy = jest + .spyOn(fs.promises, 'stat') + .mockRejectedValue( + Object.assign(new Error('EACCES'), { code: 'EACCES' }), + ); + + await expect(findSourcesWithExposedMethods('/some/path')).rejects.toThrow( + 'EACCES', + ); + + statSpy.mockRestore(); + }); +}); diff --git a/packages/messenger-cli/src/parse-source.ts b/packages/messenger-cli/src/parse-source.ts new file mode 100644 index 00000000000..133ad6ce361 --- /dev/null +++ b/packages/messenger-cli/src/parse-source.ts @@ -0,0 +1,439 @@ +import { assert, hasProperty, isObject } from '@metamask/utils'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import type { + ArrayLiteralExpression, + ClassDeclaration, + MethodDeclaration, + Node as TSNode, + Program, + SourceFile, + Type, +} from 'typescript'; +import { + ScriptTarget, + createProgram, + createSourceFile, + findConfigFile, + forEachChild, + getJSDocCommentsAndTags, + isArrayLiteralExpression, + isAsExpression, + isClassDeclaration, + isIdentifier, + isJSDoc, + isMethodDeclaration, + isStringLiteral, + isVariableStatement, + parseJsonConfigFileContent, + readConfigFile, + sys, +} from 'typescript'; + +export type MethodInfo = { + name: string; + jsDoc: string; +}; + +export type SourceInfo = { + name: string; + filePath: string; + methods: MethodInfo[]; +}; + +type VisitorContext = { + exposedMethods: string[]; + className: string; + methods: MethodInfo[]; + sourceFile: SourceFile; +}; + +/** + * Extracts JSDoc comment from a method declaration. + * + * @param node - The method declaration node. + * @param source - The source file. + * @returns The JSDoc comment. + */ +function extractJSDoc(node: MethodDeclaration, source: SourceFile): string { + const jsDocTags = getJSDocCommentsAndTags(node); + if (jsDocTags.length === 0) { + return ''; + } + + const jsDoc = jsDocTags[0]; + if (isJSDoc(jsDoc)) { + const fullText = source.getFullText(); + const start = jsDoc.getFullStart(); + const end = jsDoc.getEnd(); + const rawJsDoc = fullText.substring(start, end).trim(); + return formatJSDoc(rawJsDoc); + } + + // istanbul ignore next: defensive check — getJSDocCommentsAndTags always returns JSDoc nodes + return ''; +} + +/** + * Formats JSDoc comments to have consistent indentation for the generated file. + * + * @param rawJsDoc - The raw JSDoc comment from the source. + * @returns The formatted JSDoc comment. + */ +function formatJSDoc(rawJsDoc: string): string { + const lines = rawJsDoc.split('\n'); + const formattedLines: string[] = []; + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + if (i === 0) { + formattedLines.push('/**'); + } else if (i === lines.length - 1) { + formattedLines.push(' */'); + } else { + const trimmed = line.trim(); + if (trimmed.startsWith('*')) { + const content = trimmed.substring(1).trim(); + formattedLines.push(content ? ` * ${content}` : ' *'); + } else { + formattedLines.push(trimmed ? ` * ${trimmed}` : ' *'); + } + } + } + + return formattedLines.join('\n'); +} + +/** + * Visits AST nodes to find exposed methods and controller/service class. + * + * @param context - The visitor context. + * @returns A function to visit nodes. + */ +function createASTVisitor(context: VisitorContext): (node: TSNode) => void { + function visitNode(node: TSNode): void { + if (isVariableStatement(node)) { + const declaration = node.declarationList.declarations[0]; + if ( + isIdentifier(declaration.name) && + declaration.name.text === 'MESSENGER_EXPOSED_METHODS' + ) { + if (declaration.initializer) { + let arrayExpression: ArrayLiteralExpression | undefined; + + if (isArrayLiteralExpression(declaration.initializer)) { + arrayExpression = declaration.initializer; + } else if ( + isAsExpression(declaration.initializer) && + isArrayLiteralExpression(declaration.initializer.expression) + ) { + arrayExpression = declaration.initializer.expression; + } + + if (arrayExpression) { + context.exposedMethods = arrayExpression.elements + .filter(isStringLiteral) + .map((element) => element.text); + } + } + } + } + + if (isClassDeclaration(node) && node.name) { + const classText = node.name.text; + if (classText.includes('Controller') || classText.includes('Service')) { + context.className = classText; + + const seenMethods = new Set(); + for (const member of node.members) { + if ( + isMethodDeclaration(member) && + member.name && + isIdentifier(member.name) + ) { + const methodName = member.name.text; + if ( + context.exposedMethods.includes(methodName) && + !seenMethods.has(methodName) + ) { + seenMethods.add(methodName); + const jsDoc = extractJSDoc(member, context.sourceFile); + context.methods.push({ + name: methodName, + jsDoc, + }); + } + } + } + } + } + + forEachChild(node, visitNode); + } + + return visitNode; +} + +/** + * Create a TypeScript program for the given file by locating the nearest + * tsconfig.json. + * + * @param filePath - Absolute path to the source file. + * @returns A TypeScript program, or null if no tsconfig was found. + */ +function createProgramForFile(filePath: string): Program | null { + const configPath = findConfigFile( + path.dirname(filePath), + sys.fileExists.bind(sys), + 'tsconfig.json', + ); + if (!configPath) { + return null; + } + + const { config, error } = readConfigFile(configPath, sys.readFile.bind(sys)); + + if (error) { + return null; + } + + const parsedConfig = parseJsonConfigFileContent( + config, + sys, + path.dirname(configPath), + ); + + return createProgram({ + rootNames: parsedConfig.fileNames, + options: parsedConfig.options, + }); +} + +/** + * Find a class declaration with the given name in a source file. + * + * @param source - The source file to search. + * @param className - The class name to look for. + * @returns The class declaration node, or null if not found. + */ +function findClassInSourceFile( + source: SourceFile, + className: string, +): ClassDeclaration | null { + return ( + source.statements.find( + (node): node is ClassDeclaration => + isClassDeclaration(node) && node.name?.text === className, + ) ?? // istanbul ignore next: class is always found when called from parseSourceFile + null + ); +} + +/** + * Search through the class hierarchy of a TypeScript type to find the + * declaration of a method with the given name. + * + * @param classType - The class type to search. + * @param methodName - The method name to look for. + * @returns The method declaration node, or null if not found. + */ +function findMethodInHierarchy( + classType: Type, + methodName: string, +): MethodDeclaration | null { + const symbol = classType.getProperty(methodName); + if (!symbol) { + return null; + } + + const declarations = symbol.getDeclarations(); + // istanbul ignore next: defensive check — symbols from getProperty always have declarations + if (!declarations) { + return null; + } + + for (const declaration of declarations) { + if (isMethodDeclaration(declaration)) { + return declaration; + } + } + + // istanbul ignore next: defensive fallback — property found but not a method declaration + return null; +} + +/** + * Check if a path is a directory. + * + * @param pathValue - The path to check. + * @returns True if the path is a directory, false otherwise. + */ +async function isDirectory(pathValue: string): Promise { + try { + const stats = await fs.promises.stat(pathValue); + return stats.isDirectory(); + } catch (error) { + if ( + isObject(error) && + hasProperty(error, 'code') && + error.code === 'ENOENT' + ) { + return false; + } + + throw error; + } +} + +/** + * Parses a source file to extract exposed methods and their metadata. + * + * @param filePath - Path to the controller/service file to parse. + * @returns Source information or null if parsing fails. + */ +export async function parseSourceFile( + filePath: string, +): Promise { + try { + const content = await fs.promises.readFile(filePath, 'utf8'); + const source = createSourceFile( + filePath, + content, + ScriptTarget.Latest, + true, + ); + + const context: VisitorContext = { + exposedMethods: [], + className: '', + methods: [], + sourceFile: source, + }; + + createASTVisitor(context)(source); + + if (context.exposedMethods.length === 0 || !context.className) { + return null; + } + + const foundMethodNames = new Set( + context.methods.map((method) => method.name), + ); + + const inheritedMethodNames = context.exposedMethods.filter( + (name) => !foundMethodNames.has(name), + ); + + if (inheritedMethodNames.length > 0) { + const program = createProgramForFile(filePath); + const checker = program?.getTypeChecker(); + const programSourceFile = program?.getSourceFile(filePath); + + assert( + checker, + `Type checker could not be created for "${filePath}". Ensure a valid tsconfig.json is present.`, + ); + + assert( + programSourceFile, + `Source file "${filePath}" not found in program.`, + ); + + const classNode = findClassInSourceFile( + programSourceFile, + context.className, + ); + + assert( + classNode, + `Class "${context.className}" not found in "${filePath}".`, + ); + + const classType = checker.getTypeAtLocation(classNode); + for (const methodName of inheritedMethodNames) { + const methodDeclaration = findMethodInHierarchy(classType, methodName); + + const jsDoc = methodDeclaration + ? extractJSDoc(methodDeclaration, methodDeclaration.getSourceFile()) + : ''; + context.methods.push({ name: methodName, jsDoc }); + } + } + + return { + name: context.className, + filePath, + methods: context.methods, + }; + } catch (error) { + console.error(`Error parsing ${filePath}:`, error); + return null; + } +} + +/** + * Recursively get all files in a directory and its subdirectories. + * + * @param directory - The directory to search. + * @returns An array of file paths. + */ +const EXCLUDED_DIRECTORIES = new Set([ + 'node_modules', + 'dist', + '.git', + 'coverage', +]); + +async function getFiles(directory: string): Promise { + const entries = await fs.promises.readdir(directory, { withFileTypes: true }); + const files = await Promise.all( + entries.map(async (entry) => { + const fullPath = path.join(directory, entry.name); + if (entry.isDirectory()) { + return EXCLUDED_DIRECTORIES.has(entry.name) + ? [] + : await getFiles(fullPath); + } + return fullPath; + }), + ); + + return files.flat(); +} + +/** + * Finds all source files that have MESSENGER_EXPOSED_METHODS constants. + * Searches recursively through subdirectories. + * + * @param sourcePath - Path to the folder where controllers/services are located. + * @returns A list of source information objects. + */ +export async function findSourcesWithExposedMethods( + sourcePath: string, +): Promise { + const srcPath = path.resolve(globalThis.process.cwd(), sourcePath); + const sources: SourceInfo[] = []; + + if (!(await isDirectory(srcPath))) { + throw new Error(`The specified path is not a directory: ${srcPath}`); + } + + const srcFiles = await getFiles(srcPath); + + for (const file of srcFiles) { + if (!file.endsWith('.ts') || file.endsWith('.test.ts')) { + continue; + } + + const content = await fs.promises.readFile(file, 'utf8'); + + if (content.includes('MESSENGER_EXPOSED_METHODS')) { + const sourceInfo = await parseSourceFile(file); + if (sourceInfo) { + sources.push(sourceInfo); + } + } + } + + return sources; +} diff --git a/packages/messenger-cli/src/types.ts b/packages/messenger-cli/src/types.ts new file mode 100644 index 00000000000..77ced93647c --- /dev/null +++ b/packages/messenger-cli/src/types.ts @@ -0,0 +1,6 @@ +import type { ESLint as eslintClass } from 'eslint'; + +export type ESLint = { + instance: eslintClass; + eslintClass: typeof eslintClass; +}; diff --git a/packages/messenger-cli/tsconfig.build.json b/packages/messenger-cli/tsconfig.build.json new file mode 100644 index 00000000000..02a0eea03fe --- /dev/null +++ b/packages/messenger-cli/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.packages.build.json", + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist", + "rootDir": "./src" + }, + "references": [], + "include": ["../../types", "./src"] +} diff --git a/packages/messenger-cli/tsconfig.json b/packages/messenger-cli/tsconfig.json new file mode 100644 index 00000000000..025ba2ef7f4 --- /dev/null +++ b/packages/messenger-cli/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.packages.json", + "compilerOptions": { + "baseUrl": "./" + }, + "references": [], + "include": ["../../types", "./src"] +} diff --git a/packages/messenger-cli/typedoc.json b/packages/messenger-cli/typedoc.json new file mode 100644 index 00000000000..c9da015dbf8 --- /dev/null +++ b/packages/messenger-cli/typedoc.json @@ -0,0 +1,7 @@ +{ + "entryPoints": ["./src/index.ts"], + "excludePrivate": true, + "hideGenerator": true, + "out": "docs", + "tsconfig": "./tsconfig.build.json" +} diff --git a/packages/messenger/CHANGELOG.md b/packages/messenger/CHANGELOG.md index 15e59ce3615..51458050e7c 100644 --- a/packages/messenger/CHANGELOG.md +++ b/packages/messenger/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Deprecated + +- Deprecate `generate-action-types` CLI tool and `messenger-generate-action-types` binary ([#8378](https://github.com/MetaMask/core/pull/8378)) + - The CLI has been extracted to `@metamask/messenger-cli`. Use that package instead. + ## [1.1.1] ### Fixed diff --git a/packages/messenger/src/generate-action-types/cli.ts b/packages/messenger/src/generate-action-types/cli.ts index 5fd021ebf5b..3020432195c 100644 --- a/packages/messenger/src/generate-action-types/cli.ts +++ b/packages/messenger/src/generate-action-types/cli.ts @@ -92,6 +92,10 @@ async function loadESLint(): Promise { * Main entry point for the CLI. */ async function main(): Promise { + console.warn( + 'āš ļø messenger-generate-action-types from @metamask/messenger is deprecated. Install @metamask/messenger-cli instead.', + ); + const { fix, sourcePath } = await parseCommandLineArguments( globalThis.process.argv.slice(2), ); diff --git a/packages/money-account-controller/package.json b/packages/money-account-controller/package.json index edd9e0e2f95..a6c744e5d5e 100644 --- a/packages/money-account-controller/package.json +++ b/packages/money-account-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/money-account-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/money-account-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -65,7 +64,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json index 473393ab74b..01f0d32b465 100644 --- a/packages/multichain-account-service/package.json +++ b/packages/multichain-account-service/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/multichain-account-service", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/multichain-account-service", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -79,7 +78,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/name-controller/package.json b/packages/name-controller/package.json index e58ab2e28fb..610209eb716 100644 --- a/packages/name-controller/package.json +++ b/packages/name-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/name-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/name-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", @@ -62,7 +61,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/network-controller/package.json b/packages/network-controller/package.json index 9d1135acc5d..a01a69e1c66 100644 --- a/packages/network-controller/package.json +++ b/packages/network-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/network-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/network-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -88,7 +87,6 @@ "nock": "^13.3.1", "node-fetch": "^2.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/network-enablement-controller/package.json b/packages/network-enablement-controller/package.json index 09e94775597..24559101941 100644 --- a/packages/network-enablement-controller/package.json +++ b/packages/network-enablement-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/network-enablement-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/network-enablement-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -66,7 +65,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/notification-services-controller/package.json b/packages/notification-services-controller/package.json index 0c2346663bb..3673f134d9f 100644 --- a/packages/notification-services-controller/package.json +++ b/packages/notification-services-controller/package.json @@ -92,7 +92,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/notification-services-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/notification-services-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -129,7 +128,6 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/permission-controller/package.json b/packages/permission-controller/package.json index 574372ed4a0..8411200a036 100644 --- a/packages/permission-controller/package.json +++ b/packages/permission-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/permission-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/permission-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -67,7 +66,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/permission-log-controller/package.json b/packages/permission-log-controller/package.json index 2756104f843..491af2bf8a2 100644 --- a/packages/permission-log-controller/package.json +++ b/packages/permission-log-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/permission-log-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/permission-log-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -63,7 +62,6 @@ "jest": "^29.7.0", "nanoid": "^3.3.8", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/perps-controller/package.json b/packages/perps-controller/package.json index 841feb4b8b8..4dc8a9706b6 100644 --- a/packages/perps-controller/package.json +++ b/packages/perps-controller/package.json @@ -43,7 +43,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/perps-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/perps-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -78,7 +77,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/phishing-controller/package.json b/packages/phishing-controller/package.json index 33f5e25d1c3..fe3af753502 100644 --- a/packages/phishing-controller/package.json +++ b/packages/phishing-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/phishing-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/phishing-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -66,7 +65,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/preferences-controller/package.json b/packages/preferences-controller/package.json index 0e0dfc3cb3c..d1fe4fb59c4 100644 --- a/packages/preferences-controller/package.json +++ b/packages/preferences-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/preferences-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/preferences-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -59,7 +58,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/profile-metrics-controller/package.json b/packages/profile-metrics-controller/package.json index bf2917ae8a6..b94eceba41f 100644 --- a/packages/profile-metrics-controller/package.json +++ b/packages/profile-metrics-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/profile-metrics-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/profile-metrics-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -68,7 +67,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/profile-sync-controller/package.json b/packages/profile-sync-controller/package.json index 2653edc3d7a..e2fcf665f8e 100644 --- a/packages/profile-sync-controller/package.json +++ b/packages/profile-sync-controller/package.json @@ -93,7 +93,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/profile-sync-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/profile-sync-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -130,7 +129,6 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/ramps-controller/package.json b/packages/ramps-controller/package.json index 95b493dbe4f..6b63dd8b49b 100644 --- a/packages/ramps-controller/package.json +++ b/packages/ramps-controller/package.json @@ -41,7 +41,6 @@ "changelog:update": "../../scripts/update-changelog.sh @metamask/ramps-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/ramps-controller", "dev": "node dev-watch.js", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -61,7 +60,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/remote-feature-flag-controller/package.json b/packages/remote-feature-flag-controller/package.json index 5783dadbe26..4d59eb07d34 100644 --- a/packages/remote-feature-flag-controller/package.json +++ b/packages/remote-feature-flag-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/remote-feature-flag-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/remote-feature-flag-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -63,7 +62,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/sample-controllers/package.json b/packages/sample-controllers/package.json index 6dd5fa9f987..a37b3821cb5 100644 --- a/packages/sample-controllers/package.json +++ b/packages/sample-controllers/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/sample-controllers", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/sample-controllers", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -65,7 +64,6 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 557dd75f812..c9fb1f77ce7 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/seedless-onboarding-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/seedless-onboarding-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -73,7 +72,6 @@ "jest-environment-node": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/selected-network-controller/package.json b/packages/selected-network-controller/package.json index dfe5892449d..b06b89c49ce 100644 --- a/packages/selected-network-controller/package.json +++ b/packages/selected-network-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/selected-network-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/selected-network-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -67,7 +66,6 @@ "lodash": "^4.17.21", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/shield-controller/package.json b/packages/shield-controller/package.json index fe981726440..99e84a36ab5 100644 --- a/packages/shield-controller/package.json +++ b/packages/shield-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/shield-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/shield-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -67,7 +66,6 @@ "jest": "^29.7.0", "lodash": "^4.17.21", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/signature-controller/package.json b/packages/signature-controller/package.json index d9ecb7f13c5..b5cb9aaacb4 100644 --- a/packages/signature-controller/package.json +++ b/packages/signature-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/signature-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/signature-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -70,7 +69,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/social-controllers/package.json b/packages/social-controllers/package.json index d82a76a8fc4..83271769498 100644 --- a/packages/social-controllers/package.json +++ b/packages/social-controllers/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/social-controllers", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/social-controllers", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/storage-service/package.json b/packages/storage-service/package.json index 702b7d6a148..4d665da6fd3 100644 --- a/packages/storage-service/package.json +++ b/packages/storage-service/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/storage-service", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/storage-service", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -58,7 +57,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/subscription-controller/package.json b/packages/subscription-controller/package.json index 69c132b4b46..6904c98f96c 100644 --- a/packages/subscription-controller/package.json +++ b/packages/subscription-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/subscription-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/subscription-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -64,7 +63,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/transaction-controller/package.json b/packages/transaction-controller/package.json index dff35d0d69d..c0582f95ed5 100644 --- a/packages/transaction-controller/package.json +++ b/packages/transaction-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/transaction-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/transaction-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", @@ -93,7 +92,6 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/transaction-pay-controller/package.json b/packages/transaction-pay-controller/package.json index 4f2800f269c..50312b3fcbf 100644 --- a/packages/transaction-pay-controller/package.json +++ b/packages/transaction-pay-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/transaction-pay-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/transaction-pay-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", @@ -78,7 +77,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/user-operation-controller/package.json b/packages/user-operation-controller/package.json index ef1c1d586b4..a8976ddac4b 100644 --- a/packages/user-operation-controller/package.json +++ b/packages/user-operation-controller/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/user-operation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/user-operation-controller", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", @@ -75,7 +74,6 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/scripts/create-package/package-template/package.json b/scripts/create-package/package-template/package.json index 3e62b61e574..4b0c39fc028 100644 --- a/scripts/create-package/package-template/package.json +++ b/scripts/create-package/package-template/package.json @@ -40,7 +40,6 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh PACKAGE_NAME", "changelog:validate": "../../scripts/validate-changelog.sh PACKAGE_NAME", - "generate-method-action-types": "tsx ../../packages/messenger/src/generate-action-types/cli.ts", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/teams.json b/teams.json index 7ac46551521..176c831c5af 100644 --- a/teams.json +++ b/teams.json @@ -46,6 +46,7 @@ "metamask/geolocation-controller": "team-core-platform", "metamask/controller-utils": "team-core-platform", "metamask/messenger": "team-core-platform", + "metamask/messenger-cli": "team-core-platform", "metamask/sample-controllers": "team-core-platform", "metamask/polling-controller": "team-core-platform", "metamask/preferences-controller": "team-core-platform", diff --git a/tsconfig.build.json b/tsconfig.build.json index 35740bcf709..b02f3a882f5 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -136,6 +136,9 @@ { "path": "./packages/message-manager/tsconfig.build.json" }, + { + "path": "./packages/messenger-cli/tsconfig.build.json" + }, { "path": "./packages/messenger/tsconfig.build.json" }, diff --git a/tsconfig.json b/tsconfig.json index bd03b3fc5f0..7eb3aadc457 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -131,6 +131,9 @@ { "path": "./packages/messenger" }, + { + "path": "./packages/messenger-cli" + }, { "path": "./packages/money-account-controller" }, diff --git a/yarn.lock b/yarn.lock index c4d4da4a428..a5af06a668a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2549,7 +2549,6 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2590,7 +2589,6 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2627,7 +2625,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2667,7 +2664,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2689,7 +2685,6 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2708,7 +2703,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2755,7 +2749,6 @@ __metadata: jest: "npm:^29.7.0" nanoid: "npm:^3.3.8" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2801,7 +2794,6 @@ __metadata: lodash: "npm:^4.17.21" p-limit: "npm:^3.1.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2872,7 +2864,6 @@ __metadata: reselect: "npm:^5.1.1" single-call-balance-checker-abi: "npm:^1.0.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2985,7 +2976,6 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3139,7 +3129,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3159,7 +3148,6 @@ __metadata: jest: "npm:^29.7.0" jest-environment-jsdom: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3183,7 +3171,6 @@ __metadata: nock: "npm:^13.3.1" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3232,7 +3219,6 @@ __metadata: nock: "npm:^13.3.1" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3252,7 +3238,6 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3317,7 +3302,6 @@ __metadata: jest: "npm:^29.7.0" jest-environment-jsdom: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3420,7 +3404,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3466,7 +3449,6 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3558,7 +3540,6 @@ __metadata: jest: "npm:^29.7.0" punycode: "npm:^2.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4031,7 +4012,6 @@ __metadata: jest-when: "npm:^3.4.2" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4063,7 +4043,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4083,7 +4062,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4300,7 +4278,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4332,6 +4309,29 @@ __metadata: languageName: unknown linkType: soft +"@metamask/messenger-cli@workspace:packages/messenger-cli": + version: 0.0.0-use.local + resolution: "@metamask/messenger-cli@workspace:packages/messenger-cli" + dependencies: + "@metamask/auto-changelog": "npm:^3.4.4" + "@metamask/utils": "npm:^11.9.0" + "@ts-bridge/cli": "npm:^0.6.4" + "@types/jest": "npm:^29.5.14" + "@types/yargs": "npm:^17.0.32" + deepmerge: "npm:^4.2.2" + eslint: "npm:^9.39.1" + execa: "npm:^5.0.0" + jest: "npm:^29.7.0" + ts-jest: "npm:^29.2.5" + typedoc: "npm:^0.25.13" + typedoc-plugin-missing-exports: "npm:^2.0.0" + typescript: "npm:~5.3.3" + yargs: "npm:^17.7.2" + bin: + messenger-action-types-codegen: ./dist/cli.mjs + languageName: unknown + linkType: soft + "@metamask/messenger@npm:^0.3.0": version: 0.3.0 resolution: "@metamask/messenger@npm:0.3.0" @@ -4391,7 +4391,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4431,7 +4430,6 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4552,7 +4550,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4599,7 +4596,6 @@ __metadata: node-fetch: "npm:^2.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4628,7 +4624,6 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4677,7 +4672,6 @@ __metadata: nock: "npm:^13.3.1" semver: "npm:^7.6.3" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4726,7 +4720,6 @@ __metadata: jest: "npm:^29.7.0" nanoid: "npm:^3.3.8" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4750,7 +4743,6 @@ __metadata: jest: "npm:^29.7.0" nanoid: "npm:^3.3.8" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4785,7 +4777,6 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4813,7 +4804,6 @@ __metadata: nock: "npm:^13.3.1" punycode: "npm:^2.1.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4867,7 +4857,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4896,7 +4885,6 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4934,7 +4922,6 @@ __metadata: nock: "npm:^13.3.1" siwe: "npm:^2.3.2" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4980,7 +4967,6 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5047,7 +5033,6 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5091,7 +5076,6 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5135,7 +5119,6 @@ __metadata: jest-environment-node: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5163,7 +5146,6 @@ __metadata: lodash: "npm:^4.17.21" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5191,7 +5173,6 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5222,7 +5203,6 @@ __metadata: jsonschema: "npm:^1.4.1" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5408,7 +5388,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5433,7 +5412,6 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5518,7 +5496,6 @@ __metadata: lodash: "npm:^4.17.21" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5560,7 +5537,6 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5594,7 +5570,6 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" - tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" From b58e35a8fafa255034d69ddb2df62c3c7e009c75 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 16:49:20 +0200 Subject: [PATCH 02/14] refactor: remove public API exports from messenger-cli, CLI-only package --- packages/messenger-cli/package.json | 15 --------------- packages/messenger-cli/src/index.ts | 6 ------ yarn.config.cjs | 5 ++++- 3 files changed, 4 insertions(+), 22 deletions(-) delete mode 100644 packages/messenger-cli/src/index.ts diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json index a7dfd1a7611..73570242719 100644 --- a/packages/messenger-cli/package.json +++ b/packages/messenger-cli/package.json @@ -16,21 +16,6 @@ }, "license": "MIT", "sideEffects": false, - "exports": { - ".": { - "import": { - "types": "./dist/index.d.mts", - "default": "./dist/index.mjs" - }, - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - } - }, - "./package.json": "./package.json" - }, - "main": "./dist/index.cjs", - "types": "./dist/index.d.cts", "bin": { "messenger-action-types-codegen": "./dist/cli.mjs" }, diff --git a/packages/messenger-cli/src/index.ts b/packages/messenger-cli/src/index.ts deleted file mode 100644 index 4b4086a97c2..00000000000 --- a/packages/messenger-cli/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { checkActionTypesFiles } from './check'; -export { generateAllActionTypesFiles } from './fix'; -export { generateActionTypesContent } from './generate-content'; -export { findSourcesWithExposedMethods, parseSourceFile } from './parse-source'; -export type { SourceInfo, MethodInfo } from './parse-source'; -export type { ESLint } from './types'; diff --git a/yarn.config.cjs b/yarn.config.cjs index 6321d9137cd..9ddf65fa47b 100644 --- a/yarn.config.cjs +++ b/yarn.config.cjs @@ -117,7 +117,10 @@ module.exports = defineConfig({ // All non-root packages must set up ESM- and CommonJS-compatible // exports correctly. - if (workspace.ident !== '@metamask/foundryup') { + if ( + workspace.ident !== '@metamask/foundryup' && + workspace.ident !== '@metamask/messenger-cli' + ) { expectCorrectWorkspaceExports(workspace); } From 039bfac1698d5df8fdffdc5f7e12b22386703040 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 16:53:01 +0200 Subject: [PATCH 03/14] refactor: move eslint and typescript to peerDependencies Ensures the CLI uses the project's own eslint and typescript versions to avoid formatting mismatches in generated files. --- packages/messenger-cli/package.json | 6 ++++-- yarn.lock | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json index 73570242719..dc4313900f6 100644 --- a/packages/messenger-cli/package.json +++ b/packages/messenger-cli/package.json @@ -36,8 +36,6 @@ }, "dependencies": { "@metamask/utils": "^11.9.0", - "eslint": "^9.39.1", - "typescript": "~5.3.3", "yargs": "^17.7.2" }, "devDependencies": { @@ -52,6 +50,10 @@ "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0" }, + "peerDependencies": { + "eslint": ">=8", + "typescript": ">=5.0.0" + }, "engines": { "node": "^18.18 || >=20" }, diff --git a/yarn.lock b/yarn.lock index a5af06a668a..f57fe9052ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4319,14 +4319,15 @@ __metadata: "@types/jest": "npm:^29.5.14" "@types/yargs": "npm:^17.0.32" deepmerge: "npm:^4.2.2" - eslint: "npm:^9.39.1" execa: "npm:^5.0.0" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" - typescript: "npm:~5.3.3" yargs: "npm:^17.7.2" + peerDependencies: + eslint: ">=8" + typescript: ">=5.0.0" bin: messenger-action-types-codegen: ./dist/cli.mjs languageName: unknown From 1a63803d1a14f4e447fc1d92d04a62c1ae23b6d0 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 16:54:45 +0200 Subject: [PATCH 04/14] fix: remove typedoc from messenger-cli, CLI-only package has no API docs --- packages/messenger-cli/package.json | 5 +---- packages/messenger-cli/typedoc.json | 7 ------- yarn.lock | 2 -- 3 files changed, 1 insertion(+), 13 deletions(-) delete mode 100644 packages/messenger-cli/typedoc.json diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json index dc4313900f6..dba16a41860 100644 --- a/packages/messenger-cli/package.json +++ b/packages/messenger-cli/package.json @@ -25,7 +25,6 @@ "scripts": { "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references", "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean", - "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/messenger-cli", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/messenger-cli", "since-latest-release": "../../scripts/since-latest-release.sh", @@ -46,9 +45,7 @@ "deepmerge": "^4.2.2", "execa": "^5.0.0", "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "typedoc": "^0.25.13", - "typedoc-plugin-missing-exports": "^2.0.0" + "ts-jest": "^29.2.5" }, "peerDependencies": { "eslint": ">=8", diff --git a/packages/messenger-cli/typedoc.json b/packages/messenger-cli/typedoc.json deleted file mode 100644 index c9da015dbf8..00000000000 --- a/packages/messenger-cli/typedoc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "entryPoints": ["./src/index.ts"], - "excludePrivate": true, - "hideGenerator": true, - "out": "docs", - "tsconfig": "./tsconfig.build.json" -} diff --git a/yarn.lock b/yarn.lock index f57fe9052ed..5c98cac86a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4322,8 +4322,6 @@ __metadata: execa: "npm:^5.0.0" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" - typedoc: "npm:^0.25.13" - typedoc-plugin-missing-exports: "npm:^2.0.0" yargs: "npm:^17.7.2" peerDependencies: eslint: ">=8" From 612a07461e67a75cade8c8246757b86ebe20e5c8 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 17:01:13 +0200 Subject: [PATCH 05/14] fix: add eslint/typescript devDependencies and exclude messenger-cli from build:docs constraint --- packages/messenger-cli/package.json | 4 +++- yarn.config.cjs | 4 +++- yarn.lock | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json index dba16a41860..8649338c013 100644 --- a/packages/messenger-cli/package.json +++ b/packages/messenger-cli/package.json @@ -43,9 +43,11 @@ "@types/jest": "^29.5.14", "@types/yargs": "^17.0.32", "deepmerge": "^4.2.2", + "eslint": "^9.39.1", "execa": "^5.0.0", "jest": "^29.7.0", - "ts-jest": "^29.2.5" + "ts-jest": "^29.2.5", + "typescript": "~5.3.3" }, "peerDependencies": { "eslint": ">=8", diff --git a/yarn.config.cjs b/yarn.config.cjs index 9ddf65fa47b..78612e4699e 100644 --- a/yarn.config.cjs +++ b/yarn.config.cjs @@ -139,7 +139,9 @@ module.exports = defineConfig({ ); // All non-root packages must have the same "build:docs" script. - expectWorkspaceField(workspace, 'scripts.build:docs', 'typedoc'); + if (workspace.ident !== '@metamask/messenger-cli') { + expectWorkspaceField(workspace, 'scripts.build:docs', 'typedoc'); + } // No non-root packages may have a "prepack" script. workspace.unset('scripts.prepack'); diff --git a/yarn.lock b/yarn.lock index 5c98cac86a9..65cf74b1693 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4319,9 +4319,11 @@ __metadata: "@types/jest": "npm:^29.5.14" "@types/yargs": "npm:^17.0.32" deepmerge: "npm:^4.2.2" + eslint: "npm:^9.39.1" execa: "npm:^5.0.0" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + typescript: "npm:~5.3.3" yargs: "npm:^17.7.2" peerDependencies: eslint: ">=8" From ad844026e75ea5d8fcfd3a28014c35a0e5e199a8 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 17:21:56 +0200 Subject: [PATCH 06/14] refactor: rename CLI to messenger-action-types with --generate/--check flags - Rename binary from messenger-action-types-codegen to messenger-action-types - Rename --fix flag to --generate - Add per-package messenger-action-types:check and messenger-action-types:generate scripts - Update root scripts to use run instead of exec - Update CI, docs, and changelog to match --- .github/workflows/lint-build-test.yml | 2 +- docs/code-guidelines/controller-guidelines.md | 2 +- package.json | 8 ++++---- packages/account-tree-controller/package.json | 2 ++ packages/accounts-controller/package.json | 2 ++ packages/address-book-controller/package.json | 2 ++ packages/analytics-controller/package.json | 2 ++ .../package.json | 2 ++ packages/announcement-controller/package.json | 2 ++ packages/approval-controller/package.json | 2 ++ packages/assets-controller/package.json | 2 ++ packages/assets-controllers/package.json | 2 ++ packages/base-data-service/package.json | 2 ++ packages/claims-controller/package.json | 2 ++ packages/client-controller/package.json | 2 ++ packages/compliance-controller/package.json | 2 ++ .../config-registry-controller/package.json | 2 ++ packages/connectivity-controller/package.json | 2 ++ packages/core-backend/package.json | 2 ++ packages/delegation-controller/package.json | 2 ++ packages/earn-controller/package.json | 2 ++ packages/ens-controller/package.json | 2 ++ packages/gas-fee-controller/package.json | 2 ++ .../gator-permissions-controller/package.json | 2 ++ packages/geolocation-controller/package.json | 2 ++ packages/logging-controller/package.json | 2 ++ packages/messenger-cli/CHANGELOG.md | 2 +- packages/messenger-cli/package.json | 2 +- packages/messenger-cli/src/check.ts | 2 +- packages/messenger-cli/src/cli.test.ts | 18 +++++++++--------- packages/messenger-cli/src/cli.ts | 18 ++++++++++-------- packages/money-account-controller/package.json | 2 ++ .../multichain-account-service/package.json | 2 ++ packages/name-controller/package.json | 2 ++ packages/network-controller/package.json | 2 ++ .../network-enablement-controller/package.json | 2 ++ .../package.json | 2 ++ packages/permission-controller/package.json | 2 ++ .../permission-log-controller/package.json | 2 ++ packages/perps-controller/package.json | 2 ++ packages/phishing-controller/package.json | 2 ++ packages/preferences-controller/package.json | 2 ++ .../profile-metrics-controller/package.json | 2 ++ packages/profile-sync-controller/package.json | 2 ++ packages/ramps-controller/package.json | 2 ++ .../package.json | 2 ++ packages/sample-controllers/package.json | 2 ++ .../package.json | 2 ++ .../selected-network-controller/package.json | 2 ++ packages/shield-controller/package.json | 2 ++ packages/signature-controller/package.json | 2 ++ packages/social-controllers/package.json | 2 ++ packages/storage-service/package.json | 2 ++ packages/subscription-controller/package.json | 2 ++ packages/transaction-controller/package.json | 2 ++ .../transaction-pay-controller/package.json | 2 ++ .../user-operation-controller/package.json | 2 ++ .../package-template/package.json | 2 ++ yarn.lock | 2 +- 59 files changed, 129 insertions(+), 27 deletions(-) diff --git a/.github/workflows/lint-build-test.yml b/.github/workflows/lint-build-test.yml index 1632568ea35..98cffe9af7b 100644 --- a/.github/workflows/lint-build-test.yml +++ b/.github/workflows/lint-build-test.yml @@ -38,7 +38,7 @@ jobs: - constraints - lint:dependencies - lint:teams - - messenger-action-types-codegen:check + - messenger-action-types:check steps: - name: Checkout and setup environment uses: MetaMask/action-checkout-and-setup@v2 diff --git a/docs/code-guidelines/controller-guidelines.md b/docs/code-guidelines/controller-guidelines.md index 62c32334938..6367a1a50d7 100644 --- a/docs/code-guidelines/controller-guidelines.md +++ b/docs/code-guidelines/controller-guidelines.md @@ -457,7 +457,7 @@ Instead, you can follow this process: 1. Define a constant in your controller file called `MESSENGER_EXPOSED_METHODS`, listing the methods you want to expose. 2. Remove manual action registrations; instead, call `registerMethodActionHandlers` and pass `MESSENGER_EXPOSED_METHODS`. -3. Remove messenger action types; instead, run `yarn messenger-action-types-codegen`. This will create a file called `${ControllerName}-method-action-types.ts`, which exports a type called `${ControllerName}MethodActions`. +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`. 4. Import `${ControllerName}-method-action-types.ts` in your controller file, and add `${ControllerName}MethodActions` to `${ControllerName}Actions`. 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. diff --git a/package.json b/package.json index c1122986a89..4f206c5a0cb 100644 --- a/package.json +++ b/package.json @@ -21,16 +21,16 @@ "changelog:update": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:update", "changelog:validate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:validate", "create-package": "tsx scripts/create-package", - "lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn messenger-action-types-codegen --check", + "lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn messenger-action-types:check", "lint:dependencies": "depcheck && yarn dedupe --check", "lint:dependencies:fix": "depcheck && yarn dedupe", "lint:eslint": "yarn build:only-clean && NODE_OPTIONS='--max-old-space-size=6144' yarn eslint", - "lint:fix": "yarn lint:eslint --fix --prune-suppressions && echo && yarn lint:misc --write && yarn constraints --fix && yarn lint:dependencies:fix && yarn messenger-action-types-codegen --fix", + "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", "lint:misc": "prettier --no-error-on-unmatched-pattern '**/*.json' '**/*.md' '**/*.yml' '!.yarnrc.yml' '!merged-packages/**' --ignore-path .gitignore", "lint:misc:check": "yarn lint:misc --check", "lint:teams": "tsx scripts/lint-teams-json.ts", - "messenger-action-types-codegen": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose exec tsx ../../packages/messenger-cli/src/cli.ts", - "messenger-action-types-codegen:check": "yarn messenger-action-types-codegen --check", + "messenger-action-types:check": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run messenger-action-types:check", + "messenger-action-types:generate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run messenger-action-types:generate", "prepack": "./scripts/prepack.sh", "prepare-preview-builds": "./scripts/prepare-preview-builds.sh", "setup": "yarn install", diff --git a/packages/account-tree-controller/package.json b/packages/account-tree-controller/package.json index 56d0673903b..349dfa6a618 100644 --- a/packages/account-tree-controller/package.json +++ b/packages/account-tree-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/account-tree-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/account-tree-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index aa64793f9c4..265b6d6280d 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/accounts-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/accounts-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/address-book-controller/package.json b/packages/address-book-controller/package.json index 606f691db36..3431d871cae 100644 --- a/packages/address-book-controller/package.json +++ b/packages/address-book-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/address-book-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/address-book-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/analytics-controller/package.json b/packages/analytics-controller/package.json index aeb67f7a690..396973a3855 100644 --- a/packages/analytics-controller/package.json +++ b/packages/analytics-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/analytics-data-regulation-controller/package.json b/packages/analytics-data-regulation-controller/package.json index 85da3bb77a8..4e6187452f9 100644 --- a/packages/analytics-data-regulation-controller/package.json +++ b/packages/analytics-data-regulation-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-data-regulation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-data-regulation-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/announcement-controller/package.json b/packages/announcement-controller/package.json index 1d01b2a8b3f..2abed81878e 100644 --- a/packages/announcement-controller/package.json +++ b/packages/announcement-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/announcement-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/announcement-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/approval-controller/package.json b/packages/approval-controller/package.json index 09e22cdd415..1cbdb6f623b 100644 --- a/packages/approval-controller/package.json +++ b/packages/approval-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/approval-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/approval-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/assets-controller/package.json b/packages/assets-controller/package.json index f2baf8a9a05..9fdc5d65923 100644 --- a/packages/assets-controller/package.json +++ b/packages/assets-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/assets-controllers/package.json b/packages/assets-controllers/package.json index 7ecfc68e690..ddaf8433bca 100644 --- a/packages/assets-controllers/package.json +++ b/packages/assets-controllers/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controllers", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controllers", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/base-data-service/package.json b/packages/base-data-service/package.json index 9b4072feaad..48d35a687ea 100644 --- a/packages/base-data-service/package.json +++ b/packages/base-data-service/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/base-data-service", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/base-data-service", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "publish:preview": "yarn npm publish --tag preview", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", diff --git a/packages/claims-controller/package.json b/packages/claims-controller/package.json index 3584482d915..330b38df66a 100644 --- a/packages/claims-controller/package.json +++ b/packages/claims-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/claims-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/claims-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/client-controller/package.json b/packages/client-controller/package.json index 4c21ce7790e..f046782e015 100644 --- a/packages/client-controller/package.json +++ b/packages/client-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/client-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/client-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/compliance-controller/package.json b/packages/compliance-controller/package.json index 9f0ed4373de..6f027e84a02 100644 --- a/packages/compliance-controller/package.json +++ b/packages/compliance-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/compliance-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/compliance-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/config-registry-controller/package.json b/packages/config-registry-controller/package.json index 35ed4f93b8f..7c8f12a5212 100644 --- a/packages/config-registry-controller/package.json +++ b/packages/config-registry-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/config-registry-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/config-registry-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "publish:preview": "yarn npm publish --tag preview", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", diff --git a/packages/connectivity-controller/package.json b/packages/connectivity-controller/package.json index bff62281fc5..341bf5ea989 100644 --- a/packages/connectivity-controller/package.json +++ b/packages/connectivity-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/connectivity-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/connectivity-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/core-backend/package.json b/packages/core-backend/package.json index ad7ff6b4d5d..664532edc93 100644 --- a/packages/core-backend/package.json +++ b/packages/core-backend/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/core-backend", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/core-backend", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/delegation-controller/package.json b/packages/delegation-controller/package.json index c53a3aaac14..0d8a25d40f1 100644 --- a/packages/delegation-controller/package.json +++ b/packages/delegation-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/delegation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/delegation-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/earn-controller/package.json b/packages/earn-controller/package.json index 8e2cb901d27..31a5603c0c6 100644 --- a/packages/earn-controller/package.json +++ b/packages/earn-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/earn-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/earn-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/ens-controller/package.json b/packages/ens-controller/package.json index b1098a73188..401c4ac0417 100644 --- a/packages/ens-controller/package.json +++ b/packages/ens-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/ens-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/ens-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/gas-fee-controller/package.json b/packages/gas-fee-controller/package.json index f2ba1a67121..86bab7275f8 100644 --- a/packages/gas-fee-controller/package.json +++ b/packages/gas-fee-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/gas-fee-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/gas-fee-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/gator-permissions-controller/package.json b/packages/gator-permissions-controller/package.json index 7e7938cb781..70c9c5610f0 100644 --- a/packages/gator-permissions-controller/package.json +++ b/packages/gator-permissions-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/gator-permissions-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/gator-permissions-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/geolocation-controller/package.json b/packages/geolocation-controller/package.json index eda38b8b0b1..a35652241fe 100644 --- a/packages/geolocation-controller/package.json +++ b/packages/geolocation-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/geolocation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/geolocation-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/logging-controller/package.json b/packages/logging-controller/package.json index 033371d899f..42f55b4d588 100644 --- a/packages/logging-controller/package.json +++ b/packages/logging-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/logging-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/logging-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/messenger-cli/CHANGELOG.md b/packages/messenger-cli/CHANGELOG.md index 640b5a95550..7558ff7a52a 100644 --- a/packages/messenger-cli/CHANGELOG.md +++ b/packages/messenger-cli/CHANGELOG.md @@ -11,6 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Initial release, extracted from `@metamask/messenger` ([#8378](https://github.com/MetaMask/core/pull/8378)) - CLI tool for generating TypeScript action type files for controllers and services that define `MESSENGER_EXPOSED_METHODS`. - - Available as a CLI binary (`messenger-action-types-codegen`). + - Available as a CLI binary (`messenger-action-types`). [Unreleased]: https://github.com/MetaMask/core/ diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json index 8649338c013..64d3e75a16f 100644 --- a/packages/messenger-cli/package.json +++ b/packages/messenger-cli/package.json @@ -17,7 +17,7 @@ "license": "MIT", "sideEffects": false, "bin": { - "messenger-action-types-codegen": "./dist/cli.mjs" + "messenger-action-types": "./dist/cli.mjs" }, "files": [ "dist/" diff --git a/packages/messenger-cli/src/check.ts b/packages/messenger-cli/src/check.ts index 24fd1747695..b635fdacedc 100644 --- a/packages/messenger-cli/src/check.ts +++ b/packages/messenger-cli/src/check.ts @@ -106,7 +106,7 @@ export async function checkActionTypesFiles( if (hasErrors) { console.error('\nšŸ’„ Some action type files are out of date or missing.'); - console.error('Run `messenger-action-types-codegen --fix` to update them.'); + console.error('Run `messenger-action-types --generate` to update them.'); return false; } diff --git a/packages/messenger-cli/src/cli.test.ts b/packages/messenger-cli/src/cli.test.ts index 373c70fecee..bd7b658f14e 100644 --- a/packages/messenger-cli/src/cli.test.ts +++ b/packages/messenger-cli/src/cli.test.ts @@ -57,7 +57,7 @@ const { withinSandbox } = createSandbox('messenger/cli-functional'); jest.setTimeout(30_000); describe('generate-action-types CLI (functional)', () => { - describe('--fix', () => { + describe('--generate', () => { it('generates FooController-method-action-types.ts for a controller with multiple documented methods', async () => { expect.assertions(3); @@ -86,7 +86,7 @@ class FooController { 'utf8', ); - const result = await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--generate', directoryPath]); expect(result.exitCode).toBe(0); const generatedFiles = await listGeneratedFiles(directoryPath); @@ -152,7 +152,7 @@ class DataService { 'utf8', ); - const result = await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--generate', directoryPath]); expect(result.exitCode).toBe(0); const generatedFiles = await listGeneratedFiles(directoryPath); @@ -207,7 +207,7 @@ class BarController { 'utf8', ); - const result = await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--generate', directoryPath]); expect(result.exitCode).toBe(0); const generatedFiles = await listGeneratedFiles(directoryPath); @@ -273,7 +273,7 @@ class AuthService { 'utf8', ); - const result = await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--generate', directoryPath]); expect(result.exitCode).toBe(0); const generatedFiles = await listGeneratedFiles(directoryPath); @@ -336,7 +336,7 @@ class MyService { 'utf8', ); - const result = await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--generate', directoryPath]); expect(result.exitCode).toBe(0); const generatedFiles = await listGeneratedFiles(directoryPath); @@ -380,7 +380,7 @@ class NestedController { 'utf8', ); - const result = await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--generate', directoryPath]); expect(result.exitCode).toBe(0); const generatedFiles = await listGeneratedFiles(directoryPath); @@ -407,7 +407,7 @@ class NestedController { 'utf8', ); - const result = await runCLI(['--fix', directoryPath]); + const result = await runCLI(['--generate', directoryPath]); expect(result.exitCode).toBe(0); expect(result.all).toContain('No controllers/services found'); @@ -433,7 +433,7 @@ class TestController { 'utf8', ); - await runCLI(['--fix', directoryPath]); + await runCLI(['--generate', directoryPath]); const result = await runCLI(['--check', directoryPath]); expect(result.exitCode).toBe(0); diff --git a/packages/messenger-cli/src/cli.ts b/packages/messenger-cli/src/cli.ts index 5fd021ebf5b..5b687a4f75a 100644 --- a/packages/messenger-cli/src/cli.ts +++ b/packages/messenger-cli/src/cli.ts @@ -9,7 +9,7 @@ import type { ESLint } from './types'; type CommandLineArguments = { check: boolean; - fix: boolean; + generate: boolean; sourcePath: string; }; @@ -24,7 +24,7 @@ async function parseCommandLineArguments( ): Promise { const { check, - fix, + generate, path: sourcePath, } = await yargs(args) .command( @@ -44,22 +44,24 @@ async function parseCommandLineArguments( description: 'Check if generated action type files are up to date', default: false, }) - .option('fix', { + .option('generate', { type: 'boolean', description: 'Generate/update action type files', default: false, }) .help() .check((argv) => { - if (!argv.check && !argv.fix) { - throw new Error('Either --check or --fix must be provided.\n'); + if (!argv.check && !argv.generate) { + throw new Error( + 'Either --check or --generate must be provided.\n', + ); } return true; }).argv; return { check, - fix, + generate, sourcePath: sourcePath as string, }; } @@ -92,7 +94,7 @@ async function loadESLint(): Promise { * Main entry point for the CLI. */ async function main(): Promise { - const { fix, sourcePath } = await parseCommandLineArguments( + const { generate, sourcePath } = await parseCommandLineArguments( globalThis.process.argv.slice(2), ); @@ -115,7 +117,7 @@ async function main(): Promise { const eslint = await loadESLint(); - if (fix) { + if (generate) { const success = await generateAllActionTypesFiles(sources, eslint); if (success) { console.log('\nšŸŽ‰ All action types generated successfully!'); diff --git a/packages/money-account-controller/package.json b/packages/money-account-controller/package.json index a6c744e5d5e..c1c35b9a71d 100644 --- a/packages/money-account-controller/package.json +++ b/packages/money-account-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/money-account-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/money-account-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json index 01f0d32b465..47035c2c746 100644 --- a/packages/multichain-account-service/package.json +++ b/packages/multichain-account-service/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/multichain-account-service", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/multichain-account-service", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/name-controller/package.json b/packages/name-controller/package.json index 610209eb716..75cacf8ea06 100644 --- a/packages/name-controller/package.json +++ b/packages/name-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/name-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/name-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", diff --git a/packages/network-controller/package.json b/packages/network-controller/package.json index a01a69e1c66..361e7f63964 100644 --- a/packages/network-controller/package.json +++ b/packages/network-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/network-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/network-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/network-enablement-controller/package.json b/packages/network-enablement-controller/package.json index 24559101941..4acfd6d3b6d 100644 --- a/packages/network-enablement-controller/package.json +++ b/packages/network-enablement-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/network-enablement-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/network-enablement-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/notification-services-controller/package.json b/packages/notification-services-controller/package.json index 3673f134d9f..b428a74e8ff 100644 --- a/packages/notification-services-controller/package.json +++ b/packages/notification-services-controller/package.json @@ -92,6 +92,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/notification-services-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/notification-services-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/permission-controller/package.json b/packages/permission-controller/package.json index 8411200a036..610cc9cd0b4 100644 --- a/packages/permission-controller/package.json +++ b/packages/permission-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/permission-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/permission-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/permission-log-controller/package.json b/packages/permission-log-controller/package.json index 491af2bf8a2..0bf608c234b 100644 --- a/packages/permission-log-controller/package.json +++ b/packages/permission-log-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/permission-log-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/permission-log-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/perps-controller/package.json b/packages/perps-controller/package.json index 4dc8a9706b6..1b7234de9c8 100644 --- a/packages/perps-controller/package.json +++ b/packages/perps-controller/package.json @@ -43,6 +43,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/perps-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/perps-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/phishing-controller/package.json b/packages/phishing-controller/package.json index fe3af753502..9c3c4059ec0 100644 --- a/packages/phishing-controller/package.json +++ b/packages/phishing-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/phishing-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/phishing-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/preferences-controller/package.json b/packages/preferences-controller/package.json index d1fe4fb59c4..eee2d089edd 100644 --- a/packages/preferences-controller/package.json +++ b/packages/preferences-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/preferences-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/preferences-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/profile-metrics-controller/package.json b/packages/profile-metrics-controller/package.json index b94eceba41f..1048b7d88e0 100644 --- a/packages/profile-metrics-controller/package.json +++ b/packages/profile-metrics-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/profile-metrics-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/profile-metrics-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/profile-sync-controller/package.json b/packages/profile-sync-controller/package.json index e2fcf665f8e..e1c0862e2f6 100644 --- a/packages/profile-sync-controller/package.json +++ b/packages/profile-sync-controller/package.json @@ -93,6 +93,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/profile-sync-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/profile-sync-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/ramps-controller/package.json b/packages/ramps-controller/package.json index 6b63dd8b49b..e8781bb20ea 100644 --- a/packages/ramps-controller/package.json +++ b/packages/ramps-controller/package.json @@ -41,6 +41,8 @@ "changelog:update": "../../scripts/update-changelog.sh @metamask/ramps-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/ramps-controller", "dev": "node dev-watch.js", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/remote-feature-flag-controller/package.json b/packages/remote-feature-flag-controller/package.json index 4d59eb07d34..942f5144bb3 100644 --- a/packages/remote-feature-flag-controller/package.json +++ b/packages/remote-feature-flag-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/remote-feature-flag-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/remote-feature-flag-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/sample-controllers/package.json b/packages/sample-controllers/package.json index a37b3821cb5..32501669bd5 100644 --- a/packages/sample-controllers/package.json +++ b/packages/sample-controllers/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/sample-controllers", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/sample-controllers", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index c9fb1f77ce7..0f57e674d37 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/seedless-onboarding-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/seedless-onboarding-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/selected-network-controller/package.json b/packages/selected-network-controller/package.json index b06b89c49ce..66c1169bef0 100644 --- a/packages/selected-network-controller/package.json +++ b/packages/selected-network-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/selected-network-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/selected-network-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/shield-controller/package.json b/packages/shield-controller/package.json index 99e84a36ab5..35ddfe5eb42 100644 --- a/packages/shield-controller/package.json +++ b/packages/shield-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/shield-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/shield-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/signature-controller/package.json b/packages/signature-controller/package.json index b5cb9aaacb4..e2424948fb5 100644 --- a/packages/signature-controller/package.json +++ b/packages/signature-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/signature-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/signature-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/social-controllers/package.json b/packages/social-controllers/package.json index 83271769498..78cf78d3dd9 100644 --- a/packages/social-controllers/package.json +++ b/packages/social-controllers/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/social-controllers", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/social-controllers", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/storage-service/package.json b/packages/storage-service/package.json index 4d665da6fd3..599c15b23ec 100644 --- a/packages/storage-service/package.json +++ b/packages/storage-service/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/storage-service", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/storage-service", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/subscription-controller/package.json b/packages/subscription-controller/package.json index 6904c98f96c..8fcd5cda982 100644 --- a/packages/subscription-controller/package.json +++ b/packages/subscription-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/subscription-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/subscription-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/transaction-controller/package.json b/packages/transaction-controller/package.json index c0582f95ed5..ca0b6ebd98e 100644 --- a/packages/transaction-controller/package.json +++ b/packages/transaction-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/transaction-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/transaction-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/transaction-pay-controller/package.json b/packages/transaction-pay-controller/package.json index 50312b3fcbf..ddece9341a7 100644 --- a/packages/transaction-pay-controller/package.json +++ b/packages/transaction-pay-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/transaction-pay-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/transaction-pay-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", diff --git a/packages/user-operation-controller/package.json b/packages/user-operation-controller/package.json index a8976ddac4b..48ed53dd4b5 100644 --- a/packages/user-operation-controller/package.json +++ b/packages/user-operation-controller/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh @metamask/user-operation-controller", "changelog:validate": "../../scripts/validate-changelog.sh @metamask/user-operation-controller", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", diff --git a/scripts/create-package/package-template/package.json b/scripts/create-package/package-template/package.json index 4b0c39fc028..7b95549feb6 100644 --- a/scripts/create-package/package-template/package.json +++ b/scripts/create-package/package-template/package.json @@ -40,6 +40,8 @@ "build:docs": "typedoc", "changelog:update": "../../scripts/update-changelog.sh PACKAGE_NAME", "changelog:validate": "../../scripts/validate-changelog.sh PACKAGE_NAME", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/yarn.lock b/yarn.lock index 65cf74b1693..0f5d4699c07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4329,7 +4329,7 @@ __metadata: eslint: ">=8" typescript: ">=5.0.0" bin: - messenger-action-types-codegen: ./dist/cli.mjs + messenger-action-types: ./dist/cli.mjs languageName: unknown linkType: soft From b4bb26697c25c7193cdc4dee555fb08540c2a334 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 17:29:23 +0200 Subject: [PATCH 07/14] fix: restore lint:fix --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 47202adcb02..2cd4ae08408 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "lint:dependencies": "depcheck && yarn dedupe --check", "lint:dependencies:fix": "depcheck && yarn dedupe", "lint:eslint": "yarn build:only-clean && NODE_OPTIONS='--max-old-space-size=6144' yarn eslint", - "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", + "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", "lint:misc": "prettier --no-error-on-unmatched-pattern '**/*.json' '**/*.md' '**/*.yml' '!.yarnrc.yml' '!merged-packages/**' --ignore-path .gitignore", "lint:misc:check": "yarn lint:misc --check", "lint:teams": "tsx scripts/lint-teams-json.ts", From a8a5489d376e5ebf73dad7a0e71865cc2b42f0ec Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 19:20:38 +0200 Subject: [PATCH 08/14] fix: restore tsx devDependency in consumer packages --- packages/account-tree-controller/package.json | 1 + packages/accounts-controller/package.json | 1 + packages/address-book-controller/package.json | 1 + packages/analytics-controller/package.json | 1 + .../package.json | 1 + packages/announcement-controller/package.json | 1 + packages/approval-controller/package.json | 1 + packages/assets-controller/package.json | 1 + packages/assets-controllers/package.json | 1 + packages/base-data-service/package.json | 1 + packages/claims-controller/package.json | 1 + packages/client-controller/package.json | 1 + packages/compliance-controller/package.json | 1 + .../config-registry-controller/package.json | 1 + packages/connectivity-controller/package.json | 1 + packages/core-backend/package.json | 1 + packages/delegation-controller/package.json | 1 + packages/earn-controller/package.json | 1 + packages/ens-controller/package.json | 1 + packages/gas-fee-controller/package.json | 1 + .../gator-permissions-controller/package.json | 1 + packages/geolocation-controller/package.json | 1 + packages/logging-controller/package.json | 1 + .../money-account-controller/package.json | 1 + .../multichain-account-service/package.json | 1 + packages/name-controller/package.json | 1 + packages/network-controller/package.json | 1 + .../package.json | 1 + .../package.json | 1 + packages/permission-controller/package.json | 1 + .../permission-log-controller/package.json | 1 + packages/perps-controller/package.json | 1 + packages/phishing-controller/package.json | 1 + packages/preferences-controller/package.json | 1 + .../profile-metrics-controller/package.json | 1 + packages/profile-sync-controller/package.json | 1 + packages/ramps-controller/package.json | 1 + .../package.json | 1 + packages/sample-controllers/package.json | 1 + .../package.json | 1 + .../selected-network-controller/package.json | 1 + packages/shield-controller/package.json | 1 + packages/signature-controller/package.json | 1 + packages/social-controllers/package.json | 1 + packages/storage-service/package.json | 1 + packages/subscription-controller/package.json | 1 + packages/transaction-controller/package.json | 1 + .../transaction-pay-controller/package.json | 1 + .../user-operation-controller/package.json | 1 + .../package-template/package.json | 3 +- yarn.lock | 49 +++++++++++++++++++ 51 files changed, 100 insertions(+), 1 deletion(-) diff --git a/packages/account-tree-controller/package.json b/packages/account-tree-controller/package.json index 349dfa6a618..8e6af493650 100644 --- a/packages/account-tree-controller/package.json +++ b/packages/account-tree-controller/package.json @@ -73,6 +73,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index 265b6d6280d..4eec1f613d5 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -78,6 +78,7 @@ "@types/readable-stream": "^2.3.0", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/address-book-controller/package.json b/packages/address-book-controller/package.json index 3431d871cae..3fc1d59c275 100644 --- a/packages/address-book-controller/package.json +++ b/packages/address-book-controller/package.json @@ -61,6 +61,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/analytics-controller/package.json b/packages/analytics-controller/package.json index 396973a3855..9f3c2cd10d1 100644 --- a/packages/analytics-controller/package.json +++ b/packages/analytics-controller/package.json @@ -60,6 +60,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/analytics-data-regulation-controller/package.json b/packages/analytics-data-regulation-controller/package.json index 4e6187452f9..42406b574b1 100644 --- a/packages/analytics-data-regulation-controller/package.json +++ b/packages/analytics-data-regulation-controller/package.json @@ -62,6 +62,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/announcement-controller/package.json b/packages/announcement-controller/package.json index 2abed81878e..d706622f94f 100644 --- a/packages/announcement-controller/package.json +++ b/packages/announcement-controller/package.json @@ -59,6 +59,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/approval-controller/package.json b/packages/approval-controller/package.json index 1cbdb6f623b..caf1061ea55 100644 --- a/packages/approval-controller/package.json +++ b/packages/approval-controller/package.json @@ -62,6 +62,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/assets-controller/package.json b/packages/assets-controller/package.json index 9fdc5d65923..1d5e165dfcc 100644 --- a/packages/assets-controller/package.json +++ b/packages/assets-controller/package.json @@ -86,6 +86,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/assets-controllers/package.json b/packages/assets-controllers/package.json index ddaf8433bca..6411d62a090 100644 --- a/packages/assets-controllers/package.json +++ b/packages/assets-controllers/package.json @@ -112,6 +112,7 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/base-data-service/package.json b/packages/base-data-service/package.json index 48d35a687ea..da59d32ec6c 100644 --- a/packages/base-data-service/package.json +++ b/packages/base-data-service/package.json @@ -64,6 +64,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/claims-controller/package.json b/packages/claims-controller/package.json index 330b38df66a..16f0aaf26f6 100644 --- a/packages/claims-controller/package.json +++ b/packages/claims-controller/package.json @@ -63,6 +63,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/client-controller/package.json b/packages/client-controller/package.json index f046782e015..3b5dff8de45 100644 --- a/packages/client-controller/package.json +++ b/packages/client-controller/package.json @@ -60,6 +60,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/compliance-controller/package.json b/packages/compliance-controller/package.json index 6f027e84a02..e1dd2b5c2b1 100644 --- a/packages/compliance-controller/package.json +++ b/packages/compliance-controller/package.json @@ -64,6 +64,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/config-registry-controller/package.json b/packages/config-registry-controller/package.json index 7c8f12a5212..1a358cd7227 100644 --- a/packages/config-registry-controller/package.json +++ b/packages/config-registry-controller/package.json @@ -70,6 +70,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/connectivity-controller/package.json b/packages/connectivity-controller/package.json index 341bf5ea989..6ceb8dce03b 100644 --- a/packages/connectivity-controller/package.json +++ b/packages/connectivity-controller/package.json @@ -60,6 +60,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/core-backend/package.json b/packages/core-backend/package.json index 664532edc93..4ddf48690e5 100644 --- a/packages/core-backend/package.json +++ b/packages/core-backend/package.json @@ -66,6 +66,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/delegation-controller/package.json b/packages/delegation-controller/package.json index 0d8a25d40f1..537388616c8 100644 --- a/packages/delegation-controller/package.json +++ b/packages/delegation-controller/package.json @@ -62,6 +62,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/earn-controller/package.json b/packages/earn-controller/package.json index 31a5603c0c6..460697228a0 100644 --- a/packages/earn-controller/package.json +++ b/packages/earn-controller/package.json @@ -68,6 +68,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/ens-controller/package.json b/packages/ens-controller/package.json index 401c4ac0417..5c6a53eebcf 100644 --- a/packages/ens-controller/package.json +++ b/packages/ens-controller/package.json @@ -64,6 +64,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/gas-fee-controller/package.json b/packages/gas-fee-controller/package.json index 86bab7275f8..cfcbe9d9d38 100644 --- a/packages/gas-fee-controller/package.json +++ b/packages/gas-fee-controller/package.json @@ -73,6 +73,7 @@ "jest-when": "^3.4.2", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/gator-permissions-controller/package.json b/packages/gator-permissions-controller/package.json index 70c9c5610f0..710fcc6034e 100644 --- a/packages/gator-permissions-controller/package.json +++ b/packages/gator-permissions-controller/package.json @@ -69,6 +69,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/geolocation-controller/package.json b/packages/geolocation-controller/package.json index a35652241fe..9b40485693c 100644 --- a/packages/geolocation-controller/package.json +++ b/packages/geolocation-controller/package.json @@ -60,6 +60,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/logging-controller/package.json b/packages/logging-controller/package.json index 42f55b4d588..eb580bfd4d4 100644 --- a/packages/logging-controller/package.json +++ b/packages/logging-controller/package.json @@ -61,6 +61,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/money-account-controller/package.json b/packages/money-account-controller/package.json index c1c35b9a71d..8e4f6933efe 100644 --- a/packages/money-account-controller/package.json +++ b/packages/money-account-controller/package.json @@ -66,6 +66,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json index 47035c2c746..90effe6374d 100644 --- a/packages/multichain-account-service/package.json +++ b/packages/multichain-account-service/package.json @@ -80,6 +80,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/name-controller/package.json b/packages/name-controller/package.json index 75cacf8ea06..9a3ee1ec8c6 100644 --- a/packages/name-controller/package.json +++ b/packages/name-controller/package.json @@ -63,6 +63,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/network-controller/package.json b/packages/network-controller/package.json index 361e7f63964..7a31e1c2322 100644 --- a/packages/network-controller/package.json +++ b/packages/network-controller/package.json @@ -89,6 +89,7 @@ "nock": "^13.3.1", "node-fetch": "^2.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/network-enablement-controller/package.json b/packages/network-enablement-controller/package.json index 4acfd6d3b6d..79da0d72229 100644 --- a/packages/network-enablement-controller/package.json +++ b/packages/network-enablement-controller/package.json @@ -67,6 +67,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/notification-services-controller/package.json b/packages/notification-services-controller/package.json index b428a74e8ff..a2600ddd0d0 100644 --- a/packages/notification-services-controller/package.json +++ b/packages/notification-services-controller/package.json @@ -130,6 +130,7 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/permission-controller/package.json b/packages/permission-controller/package.json index 610cc9cd0b4..eb773eca6af 100644 --- a/packages/permission-controller/package.json +++ b/packages/permission-controller/package.json @@ -68,6 +68,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/permission-log-controller/package.json b/packages/permission-log-controller/package.json index 0bf608c234b..5a5c39fca5e 100644 --- a/packages/permission-log-controller/package.json +++ b/packages/permission-log-controller/package.json @@ -64,6 +64,7 @@ "jest": "^29.7.0", "nanoid": "^3.3.8", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/perps-controller/package.json b/packages/perps-controller/package.json index 1b7234de9c8..e45b9ace013 100644 --- a/packages/perps-controller/package.json +++ b/packages/perps-controller/package.json @@ -79,6 +79,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/phishing-controller/package.json b/packages/phishing-controller/package.json index 9c3c4059ec0..a5114eb531b 100644 --- a/packages/phishing-controller/package.json +++ b/packages/phishing-controller/package.json @@ -67,6 +67,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/preferences-controller/package.json b/packages/preferences-controller/package.json index eee2d089edd..4a995b1cc22 100644 --- a/packages/preferences-controller/package.json +++ b/packages/preferences-controller/package.json @@ -60,6 +60,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/profile-metrics-controller/package.json b/packages/profile-metrics-controller/package.json index 1048b7d88e0..e9c0a0b9ca6 100644 --- a/packages/profile-metrics-controller/package.json +++ b/packages/profile-metrics-controller/package.json @@ -69,6 +69,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/profile-sync-controller/package.json b/packages/profile-sync-controller/package.json index e1c0862e2f6..5a8bf22e915 100644 --- a/packages/profile-sync-controller/package.json +++ b/packages/profile-sync-controller/package.json @@ -131,6 +131,7 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/ramps-controller/package.json b/packages/ramps-controller/package.json index e8781bb20ea..b27cdb6ab9f 100644 --- a/packages/ramps-controller/package.json +++ b/packages/ramps-controller/package.json @@ -62,6 +62,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/remote-feature-flag-controller/package.json b/packages/remote-feature-flag-controller/package.json index 942f5144bb3..7a8da460a44 100644 --- a/packages/remote-feature-flag-controller/package.json +++ b/packages/remote-feature-flag-controller/package.json @@ -64,6 +64,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/sample-controllers/package.json b/packages/sample-controllers/package.json index 32501669bd5..72e4f26dbe0 100644 --- a/packages/sample-controllers/package.json +++ b/packages/sample-controllers/package.json @@ -66,6 +66,7 @@ "jest": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 0f57e674d37..0d3bcae76ed 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -74,6 +74,7 @@ "jest-environment-node": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/selected-network-controller/package.json b/packages/selected-network-controller/package.json index 66c1169bef0..42390bfc441 100644 --- a/packages/selected-network-controller/package.json +++ b/packages/selected-network-controller/package.json @@ -68,6 +68,7 @@ "lodash": "^4.17.21", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/shield-controller/package.json b/packages/shield-controller/package.json index 35ddfe5eb42..5e4e40ee0e3 100644 --- a/packages/shield-controller/package.json +++ b/packages/shield-controller/package.json @@ -68,6 +68,7 @@ "jest": "^29.7.0", "lodash": "^4.17.21", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3", diff --git a/packages/signature-controller/package.json b/packages/signature-controller/package.json index e2424948fb5..7a119000925 100644 --- a/packages/signature-controller/package.json +++ b/packages/signature-controller/package.json @@ -71,6 +71,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/social-controllers/package.json b/packages/social-controllers/package.json index 78cf78d3dd9..89df32191ca 100644 --- a/packages/social-controllers/package.json +++ b/packages/social-controllers/package.json @@ -62,6 +62,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/storage-service/package.json b/packages/storage-service/package.json index 599c15b23ec..0155c9f14a2 100644 --- a/packages/storage-service/package.json +++ b/packages/storage-service/package.json @@ -59,6 +59,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/subscription-controller/package.json b/packages/subscription-controller/package.json index 8fcd5cda982..c6a328e91f0 100644 --- a/packages/subscription-controller/package.json +++ b/packages/subscription-controller/package.json @@ -65,6 +65,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/transaction-controller/package.json b/packages/transaction-controller/package.json index ca0b6ebd98e..ed649ccb7aa 100644 --- a/packages/transaction-controller/package.json +++ b/packages/transaction-controller/package.json @@ -94,6 +94,7 @@ "jest-environment-jsdom": "^29.7.0", "nock": "^13.3.1", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/transaction-pay-controller/package.json b/packages/transaction-pay-controller/package.json index ddece9341a7..6050c8307ba 100644 --- a/packages/transaction-pay-controller/package.json +++ b/packages/transaction-pay-controller/package.json @@ -79,6 +79,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/packages/user-operation-controller/package.json b/packages/user-operation-controller/package.json index 48ed53dd4b5..bf3adb57921 100644 --- a/packages/user-operation-controller/package.json +++ b/packages/user-operation-controller/package.json @@ -76,6 +76,7 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.3.3" diff --git a/scripts/create-package/package-template/package.json b/scripts/create-package/package-template/package.json index 7b95549feb6..dbcba33c5c8 100644 --- a/scripts/create-package/package-template/package.json +++ b/scripts/create-package/package-template/package.json @@ -57,7 +57,8 @@ "ts-jest": "^29.2.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", - "typescript": "~5.3.3" + "typescript": "~5.3.3", + "tsx": "^4.20.5" }, "engines": { "node": "NODE_VERSIONS" diff --git a/yarn.lock b/yarn.lock index 0f5d4699c07..72da8085c8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2549,6 +2549,7 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2589,6 +2590,7 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2625,6 +2627,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2664,6 +2667,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2685,6 +2689,7 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2703,6 +2708,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2749,6 +2755,7 @@ __metadata: jest: "npm:^29.7.0" nanoid: "npm:^3.3.8" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2794,6 +2801,7 @@ __metadata: lodash: "npm:^4.17.21" p-limit: "npm:^3.1.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2864,6 +2872,7 @@ __metadata: reselect: "npm:^5.1.1" single-call-balance-checker-abi: "npm:^1.0.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -2976,6 +2985,7 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3129,6 +3139,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3148,6 +3159,7 @@ __metadata: jest: "npm:^29.7.0" jest-environment-jsdom: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3171,6 +3183,7 @@ __metadata: nock: "npm:^13.3.1" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3219,6 +3232,7 @@ __metadata: nock: "npm:^13.3.1" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3238,6 +3252,7 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3302,6 +3317,7 @@ __metadata: jest: "npm:^29.7.0" jest-environment-jsdom: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3404,6 +3420,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3449,6 +3466,7 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -3540,6 +3558,7 @@ __metadata: jest: "npm:^29.7.0" punycode: "npm:^2.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4012,6 +4031,7 @@ __metadata: jest-when: "npm:^3.4.2" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4043,6 +4063,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4062,6 +4083,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4278,6 +4300,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4392,6 +4415,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4431,6 +4455,7 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4551,6 +4576,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4597,6 +4623,7 @@ __metadata: node-fetch: "npm:^2.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4625,6 +4652,7 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4673,6 +4701,7 @@ __metadata: nock: "npm:^13.3.1" semver: "npm:^7.6.3" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4721,6 +4750,7 @@ __metadata: jest: "npm:^29.7.0" nanoid: "npm:^3.3.8" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4744,6 +4774,7 @@ __metadata: jest: "npm:^29.7.0" nanoid: "npm:^3.3.8" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4778,6 +4809,7 @@ __metadata: jest: "npm:^29.7.0" reselect: "npm:^5.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4805,6 +4837,7 @@ __metadata: nock: "npm:^13.3.1" punycode: "npm:^2.1.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4858,6 +4891,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4886,6 +4920,7 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4923,6 +4958,7 @@ __metadata: nock: "npm:^13.3.1" siwe: "npm:^2.3.2" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -4968,6 +5004,7 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5034,6 +5071,7 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5077,6 +5115,7 @@ __metadata: jest: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5120,6 +5159,7 @@ __metadata: jest-environment-node: "npm:^29.7.0" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5147,6 +5187,7 @@ __metadata: lodash: "npm:^4.17.21" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5174,6 +5215,7 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5204,6 +5246,7 @@ __metadata: jsonschema: "npm:^1.4.1" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5364,6 +5407,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5389,6 +5433,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5413,6 +5458,7 @@ __metadata: deepmerge: "npm:^4.2.2" jest: "npm:^29.7.0" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5497,6 +5543,7 @@ __metadata: lodash: "npm:^4.17.21" nock: "npm:^13.3.1" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5538,6 +5585,7 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" @@ -5571,6 +5619,7 @@ __metadata: jest: "npm:^29.7.0" lodash: "npm:^4.17.21" ts-jest: "npm:^29.2.5" + tsx: "npm:^4.20.5" typedoc: "npm:^0.25.13" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.3.3" From e024252b6b3c069ede1ec8aaad57f8bbb7018798 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 19:23:25 +0200 Subject: [PATCH 09/14] fix: apply changelog suggestion --- packages/messenger/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/messenger/CHANGELOG.md b/packages/messenger/CHANGELOG.md index 51458050e7c..9b7ca7f9179 100644 --- a/packages/messenger/CHANGELOG.md +++ b/packages/messenger/CHANGELOG.md @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Deprecated - Deprecate `generate-action-types` CLI tool and `messenger-generate-action-types` binary ([#8378](https://github.com/MetaMask/core/pull/8378)) - - The CLI has been extracted to `@metamask/messenger-cli`. Use that package instead. + - The CLI has been extracted to `@metamask/messenger-cli`. Use `messenger-action-types` from this package instead. ## [1.1.1] From 42f78263f7d19f363497ed2da546bb88d43c8668 Mon Sep 17 00:00:00 2001 From: cryptodev-2s <109512101+cryptodev-2s@users.noreply.github.com> Date: Fri, 3 Apr 2026 20:19:12 +0200 Subject: [PATCH 10/14] Update packages/messenger/src/generate-action-types/cli.ts Co-authored-by: Elliot Winkler --- packages/messenger/src/generate-action-types/cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/messenger/src/generate-action-types/cli.ts b/packages/messenger/src/generate-action-types/cli.ts index 3020432195c..4cf338ae31d 100644 --- a/packages/messenger/src/generate-action-types/cli.ts +++ b/packages/messenger/src/generate-action-types/cli.ts @@ -93,7 +93,7 @@ async function loadESLint(): Promise { */ async function main(): Promise { console.warn( - 'āš ļø messenger-generate-action-types from @metamask/messenger is deprecated. Install @metamask/messenger-cli instead.', + 'āš ļø `messenger-generate-action-types` from @metamask/messenger is deprecated. Use `messenger-action-types` from @metamask/messenger-cli instead.', ); const { fix, sourcePath } = await parseCommandLineArguments( From 5ee34d5589403a45ebe7907da121a75568f7b198 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 19:23:25 +0200 Subject: [PATCH 11/14] fix: apply changelog suggestion --- scripts/create-package/package-template/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/create-package/package-template/package.json b/scripts/create-package/package-template/package.json index dbcba33c5c8..48b4e92d110 100644 --- a/scripts/create-package/package-template/package.json +++ b/scripts/create-package/package-template/package.json @@ -55,10 +55,10 @@ "deepmerge": "^4.2.2", "jest": "^29.7.0", "ts-jest": "^29.2.5", + "tsx": "^4.20.5", "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.0.0", - "typescript": "~5.3.3", - "tsx": "^4.20.5" + "typescript": "~5.3.3" }, "engines": { "node": "NODE_VERSIONS" From 4a2a8e8f69dc9da0092f7b38bae2fd61a7b620ac Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 21:45:59 +0200 Subject: [PATCH 12/14] fix: prettier formatting in cli.ts --- packages/messenger-cli/src/cli.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/messenger-cli/src/cli.ts b/packages/messenger-cli/src/cli.ts index 5b687a4f75a..6d040461ca2 100644 --- a/packages/messenger-cli/src/cli.ts +++ b/packages/messenger-cli/src/cli.ts @@ -52,9 +52,7 @@ async function parseCommandLineArguments( .help() .check((argv) => { if (!argv.check && !argv.generate) { - throw new Error( - 'Either --check or --generate must be provided.\n', - ); + throw new Error('Either --check or --generate must be provided.\n'); } return true; }).argv; From 3ba4b003e9559e70edaee01000bb373e6b48114e Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 21:56:50 +0200 Subject: [PATCH 13/14] fix: mark eslint as optional peer dependency --- packages/messenger-cli/package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json index 64d3e75a16f..33cd39767f1 100644 --- a/packages/messenger-cli/package.json +++ b/packages/messenger-cli/package.json @@ -53,6 +53,11 @@ "eslint": ">=8", "typescript": ">=5.0.0" }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + }, "engines": { "node": "^18.18 || >=20" }, From 72f76450ea62601e56b8f792e39e3c725e7621d6 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Fri, 3 Apr 2026 22:03:31 +0200 Subject: [PATCH 14/14] fix: update lock file --- yarn.lock | 3 +++ 1 file changed, 3 insertions(+) diff --git a/yarn.lock b/yarn.lock index 72da8085c8f..7a48685e3db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4351,6 +4351,9 @@ __metadata: peerDependencies: eslint: ">=8" typescript: ">=5.0.0" + peerDependenciesMeta: + eslint: + optional: true bin: messenger-action-types: ./dist/cli.mjs languageName: unknown