@metamask-previews/messenger 1.0.0-preview-bfb4d9f5a → 1.0.0-preview-7bc465a23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +0 -7
  2. package/package.json +1 -15
  3. package/dist/generate-action-types/check.cjs +0 -105
  4. package/dist/generate-action-types/check.cjs.map +0 -1
  5. package/dist/generate-action-types/check.d.cts +0 -11
  6. package/dist/generate-action-types/check.d.cts.map +0 -1
  7. package/dist/generate-action-types/check.d.mts +0 -11
  8. package/dist/generate-action-types/check.d.mts.map +0 -1
  9. package/dist/generate-action-types/check.mjs +0 -78
  10. package/dist/generate-action-types/check.mjs.map +0 -1
  11. package/dist/generate-action-types/cli.cjs +0 -107
  12. package/dist/generate-action-types/cli.cjs.map +0 -1
  13. package/dist/generate-action-types/cli.d.cts +0 -3
  14. package/dist/generate-action-types/cli.d.cts.map +0 -1
  15. package/dist/generate-action-types/cli.d.mts +0 -3
  16. package/dist/generate-action-types/cli.d.mts.map +0 -1
  17. package/dist/generate-action-types/cli.mjs +0 -102
  18. package/dist/generate-action-types/cli.mjs.map +0 -1
  19. package/dist/generate-action-types/fix.cjs +0 -63
  20. package/dist/generate-action-types/fix.cjs.map +0 -1
  21. package/dist/generate-action-types/fix.d.cts +0 -11
  22. package/dist/generate-action-types/fix.d.cts.map +0 -1
  23. package/dist/generate-action-types/fix.d.mts +0 -11
  24. package/dist/generate-action-types/fix.d.mts.map +0 -1
  25. package/dist/generate-action-types/fix.mjs +0 -36
  26. package/dist/generate-action-types/fix.mjs.map +0 -1
  27. package/dist/generate-action-types/generate-content.cjs +0 -69
  28. package/dist/generate-action-types/generate-content.cjs.map +0 -1
  29. package/dist/generate-action-types/generate-content.d.cts +0 -9
  30. package/dist/generate-action-types/generate-content.d.cts.map +0 -1
  31. package/dist/generate-action-types/generate-content.d.mts +0 -9
  32. package/dist/generate-action-types/generate-content.d.mts.map +0 -1
  33. package/dist/generate-action-types/generate-content.mjs +0 -42
  34. package/dist/generate-action-types/generate-content.mjs.map +0 -1
  35. package/dist/generate-action-types/parse-source.cjs +0 -324
  36. package/dist/generate-action-types/parse-source.cjs.map +0 -1
  37. package/dist/generate-action-types/parse-source.d.cts +0 -25
  38. package/dist/generate-action-types/parse-source.d.cts.map +0 -1
  39. package/dist/generate-action-types/parse-source.d.mts +0 -25
  40. package/dist/generate-action-types/parse-source.d.mts.map +0 -1
  41. package/dist/generate-action-types/parse-source.mjs +0 -297
  42. package/dist/generate-action-types/parse-source.mjs.map +0 -1
  43. package/dist/generate-action-types/types.cjs +0 -3
  44. package/dist/generate-action-types/types.cjs.map +0 -1
  45. package/dist/generate-action-types/types.d.cts +0 -6
  46. package/dist/generate-action-types/types.d.cts.map +0 -1
  47. package/dist/generate-action-types/types.d.mts +0 -6
  48. package/dist/generate-action-types/types.d.mts.map +0 -1
  49. package/dist/generate-action-types/types.mjs +0 -2
  50. package/dist/generate-action-types/types.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,13 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Added
11
-
12
- - Add `generate-action-types` CLI tool ([#8264](https://github.com/MetaMask/core/pull/8264))
13
- - Generates TypeScript action type files for controllers and services that define `MESSENGER_EXPOSED_METHODS`.
14
- - Available as a CLI binary (`messenger-generate-action-types`).
15
- - `typescript` and `eslint` are peer dependencies.
16
-
17
10
  ## [1.0.0]
18
11
 
19
12
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/messenger",
3
- "version": "1.0.0-preview-bfb4d9f5a",
3
+ "version": "1.0.0-preview-7bc465a23",
4
4
  "description": "A type-safe message bus library",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -31,9 +31,6 @@
31
31
  },
32
32
  "main": "./dist/index.cjs",
33
33
  "types": "./dist/index.d.cts",
34
- "bin": {
35
- "messenger-generate-action-types": "./dist/generate-action-types/cli.mjs"
36
- },
37
34
  "files": [
38
35
  "dist/"
39
36
  ],
@@ -49,18 +46,11 @@
49
46
  "test:verbose": "NODE_OPTIONS=--experimental-vm-modules jest --verbose",
50
47
  "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
51
48
  },
52
- "dependencies": {
53
- "@metamask/utils": "^11.9.0",
54
- "yargs": "^17.7.2"
55
- },
56
49
  "devDependencies": {
57
50
  "@metamask/auto-changelog": "^3.4.4",
58
51
  "@ts-bridge/cli": "^0.6.4",
59
52
  "@types/jest": "^29.5.14",
60
- "@types/yargs": "^17.0.32",
61
53
  "deepmerge": "^4.2.2",
62
- "eslint": "^9.39.1",
63
- "execa": "^5.0.0",
64
54
  "immer": "^9.0.6",
65
55
  "jest": "^29.7.0",
66
56
  "ts-jest": "^29.2.5",
@@ -68,10 +58,6 @@
68
58
  "typedoc-plugin-missing-exports": "^2.0.0",
69
59
  "typescript": "~5.3.3"
70
60
  },
71
- "peerDependencies": {
72
- "eslint": ">=8",
73
- "typescript": ">=5.0.0"
74
- },
75
61
  "engines": {
76
62
  "node": "^18.18 || >=20"
77
63
  },
@@ -1,105 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.checkActionTypesFiles = void 0;
27
- const fs = __importStar(require("node:fs"));
28
- const path = __importStar(require("node:path"));
29
- const generate_content_1 = require("./generate-content.cjs");
30
- /**
31
- * Checks if generated action types files are up to date.
32
- *
33
- * @param sources - Array of source information objects.
34
- * @param eslint - Optional ESLint instance and static methods for formatting.
35
- * @returns Whether all files are up to date.
36
- */
37
- async function checkActionTypesFiles(sources, eslint) {
38
- let hasErrors = false;
39
- const fileComparisonJobs = [];
40
- try {
41
- for (const source of sources) {
42
- console.log(`\nšŸ”§ Checking ${source.name}...`);
43
- const outputDir = path.dirname(source.filePath);
44
- const baseFileName = path.basename(source.filePath, '.ts');
45
- const actualFile = path.join(outputDir, `${baseFileName}-method-action-types.ts`);
46
- const expectedContent = (0, generate_content_1.generateActionTypesContent)(source);
47
- const expectedTempFile = actualFile.replace('.ts', '.tmp.ts');
48
- try {
49
- await fs.promises.access(actualFile);
50
- await fs.promises.writeFile(expectedTempFile, expectedContent, 'utf8');
51
- fileComparisonJobs.push({
52
- expectedTempFile,
53
- actualFile,
54
- baseFileName,
55
- });
56
- }
57
- catch (error) {
58
- if (error.code === 'ENOENT') {
59
- console.error(`āŒ ${baseFileName}-method-action-types.ts does not exist`);
60
- }
61
- else {
62
- console.error(`āŒ Error reading ${baseFileName}-method-action-types.ts:`, error);
63
- }
64
- hasErrors = true;
65
- }
66
- }
67
- if (fileComparisonJobs.length > 0) {
68
- if (eslint) {
69
- console.log('\nšŸ“ Running ESLint to compare files...');
70
- const results = await eslint.instance.lintFiles(fileComparisonJobs.map((job) => job.expectedTempFile));
71
- await eslint.eslintClass.outputFixes(results);
72
- }
73
- for (const job of fileComparisonJobs) {
74
- const expectedContent = await fs.promises.readFile(job.expectedTempFile, 'utf8');
75
- const actualContent = await fs.promises.readFile(job.actualFile, 'utf8');
76
- if (expectedContent === actualContent) {
77
- console.log(`āœ… ${job.baseFileName}-method-action-types.ts is up to date`);
78
- }
79
- else {
80
- console.error(`āŒ ${job.baseFileName}-method-action-types.ts is out of date`);
81
- hasErrors = true;
82
- }
83
- }
84
- }
85
- }
86
- finally {
87
- for (const job of fileComparisonJobs) {
88
- try {
89
- await fs.promises.unlink(job.expectedTempFile);
90
- }
91
- catch {
92
- // Ignore cleanup errors
93
- }
94
- }
95
- }
96
- if (hasErrors) {
97
- console.error('\nšŸ’„ Some action type files are out of date or missing.');
98
- console.error('Run `yarn generate-method-action-types --fix` to update them.');
99
- return false;
100
- }
101
- console.log('\nšŸŽ‰ All action type files are up to date!');
102
- return true;
103
- }
104
- exports.checkActionTypesFiles = checkActionTypesFiles;
105
- //# sourceMappingURL=check.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check.cjs","sourceRoot":"","sources":["../../src/generate-action-types/check.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { generateActionTypesContent } from './generate-content';\nimport type { SourceInfo } from './parse-source';\nimport type { ESLint } from './types';\n\n/**\n * Checks if generated action types files are up to date.\n *\n * @param sources - Array of source information objects.\n * @param eslint - Optional ESLint instance and static methods for formatting.\n * @returns Whether all files are up to date.\n */\nexport async function checkActionTypesFiles(\n sources: SourceInfo[],\n eslint: ESLint | null,\n): Promise<boolean> {\n let hasErrors = false;\n\n const fileComparisonJobs: {\n expectedTempFile: string;\n actualFile: string;\n baseFileName: string;\n }[] = [];\n\n try {\n for (const source of sources) {\n console.log(`\\nšŸ”§ Checking ${source.name}...`);\n const outputDir = path.dirname(source.filePath);\n const baseFileName = path.basename(source.filePath, '.ts');\n const actualFile = path.join(\n outputDir,\n `${baseFileName}-method-action-types.ts`,\n );\n\n const expectedContent = generateActionTypesContent(source);\n const expectedTempFile = actualFile.replace('.ts', '.tmp.ts');\n\n try {\n await fs.promises.access(actualFile);\n\n await fs.promises.writeFile(expectedTempFile, expectedContent, 'utf8');\n\n fileComparisonJobs.push({\n expectedTempFile,\n actualFile,\n baseFileName,\n });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n console.error(\n `āŒ ${baseFileName}-method-action-types.ts does not exist`,\n );\n } else {\n console.error(\n `āŒ Error reading ${baseFileName}-method-action-types.ts:`,\n error,\n );\n }\n hasErrors = true;\n }\n }\n\n if (fileComparisonJobs.length > 0) {\n if (eslint) {\n console.log('\\nšŸ“ Running ESLint to compare files...');\n\n const results = await eslint.instance.lintFiles(\n fileComparisonJobs.map((job) => job.expectedTempFile),\n );\n await eslint.eslintClass.outputFixes(results);\n }\n\n for (const job of fileComparisonJobs) {\n const expectedContent = await fs.promises.readFile(\n job.expectedTempFile,\n 'utf8',\n );\n const actualContent = await fs.promises.readFile(\n job.actualFile,\n 'utf8',\n );\n\n if (expectedContent === actualContent) {\n console.log(\n `āœ… ${job.baseFileName}-method-action-types.ts is up to date`,\n );\n } else {\n console.error(\n `āŒ ${job.baseFileName}-method-action-types.ts is out of date`,\n );\n hasErrors = true;\n }\n }\n }\n } finally {\n for (const job of fileComparisonJobs) {\n try {\n await fs.promises.unlink(job.expectedTempFile);\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n\n if (hasErrors) {\n console.error('\\nšŸ’„ Some action type files are out of date or missing.');\n console.error(\n 'Run `yarn generate-method-action-types --fix` to update them.',\n );\n return false;\n }\n\n console.log('\\nšŸŽ‰ All action type files are up to date!');\n return true;\n}\n"]}
@@ -1,11 +0,0 @@
1
- import type { SourceInfo } from "./parse-source.cjs";
2
- import type { ESLint } from "./types.cjs";
3
- /**
4
- * Checks if generated action types files are up to date.
5
- *
6
- * @param sources - Array of source information objects.
7
- * @param eslint - Optional ESLint instance and static methods for formatting.
8
- * @returns Whether all files are up to date.
9
- */
10
- export declare function checkActionTypesFiles(sources: SourceInfo[], eslint: ESLint | null): Promise<boolean>;
11
- //# sourceMappingURL=check.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check.d.cts","sourceRoot":"","sources":["../../src/generate-action-types/check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,2BAAuB;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAgB;AAEtC;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,OAAO,CAAC,CAmGlB"}
@@ -1,11 +0,0 @@
1
- import type { SourceInfo } from "./parse-source.mjs";
2
- import type { ESLint } from "./types.mjs";
3
- /**
4
- * Checks if generated action types files are up to date.
5
- *
6
- * @param sources - Array of source information objects.
7
- * @param eslint - Optional ESLint instance and static methods for formatting.
8
- * @returns Whether all files are up to date.
9
- */
10
- export declare function checkActionTypesFiles(sources: SourceInfo[], eslint: ESLint | null): Promise<boolean>;
11
- //# sourceMappingURL=check.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check.d.mts","sourceRoot":"","sources":["../../src/generate-action-types/check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,2BAAuB;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAgB;AAEtC;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,OAAO,CAAC,CAmGlB"}
@@ -1,78 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { generateActionTypesContent } from "./generate-content.mjs";
4
- /**
5
- * Checks if generated action types files are up to date.
6
- *
7
- * @param sources - Array of source information objects.
8
- * @param eslint - Optional ESLint instance and static methods for formatting.
9
- * @returns Whether all files are up to date.
10
- */
11
- export async function checkActionTypesFiles(sources, eslint) {
12
- let hasErrors = false;
13
- const fileComparisonJobs = [];
14
- try {
15
- for (const source of sources) {
16
- console.log(`\nšŸ”§ Checking ${source.name}...`);
17
- const outputDir = path.dirname(source.filePath);
18
- const baseFileName = path.basename(source.filePath, '.ts');
19
- const actualFile = path.join(outputDir, `${baseFileName}-method-action-types.ts`);
20
- const expectedContent = generateActionTypesContent(source);
21
- const expectedTempFile = actualFile.replace('.ts', '.tmp.ts');
22
- try {
23
- await fs.promises.access(actualFile);
24
- await fs.promises.writeFile(expectedTempFile, expectedContent, 'utf8');
25
- fileComparisonJobs.push({
26
- expectedTempFile,
27
- actualFile,
28
- baseFileName,
29
- });
30
- }
31
- catch (error) {
32
- if (error.code === 'ENOENT') {
33
- console.error(`āŒ ${baseFileName}-method-action-types.ts does not exist`);
34
- }
35
- else {
36
- console.error(`āŒ Error reading ${baseFileName}-method-action-types.ts:`, error);
37
- }
38
- hasErrors = true;
39
- }
40
- }
41
- if (fileComparisonJobs.length > 0) {
42
- if (eslint) {
43
- console.log('\nšŸ“ Running ESLint to compare files...');
44
- const results = await eslint.instance.lintFiles(fileComparisonJobs.map((job) => job.expectedTempFile));
45
- await eslint.eslintClass.outputFixes(results);
46
- }
47
- for (const job of fileComparisonJobs) {
48
- const expectedContent = await fs.promises.readFile(job.expectedTempFile, 'utf8');
49
- const actualContent = await fs.promises.readFile(job.actualFile, 'utf8');
50
- if (expectedContent === actualContent) {
51
- console.log(`āœ… ${job.baseFileName}-method-action-types.ts is up to date`);
52
- }
53
- else {
54
- console.error(`āŒ ${job.baseFileName}-method-action-types.ts is out of date`);
55
- hasErrors = true;
56
- }
57
- }
58
- }
59
- }
60
- finally {
61
- for (const job of fileComparisonJobs) {
62
- try {
63
- await fs.promises.unlink(job.expectedTempFile);
64
- }
65
- catch {
66
- // Ignore cleanup errors
67
- }
68
- }
69
- }
70
- if (hasErrors) {
71
- console.error('\nšŸ’„ Some action type files are out of date or missing.');
72
- console.error('Run `yarn generate-method-action-types --fix` to update them.');
73
- return false;
74
- }
75
- console.log('\nšŸŽ‰ All action type files are up to date!');
76
- return true;
77
- }
78
- //# sourceMappingURL=check.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check.mjs","sourceRoot":"","sources":["../../src/generate-action-types/check.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { generateActionTypesContent } from './generate-content';\nimport type { SourceInfo } from './parse-source';\nimport type { ESLint } from './types';\n\n/**\n * Checks if generated action types files are up to date.\n *\n * @param sources - Array of source information objects.\n * @param eslint - Optional ESLint instance and static methods for formatting.\n * @returns Whether all files are up to date.\n */\nexport async function checkActionTypesFiles(\n sources: SourceInfo[],\n eslint: ESLint | null,\n): Promise<boolean> {\n let hasErrors = false;\n\n const fileComparisonJobs: {\n expectedTempFile: string;\n actualFile: string;\n baseFileName: string;\n }[] = [];\n\n try {\n for (const source of sources) {\n console.log(`\\nšŸ”§ Checking ${source.name}...`);\n const outputDir = path.dirname(source.filePath);\n const baseFileName = path.basename(source.filePath, '.ts');\n const actualFile = path.join(\n outputDir,\n `${baseFileName}-method-action-types.ts`,\n );\n\n const expectedContent = generateActionTypesContent(source);\n const expectedTempFile = actualFile.replace('.ts', '.tmp.ts');\n\n try {\n await fs.promises.access(actualFile);\n\n await fs.promises.writeFile(expectedTempFile, expectedContent, 'utf8');\n\n fileComparisonJobs.push({\n expectedTempFile,\n actualFile,\n baseFileName,\n });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n console.error(\n `āŒ ${baseFileName}-method-action-types.ts does not exist`,\n );\n } else {\n console.error(\n `āŒ Error reading ${baseFileName}-method-action-types.ts:`,\n error,\n );\n }\n hasErrors = true;\n }\n }\n\n if (fileComparisonJobs.length > 0) {\n if (eslint) {\n console.log('\\nšŸ“ Running ESLint to compare files...');\n\n const results = await eslint.instance.lintFiles(\n fileComparisonJobs.map((job) => job.expectedTempFile),\n );\n await eslint.eslintClass.outputFixes(results);\n }\n\n for (const job of fileComparisonJobs) {\n const expectedContent = await fs.promises.readFile(\n job.expectedTempFile,\n 'utf8',\n );\n const actualContent = await fs.promises.readFile(\n job.actualFile,\n 'utf8',\n );\n\n if (expectedContent === actualContent) {\n console.log(\n `āœ… ${job.baseFileName}-method-action-types.ts is up to date`,\n );\n } else {\n console.error(\n `āŒ ${job.baseFileName}-method-action-types.ts is out of date`,\n );\n hasErrors = true;\n }\n }\n }\n } finally {\n for (const job of fileComparisonJobs) {\n try {\n await fs.promises.unlink(job.expectedTempFile);\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n\n if (hasErrors) {\n console.error('\\nšŸ’„ Some action type files are out of date or missing.');\n console.error(\n 'Run `yarn generate-method-action-types --fix` to update them.',\n );\n return false;\n }\n\n console.log('\\nšŸŽ‰ All action type files are up to date!');\n return true;\n}\n"]}
@@ -1,107 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const yargs_1 = __importDefault(require("yargs"));
8
- const check_1 = require("./check.cjs");
9
- const fix_1 = require("./fix.cjs");
10
- const parse_source_1 = require("./parse-source.cjs");
11
- /**
12
- * Parses the given CLI arguments.
13
- *
14
- * @param args - The arguments to parse.
15
- * @returns The parsed command line arguments.
16
- */
17
- async function parseCommandLineArguments(args) {
18
- const { check, fix, path: sourcePath, } = await (0, yargs_1.default)(args)
19
- .command('$0 [path]', 'Generate method action types for controller and service messengers', (yargsInstance) => {
20
- yargsInstance.positional('path', {
21
- type: 'string',
22
- description: 'Path to the folder where controllers/services are located',
23
- default: 'src',
24
- });
25
- })
26
- .option('check', {
27
- type: 'boolean',
28
- description: 'Check if generated action type files are up to date',
29
- default: false,
30
- })
31
- .option('fix', {
32
- type: 'boolean',
33
- description: 'Generate/update action type files',
34
- default: false,
35
- })
36
- .help()
37
- .check((argv) => {
38
- if (!argv.check && !argv.fix) {
39
- throw new Error('Either --check or --fix must be provided.\n');
40
- }
41
- return true;
42
- }).argv;
43
- return {
44
- check,
45
- fix,
46
- sourcePath: sourcePath,
47
- };
48
- }
49
- /**
50
- * Attempt to load ESLint from the current project. Returns null if unavailable.
51
- *
52
- * @returns An ESLint object with instance and static methods, or null if unavailable.
53
- */
54
- async function loadESLint() {
55
- try {
56
- const { ESLint: ESLintClass } = await import("eslint");
57
- const instance = new ESLintClass({
58
- fix: true,
59
- errorOnUnmatchedPattern: false,
60
- });
61
- return {
62
- instance,
63
- eslintClass: ESLintClass,
64
- };
65
- }
66
- catch {
67
- console.warn('āš ļø ESLint could not be loaded. Generated files will not be formatted.');
68
- return null;
69
- }
70
- }
71
- /**
72
- * Main entry point for the CLI.
73
- */
74
- async function main() {
75
- const { fix, sourcePath } = await parseCommandLineArguments(globalThis.process.argv.slice(2));
76
- console.log('šŸ” Searching for controllers/services with MESSENGER_EXPOSED_METHODS...');
77
- const sources = await (0, parse_source_1.findSourcesWithExposedMethods)(sourcePath);
78
- if (sources.length === 0) {
79
- console.log('āš ļø No controllers/services found with MESSENGER_EXPOSED_METHODS');
80
- return;
81
- }
82
- console.log(`šŸ“¦ Found ${sources.length} controller(s)/service(s) with exposed methods`);
83
- const eslint = await loadESLint();
84
- if (fix) {
85
- const success = await (0, fix_1.generateAllActionTypesFiles)(sources, eslint);
86
- if (success) {
87
- console.log('\nšŸŽ‰ All action types generated successfully!');
88
- }
89
- else {
90
- // eslint-disable-next-line no-restricted-globals
91
- process.exitCode = 1;
92
- }
93
- }
94
- else {
95
- const success = await (0, check_1.checkActionTypesFiles)(sources, eslint);
96
- if (!success) {
97
- // eslint-disable-next-line no-restricted-globals
98
- process.exitCode = 1;
99
- }
100
- }
101
- }
102
- main().catch((error) => {
103
- console.error('āŒ Script failed:', error);
104
- // eslint-disable-next-line no-restricted-globals
105
- process.exitCode = 1;
106
- });
107
- //# sourceMappingURL=cli.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.cjs","sourceRoot":"","sources":["../../src/generate-action-types/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\n\nimport { checkActionTypesFiles } from './check';\nimport { generateAllActionTypesFiles } from './fix';\nimport { findSourcesWithExposedMethods } from './parse-source';\nimport type { ESLint } from './types';\n\ntype CommandLineArguments = {\n check: boolean;\n fix: boolean;\n sourcePath: string;\n};\n\n/**\n * Parses the given CLI arguments.\n *\n * @param args - The arguments to parse.\n * @returns The parsed command line arguments.\n */\nasync function parseCommandLineArguments(\n args: string[],\n): Promise<CommandLineArguments> {\n const {\n check,\n fix,\n path: sourcePath,\n } = await yargs(args)\n .command(\n '$0 [path]',\n 'Generate method action types for controller and service messengers',\n (yargsInstance) => {\n yargsInstance.positional('path', {\n type: 'string',\n description:\n 'Path to the folder where controllers/services are located',\n default: 'src',\n });\n },\n )\n .option('check', {\n type: 'boolean',\n description: 'Check if generated action type files are up to date',\n default: false,\n })\n .option('fix', {\n type: 'boolean',\n description: 'Generate/update action type files',\n default: false,\n })\n .help()\n .check((argv) => {\n if (!argv.check && !argv.fix) {\n throw new Error('Either --check or --fix must be provided.\\n');\n }\n return true;\n }).argv;\n\n return {\n check,\n fix,\n sourcePath: sourcePath as string,\n };\n}\n\n/**\n * Attempt to load ESLint from the current project. Returns null if unavailable.\n *\n * @returns An ESLint object with instance and static methods, or null if unavailable.\n */\nasync function loadESLint(): Promise<ESLint | null> {\n try {\n const { ESLint: ESLintClass } = await import('eslint');\n const instance = new ESLintClass({\n fix: true,\n errorOnUnmatchedPattern: false,\n });\n return {\n instance,\n eslintClass: ESLintClass,\n };\n } catch {\n console.warn(\n 'āš ļø ESLint could not be loaded. Generated files will not be formatted.',\n );\n return null;\n }\n}\n\n/**\n * Main entry point for the CLI.\n */\nasync function main(): Promise<void> {\n const { fix, sourcePath } = await parseCommandLineArguments(\n globalThis.process.argv.slice(2),\n );\n\n console.log(\n 'šŸ” Searching for controllers/services with MESSENGER_EXPOSED_METHODS...',\n );\n\n const sources = await findSourcesWithExposedMethods(sourcePath);\n\n if (sources.length === 0) {\n console.log(\n 'āš ļø No controllers/services found with MESSENGER_EXPOSED_METHODS',\n );\n return;\n }\n\n console.log(\n `šŸ“¦ Found ${sources.length} controller(s)/service(s) with exposed methods`,\n );\n\n const eslint = await loadESLint();\n\n if (fix) {\n const success = await generateAllActionTypesFiles(sources, eslint);\n if (success) {\n console.log('\\nšŸŽ‰ All action types generated successfully!');\n } else {\n // eslint-disable-next-line no-restricted-globals\n process.exitCode = 1;\n }\n } else {\n const success = await checkActionTypesFiles(sources, eslint);\n if (!success) {\n // eslint-disable-next-line no-restricted-globals\n process.exitCode = 1;\n }\n }\n}\n\nmain().catch((error) => {\n console.error('āŒ Script failed:', error);\n // eslint-disable-next-line no-restricted-globals\n process.exitCode = 1;\n});\n"]}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.cts","sourceRoot":"","sources":["../../src/generate-action-types/cli.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.mts","sourceRoot":"","sources":["../../src/generate-action-types/cli.ts"],"names":[],"mappings":""}
@@ -1,102 +0,0 @@
1
- #!/usr/bin/env node
2
- import yargs from "yargs";
3
- import { checkActionTypesFiles } from "./check.mjs";
4
- import { generateAllActionTypesFiles } from "./fix.mjs";
5
- import { findSourcesWithExposedMethods } from "./parse-source.mjs";
6
- /**
7
- * Parses the given CLI arguments.
8
- *
9
- * @param args - The arguments to parse.
10
- * @returns The parsed command line arguments.
11
- */
12
- async function parseCommandLineArguments(args) {
13
- const { check, fix, path: sourcePath, } = await yargs(args)
14
- .command('$0 [path]', 'Generate method action types for controller and service messengers', (yargsInstance) => {
15
- yargsInstance.positional('path', {
16
- type: 'string',
17
- description: 'Path to the folder where controllers/services are located',
18
- default: 'src',
19
- });
20
- })
21
- .option('check', {
22
- type: 'boolean',
23
- description: 'Check if generated action type files are up to date',
24
- default: false,
25
- })
26
- .option('fix', {
27
- type: 'boolean',
28
- description: 'Generate/update action type files',
29
- default: false,
30
- })
31
- .help()
32
- .check((argv) => {
33
- if (!argv.check && !argv.fix) {
34
- throw new Error('Either --check or --fix must be provided.\n');
35
- }
36
- return true;
37
- }).argv;
38
- return {
39
- check,
40
- fix,
41
- sourcePath: sourcePath,
42
- };
43
- }
44
- /**
45
- * Attempt to load ESLint from the current project. Returns null if unavailable.
46
- *
47
- * @returns An ESLint object with instance and static methods, or null if unavailable.
48
- */
49
- async function loadESLint() {
50
- try {
51
- const { ESLint: ESLintClass } = await import("eslint");
52
- const instance = new ESLintClass({
53
- fix: true,
54
- errorOnUnmatchedPattern: false,
55
- });
56
- return {
57
- instance,
58
- eslintClass: ESLintClass,
59
- };
60
- }
61
- catch {
62
- console.warn('āš ļø ESLint could not be loaded. Generated files will not be formatted.');
63
- return null;
64
- }
65
- }
66
- /**
67
- * Main entry point for the CLI.
68
- */
69
- async function main() {
70
- const { fix, sourcePath } = await parseCommandLineArguments(globalThis.process.argv.slice(2));
71
- console.log('šŸ” Searching for controllers/services with MESSENGER_EXPOSED_METHODS...');
72
- const sources = await findSourcesWithExposedMethods(sourcePath);
73
- if (sources.length === 0) {
74
- console.log('āš ļø No controllers/services found with MESSENGER_EXPOSED_METHODS');
75
- return;
76
- }
77
- console.log(`šŸ“¦ Found ${sources.length} controller(s)/service(s) with exposed methods`);
78
- const eslint = await loadESLint();
79
- if (fix) {
80
- const success = await generateAllActionTypesFiles(sources, eslint);
81
- if (success) {
82
- console.log('\nšŸŽ‰ All action types generated successfully!');
83
- }
84
- else {
85
- // eslint-disable-next-line no-restricted-globals
86
- process.exitCode = 1;
87
- }
88
- }
89
- else {
90
- const success = await checkActionTypesFiles(sources, eslint);
91
- if (!success) {
92
- // eslint-disable-next-line no-restricted-globals
93
- process.exitCode = 1;
94
- }
95
- }
96
- }
97
- main().catch((error) => {
98
- console.error('āŒ Script failed:', error);
99
- // eslint-disable-next-line no-restricted-globals
100
- process.exitCode = 1;
101
- });
102
- //# sourceMappingURL=cli.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.mjs","sourceRoot":"","sources":["../../src/generate-action-types/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\n\nimport { checkActionTypesFiles } from './check';\nimport { generateAllActionTypesFiles } from './fix';\nimport { findSourcesWithExposedMethods } from './parse-source';\nimport type { ESLint } from './types';\n\ntype CommandLineArguments = {\n check: boolean;\n fix: boolean;\n sourcePath: string;\n};\n\n/**\n * Parses the given CLI arguments.\n *\n * @param args - The arguments to parse.\n * @returns The parsed command line arguments.\n */\nasync function parseCommandLineArguments(\n args: string[],\n): Promise<CommandLineArguments> {\n const {\n check,\n fix,\n path: sourcePath,\n } = await yargs(args)\n .command(\n '$0 [path]',\n 'Generate method action types for controller and service messengers',\n (yargsInstance) => {\n yargsInstance.positional('path', {\n type: 'string',\n description:\n 'Path to the folder where controllers/services are located',\n default: 'src',\n });\n },\n )\n .option('check', {\n type: 'boolean',\n description: 'Check if generated action type files are up to date',\n default: false,\n })\n .option('fix', {\n type: 'boolean',\n description: 'Generate/update action type files',\n default: false,\n })\n .help()\n .check((argv) => {\n if (!argv.check && !argv.fix) {\n throw new Error('Either --check or --fix must be provided.\\n');\n }\n return true;\n }).argv;\n\n return {\n check,\n fix,\n sourcePath: sourcePath as string,\n };\n}\n\n/**\n * Attempt to load ESLint from the current project. Returns null if unavailable.\n *\n * @returns An ESLint object with instance and static methods, or null if unavailable.\n */\nasync function loadESLint(): Promise<ESLint | null> {\n try {\n const { ESLint: ESLintClass } = await import('eslint');\n const instance = new ESLintClass({\n fix: true,\n errorOnUnmatchedPattern: false,\n });\n return {\n instance,\n eslintClass: ESLintClass,\n };\n } catch {\n console.warn(\n 'āš ļø ESLint could not be loaded. Generated files will not be formatted.',\n );\n return null;\n }\n}\n\n/**\n * Main entry point for the CLI.\n */\nasync function main(): Promise<void> {\n const { fix, sourcePath } = await parseCommandLineArguments(\n globalThis.process.argv.slice(2),\n );\n\n console.log(\n 'šŸ” Searching for controllers/services with MESSENGER_EXPOSED_METHODS...',\n );\n\n const sources = await findSourcesWithExposedMethods(sourcePath);\n\n if (sources.length === 0) {\n console.log(\n 'āš ļø No controllers/services found with MESSENGER_EXPOSED_METHODS',\n );\n return;\n }\n\n console.log(\n `šŸ“¦ Found ${sources.length} controller(s)/service(s) with exposed methods`,\n );\n\n const eslint = await loadESLint();\n\n if (fix) {\n const success = await generateAllActionTypesFiles(sources, eslint);\n if (success) {\n console.log('\\nšŸŽ‰ All action types generated successfully!');\n } else {\n // eslint-disable-next-line no-restricted-globals\n process.exitCode = 1;\n }\n } else {\n const success = await checkActionTypesFiles(sources, eslint);\n if (!success) {\n // eslint-disable-next-line no-restricted-globals\n process.exitCode = 1;\n }\n }\n}\n\nmain().catch((error) => {\n console.error('āŒ Script failed:', error);\n // eslint-disable-next-line no-restricted-globals\n process.exitCode = 1;\n});\n"]}
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.generateAllActionTypesFiles = void 0;
27
- const fs = __importStar(require("node:fs"));
28
- const path = __importStar(require("node:path"));
29
- const generate_content_1 = require("./generate-content.cjs");
30
- /**
31
- * Generates action types files for all controllers/services.
32
- *
33
- * @param sources - Array of source information objects.
34
- * @param eslint - Optional ESLint instance and static methods for formatting.
35
- * @returns Whether all files were generated successfully.
36
- */
37
- async function generateAllActionTypesFiles(sources, eslint) {
38
- const outputFiles = [];
39
- for (const source of sources) {
40
- console.log(`\nšŸ”§ Processing ${source.name}...`);
41
- const outputDir = path.dirname(source.filePath);
42
- const baseFileName = path.basename(source.filePath, '.ts');
43
- const outputFile = path.join(outputDir, `${baseFileName}-method-action-types.ts`);
44
- const generatedContent = (0, generate_content_1.generateActionTypesContent)(source);
45
- await fs.promises.writeFile(outputFile, generatedContent, 'utf8');
46
- outputFiles.push(outputFile);
47
- console.log(`āœ… Generated action types for ${source.name}`);
48
- }
49
- if (outputFiles.length > 0 && eslint) {
50
- console.log('\nšŸ“ Running ESLint on generated files...');
51
- const results = await eslint.instance.lintFiles(outputFiles);
52
- await eslint.eslintClass.outputFixes(results);
53
- const errors = eslint.eslintClass.getErrorResults(results);
54
- if (errors.length > 0) {
55
- console.error('āŒ ESLint errors:', errors);
56
- return false;
57
- }
58
- console.log('āœ… ESLint formatting applied');
59
- }
60
- return true;
61
- }
62
- exports.generateAllActionTypesFiles = generateAllActionTypesFiles;
63
- //# sourceMappingURL=fix.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix.cjs","sourceRoot":"","sources":["../../src/generate-action-types/fix.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAElC,6DAAgE;AAIhE;;;;;;GAMG;AACI,KAAK,UAAU,2BAA2B,CAC/C,OAAqB,EACrB,MAAqB;IAErB,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,GAAG,YAAY,yBAAyB,CACzC,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAA,6CAA0B,EAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAClE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAnCD,kEAmCC","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { generateActionTypesContent } from './generate-content';\nimport type { SourceInfo } from './parse-source';\nimport type { ESLint } from './types';\n\n/**\n * Generates action types files for all controllers/services.\n *\n * @param sources - Array of source information objects.\n * @param eslint - Optional ESLint instance and static methods for formatting.\n * @returns Whether all files were generated successfully.\n */\nexport async function generateAllActionTypesFiles(\n sources: SourceInfo[],\n eslint: ESLint | null,\n): Promise<boolean> {\n const outputFiles: string[] = [];\n\n for (const source of sources) {\n console.log(`\\nšŸ”§ Processing ${source.name}...`);\n const outputDir = path.dirname(source.filePath);\n const baseFileName = path.basename(source.filePath, '.ts');\n const outputFile = path.join(\n outputDir,\n `${baseFileName}-method-action-types.ts`,\n );\n\n const generatedContent = generateActionTypesContent(source);\n await fs.promises.writeFile(outputFile, generatedContent, 'utf8');\n outputFiles.push(outputFile);\n console.log(`āœ… Generated action types for ${source.name}`);\n }\n\n if (outputFiles.length > 0 && eslint) {\n console.log('\\nšŸ“ Running ESLint on generated files...');\n\n const results = await eslint.instance.lintFiles(outputFiles);\n await eslint.eslintClass.outputFixes(results);\n const errors = eslint.eslintClass.getErrorResults(results);\n if (errors.length > 0) {\n console.error('āŒ ESLint errors:', errors);\n return false;\n }\n console.log('āœ… ESLint formatting applied');\n }\n\n return true;\n}\n"]}
@@ -1,11 +0,0 @@
1
- import type { SourceInfo } from "./parse-source.cjs";
2
- import type { ESLint } from "./types.cjs";
3
- /**
4
- * Generates action types files for all controllers/services.
5
- *
6
- * @param sources - Array of source information objects.
7
- * @param eslint - Optional ESLint instance and static methods for formatting.
8
- * @returns Whether all files were generated successfully.
9
- */
10
- export declare function generateAllActionTypesFiles(sources: SourceInfo[], eslint: ESLint | null): Promise<boolean>;
11
- //# sourceMappingURL=fix.d.cts.map