@hexaijs/plugin-application-builder 0.1.1 → 0.2.0

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 (53) hide show
  1. package/dist/cli.d.ts +0 -2
  2. package/dist/cli.js +569 -52
  3. package/dist/cli.js.map +1 -1
  4. package/dist/decorators/index.d.ts +8 -6
  5. package/dist/decorators/index.js +13 -31
  6. package/dist/decorators/index.js.map +1 -1
  7. package/dist/index.d.ts +48 -5
  8. package/dist/index.js +596 -15
  9. package/dist/index.js.map +1 -1
  10. package/package.json +24 -12
  11. package/dist/application-builder-generator.d.ts +0 -15
  12. package/dist/application-builder-generator.d.ts.map +0 -1
  13. package/dist/application-builder-generator.js +0 -81
  14. package/dist/application-builder-generator.js.map +0 -1
  15. package/dist/cli.d.ts.map +0 -1
  16. package/dist/code-generator.d.ts +0 -30
  17. package/dist/code-generator.d.ts.map +0 -1
  18. package/dist/code-generator.js +0 -131
  19. package/dist/code-generator.js.map +0 -1
  20. package/dist/config-loader.d.ts +0 -3
  21. package/dist/config-loader.d.ts.map +0 -1
  22. package/dist/config-loader.js +0 -65
  23. package/dist/config-loader.js.map +0 -1
  24. package/dist/config.d.ts +0 -13
  25. package/dist/config.d.ts.map +0 -1
  26. package/dist/config.js +0 -31
  27. package/dist/config.js.map +0 -1
  28. package/dist/decorators/index.d.ts.map +0 -1
  29. package/dist/errors.d.ts +0 -13
  30. package/dist/errors.d.ts.map +0 -1
  31. package/dist/errors.js +0 -32
  32. package/dist/errors.js.map +0 -1
  33. package/dist/hexai-plugin.d.ts +0 -30
  34. package/dist/hexai-plugin.d.ts.map +0 -1
  35. package/dist/hexai-plugin.js +0 -81
  36. package/dist/hexai-plugin.js.map +0 -1
  37. package/dist/index.d.ts.map +0 -1
  38. package/dist/main.d.ts +0 -6
  39. package/dist/main.d.ts.map +0 -1
  40. package/dist/main.js +0 -53
  41. package/dist/main.js.map +0 -1
  42. package/dist/metadata-extractor.d.ts +0 -25
  43. package/dist/metadata-extractor.d.ts.map +0 -1
  44. package/dist/metadata-extractor.js +0 -247
  45. package/dist/metadata-extractor.js.map +0 -1
  46. package/dist/test.d.ts +0 -15
  47. package/dist/test.d.ts.map +0 -1
  48. package/dist/test.js +0 -104
  49. package/dist/test.js.map +0 -1
  50. package/dist/types.d.ts +0 -22
  51. package/dist/types.d.ts.map +0 -1
  52. package/dist/types.js +0 -3
  53. package/dist/types.js.map +0 -1
package/dist/errors.js DELETED
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MessageClassNotFoundError = exports.DuplicateQueryHandlerError = exports.DuplicateEventHandlerError = exports.DuplicateCommandHandlerError = void 0;
4
- class DuplicateCommandHandlerError extends Error {
5
- constructor(commandClassName, handlers) {
6
- super(`Duplicate command handlers for "${commandClassName}": ${handlers.join(", ")}`);
7
- this.name = "DuplicateCommandHandlerError";
8
- }
9
- }
10
- exports.DuplicateCommandHandlerError = DuplicateCommandHandlerError;
11
- class DuplicateEventHandlerError extends Error {
12
- constructor(eventName, handlers) {
13
- super(`Duplicate event handlers for event "${eventName}": ${handlers.join(", ")}`);
14
- this.name = "DuplicateEventHandlerError";
15
- }
16
- }
17
- exports.DuplicateEventHandlerError = DuplicateEventHandlerError;
18
- class DuplicateQueryHandlerError extends Error {
19
- constructor(queryClassName, handlers) {
20
- super(`Duplicate query handlers for "${queryClassName}": ${handlers.join(", ")}`);
21
- this.name = "DuplicateQueryHandlerError";
22
- }
23
- }
24
- exports.DuplicateQueryHandlerError = DuplicateQueryHandlerError;
25
- class MessageClassNotFoundError extends Error {
26
- constructor(messageClassName, filePath) {
27
- super(`Cannot find "${messageClassName}" - not imported and not defined in "${filePath}"`);
28
- this.name = "MessageClassNotFoundError";
29
- }
30
- }
31
- exports.MessageClassNotFoundError = MessageClassNotFoundError;
32
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,4BAA6B,SAAQ,KAAK;IACnD,YAAY,gBAAwB,EAAE,QAAkB;QACpD,KAAK,CACD,mCAAmC,gBAAgB,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC/C,CAAC;CACJ;AAPD,oEAOC;AAED,MAAa,0BAA2B,SAAQ,KAAK;IACjD,YAAY,SAAiB,EAAE,QAAkB;QAC7C,KAAK,CACD,uCAAuC,SAAS,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC7C,CAAC;CACJ;AAPD,gEAOC;AAED,MAAa,0BAA2B,SAAQ,KAAK;IACjD,YAAY,cAAsB,EAAE,QAAkB;QAClD,KAAK,CACD,iCAAiC,cAAc,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC7C,CAAC;CACJ;AAPD,gEAOC;AAED,MAAa,yBAA0B,SAAQ,KAAK;IAChD,YAAY,gBAAwB,EAAE,QAAgB;QAClD,KAAK,CACD,gBAAgB,gBAAgB,wCAAwC,QAAQ,GAAG,CACtF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,CAAC;CACJ;AAPD,8DAOC"}
@@ -1,30 +0,0 @@
1
- import type { HexaiCliPlugin } from "@hexaijs/cli";
2
- /**
3
- * Configuration for the application-builder plugin.
4
- * Since this plugin uses per-context config files (hexai.config.ts),
5
- * the root hexai.config.ts config is minimal.
6
- */
7
- export interface ApplicationBuilderPluginConfig {
8
- /**
9
- * Default config file name to look for in each context.
10
- * Defaults to "hexai.config.ts".
11
- */
12
- configFile?: string;
13
- }
14
- /**
15
- * CLI plugin definition for hexai integration.
16
- *
17
- * This allows the application builder to be invoked via `pnpm hexai generate-app-builder`.
18
- * Each bounded context should have its own `hexai.config.ts` file.
19
- *
20
- * @example
21
- * ```bash
22
- * # Generate for a specific context
23
- * pnpm hexai generate-app-builder --context-path packages/assignment
24
- *
25
- * # Use a custom config file name
26
- * pnpm hexai generate-app-builder --context-path packages/assignment --config-file custom.config.ts
27
- * ```
28
- */
29
- export declare const cliPlugin: HexaiCliPlugin<ApplicationBuilderPluginConfig>;
30
- //# sourceMappingURL=hexai-plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hexai-plugin.d.ts","sourceRoot":"","sources":["../src/hexai-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,cAAc,CAAC;AAI9D;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC3C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,EAAE,cAAc,CAAC,8BAA8B,CAkCpE,CAAC"}
@@ -1,81 +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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.cliPlugin = void 0;
37
- const path = __importStar(require("path"));
38
- const index_1 = require("./index");
39
- /**
40
- * CLI plugin definition for hexai integration.
41
- *
42
- * This allows the application builder to be invoked via `pnpm hexai generate-app-builder`.
43
- * Each bounded context should have its own `hexai.config.ts` file.
44
- *
45
- * @example
46
- * ```bash
47
- * # Generate for a specific context
48
- * pnpm hexai generate-app-builder --context-path packages/assignment
49
- *
50
- * # Use a custom config file name
51
- * pnpm hexai generate-app-builder --context-path packages/assignment --config-file custom.config.ts
52
- * ```
53
- */
54
- exports.cliPlugin = {
55
- name: "generate-app-builder",
56
- description: "Generate ApplicationBuilder code from decorated handlers",
57
- options: [
58
- {
59
- flags: "-p, --context-path <path>",
60
- description: "Path to the bounded context directory",
61
- required: true,
62
- },
63
- {
64
- flags: "-f, --config-file <name>",
65
- description: "Config file name to use (default: hexai.config.ts)",
66
- },
67
- ],
68
- run: async (args, config) => {
69
- const contextPath = path.resolve(String(args.contextPath));
70
- // Priority: CLI arg > hexai.config.ts plugin config > default
71
- const configFile = args.configFile !== undefined
72
- ? String(args.configFile)
73
- : config.configFile;
74
- console.log(`Generating application builder for: ${contextPath}`);
75
- await (0, index_1.generateApplicationBuilder)(contextPath, {
76
- configFile,
77
- });
78
- console.log("✓ Application builder generated successfully");
79
- },
80
- };
81
- //# sourceMappingURL=hexai-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hexai-plugin.js","sourceRoot":"","sources":["../src/hexai-plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAA6B;AAC7B,mCAAqD;AAerD;;;;;;;;;;;;;;GAcG;AACU,QAAA,SAAS,GAAmD;IACrE,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,0DAA0D;IACvE,OAAO,EAAE;QACL;YACI,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,IAAI;SACjB;QACD;YACI,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,oDAAoD;SACpE;KACkB;IACvB,GAAG,EAAE,KAAK,EACN,IAA6B,EAC7B,MAAsC,EACzB,EAAE;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3D,8DAA8D;QAC9D,MAAM,UAAU,GACZ,IAAI,CAAC,UAAU,KAAK,SAAS;YACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACzB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,uCAAuC,WAAW,EAAE,CAAC,CAAC;QAElE,MAAM,IAAA,kCAA0B,EAAC,WAAW,EAAE;YAC1C,UAAU;SACb,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAChE,CAAC;CACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,mBAAmB,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,KAAK,8BAA8B,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/main.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export type { HandlerMetadata, CommandHandlerMetadata, EventHandlerMetadata, } from "./types";
2
- export { HandlerMetadataExtractor } from "./metadata-extractor";
3
- export declare function generateApplicationBuilder(contextPath: string, options?: {
4
- configFile?: string;
5
- }): Promise<void>;
6
- //# sourceMappingURL=main.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAKA,YAAY,EACR,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,wBAAsB,0BAA0B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;CAClB,GACP,OAAO,CAAC,IAAI,CAAC,CAWf"}
package/dist/main.js DELETED
@@ -1,53 +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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.HandlerMetadataExtractor = void 0;
37
- exports.generateApplicationBuilder = generateApplicationBuilder;
38
- const path = __importStar(require("path"));
39
- const application_builder_generator_1 = require("./application-builder-generator");
40
- const config_loader_1 = require("./config-loader");
41
- var metadata_extractor_1 = require("./metadata-extractor");
42
- Object.defineProperty(exports, "HandlerMetadataExtractor", { enumerable: true, get: function () { return metadata_extractor_1.HandlerMetadataExtractor; } });
43
- async function generateApplicationBuilder(contextPath, options = {}) {
44
- let configFile = "hexai.config.ts";
45
- if (options.configFile) {
46
- configFile = options.configFile;
47
- }
48
- const configPath = path.join(contextPath, configFile);
49
- const config = await (0, config_loader_1.loadConfig)(configPath);
50
- const generator = new application_builder_generator_1.ApplicationBuilderGenerator(contextPath, config);
51
- await generator.generate();
52
- }
53
- //# sourceMappingURL=main.js.map
package/dist/main.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,gEAgBC;AA5BD,2CAA6B;AAC7B,mFAA8E;AAC9E,mDAA6C;AAQ7C,2DAAgE;AAAvD,8HAAA,wBAAwB,OAAA;AAE1B,KAAK,UAAU,0BAA0B,CAC5C,WAAmB,EACnB,UAEI,EAAE;IAEN,IAAI,UAAU,GAAG,iBAAiB,CAAC;IACnC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAU,EAAC,UAAU,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAI,2DAA2B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
@@ -1,25 +0,0 @@
1
- import { HandlerMetadata } from "./types";
2
- /**
3
- * Extracts handler metadata from TypeScript files using AST parsing
4
- */
5
- export declare class HandlerMetadataExtractor {
6
- private contextPath;
7
- private outputFile;
8
- private config;
9
- constructor(contextPath: string, outputFile: string, config?: {
10
- commandHandlerDecorator?: string;
11
- eventHandlerDecorator?: string;
12
- });
13
- extractHandlersMetadata(files: string[]): HandlerMetadata[];
14
- private extractFromClass;
15
- private extractMessageHandlerMetadata;
16
- private isClassDefinedInFile;
17
- private extractCommandHandlerMetadata;
18
- private extractEventHandlerMetadata;
19
- private extractQueryHandlerMetadata;
20
- private findImportForSymbol;
21
- private toRelativeImport;
22
- private parseObjectLiteral;
23
- private resolvePathAlias;
24
- }
25
- //# sourceMappingURL=metadata-extractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metadata-extractor.d.ts","sourceRoot":"","sources":["../src/metadata-extractor.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,eAAe,EAIlB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,wBAAwB;IAU7B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAVtB,OAAO,CAAC,MAAM,CAMZ;gBAGU,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAC1B,MAAM,GAAE;QACJ,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAC7B;IAWV,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE;IA6B3D,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,6BAA6B;IAqCrC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,6BAA6B;IAsBrC,OAAO,CAAC,2BAA2B;IAmBnC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,gBAAgB;CAqB3B"}
@@ -1,247 +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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.HandlerMetadataExtractor = void 0;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const ts = __importStar(require("typescript"));
40
- const errors_1 = require("./errors");
41
- /**
42
- * Extracts handler metadata from TypeScript files using AST parsing
43
- */
44
- class HandlerMetadataExtractor {
45
- contextPath;
46
- outputFile;
47
- config = {
48
- commandHandlerDecorator: "CommandHandlerMarker",
49
- eventHandlerDecorator: "EventHandlerMarker",
50
- };
51
- constructor(contextPath, outputFile, config = {}) {
52
- this.contextPath = contextPath;
53
- this.outputFile = outputFile;
54
- if (config.commandHandlerDecorator) {
55
- this.config.commandHandlerDecorator =
56
- config.commandHandlerDecorator;
57
- }
58
- if (config.eventHandlerDecorator) {
59
- this.config.eventHandlerDecorator = config.eventHandlerDecorator;
60
- }
61
- }
62
- extractHandlersMetadata(files) {
63
- const handlers = [];
64
- for (const file of files) {
65
- const sourceCode = fs.readFileSync(file, "utf-8");
66
- const sourceFile = ts.createSourceFile(file, sourceCode, ts.ScriptTarget.Latest, true);
67
- ts.forEachChild(sourceFile, (node) => {
68
- if (ts.isClassDeclaration(node)) {
69
- const metadata = this.extractFromClass(node, file, sourceFile);
70
- if (metadata) {
71
- handlers.push(metadata);
72
- }
73
- }
74
- });
75
- }
76
- return handlers;
77
- }
78
- extractFromClass(classNode, filePath, sourceFile) {
79
- const className = classNode.name?.text;
80
- if (!className)
81
- return null;
82
- // Get decorators using TypeScript 5.0+ API
83
- const decorators = ts.canHaveDecorators(classNode)
84
- ? ts.getDecorators(classNode)
85
- : undefined;
86
- if (!decorators)
87
- return null;
88
- for (const decorator of decorators) {
89
- const expression = decorator.expression;
90
- if (!ts.isCallExpression(expression))
91
- continue;
92
- const decoratorName = expression.expression.getText();
93
- if (decoratorName === "CommandHandlerMarker") {
94
- return this.extractCommandHandlerMetadata(className, expression, filePath, sourceFile);
95
- }
96
- if (decoratorName === "EventHandlerMarker") {
97
- return this.extractEventHandlerMetadata(className, expression, filePath);
98
- }
99
- if (decoratorName === "QueryHandlerMarker") {
100
- return this.extractQueryHandlerMetadata(className, expression, filePath, sourceFile);
101
- }
102
- }
103
- return null;
104
- }
105
- extractMessageHandlerMetadata(className, expression, filePath, sourceFile) {
106
- const messageClassArg = expression.arguments[0];
107
- const messageClassName = messageClassArg.getText();
108
- const messageImport = this.findImportForSymbol(messageClassName, sourceFile);
109
- let messagePath = "";
110
- let resolvedMessageClassName = messageClassName;
111
- if (messageImport) {
112
- const handlerDir = path.dirname(filePath);
113
- const resolvedImportPath = this.resolvePathAlias(messageImport.path);
114
- const messageAbsolutePath = path.resolve(handlerDir, resolvedImportPath + ".ts");
115
- messagePath = this.toRelativeImport(messageAbsolutePath);
116
- resolvedMessageClassName = messageImport.symbol;
117
- }
118
- else if (this.isClassDefinedInFile(messageClassName, sourceFile)) {
119
- messagePath = this.toRelativeImport(filePath);
120
- }
121
- else {
122
- throw new errors_1.MessageClassNotFoundError(messageClassName, filePath);
123
- }
124
- return {
125
- messagePath,
126
- messageClassName: resolvedMessageClassName,
127
- };
128
- }
129
- isClassDefinedInFile(className, sourceFile) {
130
- for (const statement of sourceFile.statements) {
131
- if (ts.isClassDeclaration(statement) &&
132
- statement.name?.text === className) {
133
- return true;
134
- }
135
- }
136
- return false;
137
- }
138
- extractCommandHandlerMetadata(className, expression, filePath, sourceFile) {
139
- const { messagePath, messageClassName } = this.extractMessageHandlerMetadata(className, expression, filePath, sourceFile);
140
- return {
141
- type: "command",
142
- handlerPath: this.toRelativeImport(filePath),
143
- handlerClassName: className,
144
- commandPath: messagePath,
145
- commandClassName: messageClassName,
146
- };
147
- }
148
- extractEventHandlerMetadata(className, expression, filePath) {
149
- let options = {};
150
- if (expression.arguments.length > 0) {
151
- const optionsArg = expression.arguments[0];
152
- options = this.parseObjectLiteral(optionsArg);
153
- }
154
- return {
155
- type: "event",
156
- handlerPath: this.toRelativeImport(filePath),
157
- handlerClassName: className,
158
- eventHandlerOptions: options,
159
- };
160
- }
161
- extractQueryHandlerMetadata(className, expression, filePath, sourceFile) {
162
- const { messagePath, messageClassName } = this.extractMessageHandlerMetadata(className, expression, filePath, sourceFile);
163
- return {
164
- type: "query",
165
- handlerPath: this.toRelativeImport(filePath),
166
- handlerClassName: className,
167
- queryPath: messagePath,
168
- queryClassName: messageClassName,
169
- };
170
- }
171
- findImportForSymbol(symbol, sourceFile) {
172
- for (const statement of sourceFile.statements) {
173
- if (ts.isImportDeclaration(statement)) {
174
- const importClause = statement.importClause;
175
- const moduleSpecifier = statement.moduleSpecifier.text;
176
- if (importClause?.namedBindings &&
177
- ts.isNamedImports(importClause.namedBindings)) {
178
- for (const element of importClause.namedBindings.elements) {
179
- if (element.name.text === symbol) {
180
- return {
181
- path: moduleSpecifier,
182
- symbol: element.name.text,
183
- };
184
- }
185
- }
186
- }
187
- }
188
- }
189
- return null;
190
- }
191
- toRelativeImport(absolutePath) {
192
- const outputFileAbsolutePath = path.join(this.contextPath, this.outputFile);
193
- const outputDir = path.dirname(outputFileAbsolutePath);
194
- const relative = path.relative(outputDir, absolutePath);
195
- const withoutExtension = relative.replace(/\.ts$/, "");
196
- // Ensure relative path has proper prefix
197
- return withoutExtension.startsWith(".")
198
- ? withoutExtension
199
- : "./" + withoutExtension;
200
- }
201
- parseObjectLiteral(node) {
202
- if (!ts.isObjectLiteralExpression(node)) {
203
- return {};
204
- }
205
- const result = {};
206
- for (const property of node.properties) {
207
- if (ts.isPropertyAssignment(property)) {
208
- const name = property.name.getText();
209
- const value = property.initializer;
210
- if (ts.isStringLiteral(value)) {
211
- result[name] = value.text;
212
- }
213
- else if (ts.isNumericLiteral(value)) {
214
- result[name] = Number(value.text);
215
- }
216
- else if (value.kind === ts.SyntaxKind.TrueKeyword) {
217
- result[name] = true;
218
- }
219
- else if (value.kind === ts.SyntaxKind.FalseKeyword) {
220
- result[name] = false;
221
- }
222
- }
223
- }
224
- return result;
225
- }
226
- resolvePathAlias(importPath) {
227
- const tsconfigPath = path.join(this.contextPath, "tsconfig.json");
228
- if (!fs.existsSync(tsconfigPath))
229
- return importPath;
230
- const tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, "utf-8"));
231
- const paths = tsconfig.compilerOptions?.paths;
232
- const baseUrl = tsconfig.compilerOptions?.baseUrl || ".";
233
- if (!paths)
234
- return importPath;
235
- for (const [alias, targets] of Object.entries(paths)) {
236
- const aliasPrefix = alias.replace("/*", "");
237
- if (importPath.startsWith(aliasPrefix)) {
238
- const targetBase = targets[0].replace("/*", "");
239
- const resolvedBase = path.join(this.contextPath, baseUrl, targetBase);
240
- return importPath.replace(aliasPrefix, resolvedBase);
241
- }
242
- }
243
- return importPath;
244
- }
245
- }
246
- exports.HandlerMetadataExtractor = HandlerMetadataExtractor;
247
- //# sourceMappingURL=metadata-extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metadata-extractor.js","sourceRoot":"","sources":["../src/metadata-extractor.ts"],"names":[],"mappings":"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"}
package/dist/test.d.ts DELETED
@@ -1,15 +0,0 @@
1
- export interface TestContext {
2
- readonly path: string;
3
- readonly outputDir: string;
4
- readonly outputFile: string;
5
- generate(): Promise<void>;
6
- cleanUp(): void;
7
- isOutputFilePresent(): boolean;
8
- expectOutputFileToExist(): void;
9
- expectOutputFileToContain(...strings: string[]): void;
10
- expectOutputFileNotToContain(...strings: string[]): void;
11
- getOutputFileContent(): string;
12
- }
13
- export declare function makeContext(name: string): TestContext;
14
- export declare function useContext(name: string): TestContext;
15
- //# sourceMappingURL=test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,IAAI,CAAC;IAChB,mBAAmB,IAAI,OAAO,CAAC;IAC/B,uBAAuB,IAAI,IAAI,CAAC;IAChC,yBAAyB,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtD,4BAA4B,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzD,oBAAoB,IAAI,MAAM,CAAC;CAClC;AAcD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CA2CrD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAYpD"}
package/dist/test.js DELETED
@@ -1,104 +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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.makeContext = makeContext;
37
- exports.useContext = useContext;
38
- const path = __importStar(require("node:path"));
39
- const fs = __importStar(require("node:fs"));
40
- const vitest_1 = require("vitest");
41
- const main_1 = require("./main");
42
- const FIXTURES_DIR = path.join(__dirname, "fixtures");
43
- const GENERATED_DIR = "src/.generated";
44
- const OUTPUT_FILENAME = "application-builder.ts";
45
- const DEFAULT_CONFIG_FILE = "hexai.config.ts";
46
- function getContextPath(contextName) {
47
- return path.join(FIXTURES_DIR, contextName);
48
- }
49
- function getOutputDir(contextPath) {
50
- return path.join(contextPath, GENERATED_DIR);
51
- }
52
- function getOutputFile(contextPath) {
53
- return path.join(getOutputDir(contextPath), OUTPUT_FILENAME);
54
- }
55
- function makeContext(name) {
56
- return {
57
- path: getContextPath(name),
58
- outputDir: getOutputDir(getContextPath(name)),
59
- outputFile: getOutputFile(getContextPath(name)),
60
- generate() {
61
- return (0, main_1.generateApplicationBuilder)(this.path, {
62
- configFile: DEFAULT_CONFIG_FILE,
63
- });
64
- },
65
- cleanUp() {
66
- if (fs.existsSync(this.outputFile)) {
67
- fs.unlinkSync(this.outputFile);
68
- }
69
- if (fs.existsSync(this.outputDir)) {
70
- fs.rmdirSync(this.outputDir);
71
- }
72
- },
73
- isOutputFilePresent() {
74
- return fs.existsSync(this.outputFile);
75
- },
76
- expectOutputFileToExist() {
77
- (0, vitest_1.expect)(this.isOutputFilePresent(), `Output file ${this.outputFile} does not exist`).toBe(true);
78
- },
79
- expectOutputFileToContain(...strings) {
80
- this.expectOutputFileToExist();
81
- const content = this.getOutputFileContent();
82
- strings.forEach((s) => (0, vitest_1.expect)(content).toContain(s));
83
- },
84
- expectOutputFileNotToContain(...strings) {
85
- this.expectOutputFileToExist();
86
- const content = this.getOutputFileContent();
87
- strings.forEach((s) => (0, vitest_1.expect)(content).not.toContain(s));
88
- },
89
- getOutputFileContent() {
90
- return fs.readFileSync(this.outputFile, "utf-8");
91
- },
92
- };
93
- }
94
- function useContext(name) {
95
- const context = makeContext(name);
96
- (0, vitest_1.beforeEach)(() => {
97
- context.cleanUp();
98
- return () => {
99
- context.cleanUp();
100
- };
101
- });
102
- return context;
103
- }
104
- //# sourceMappingURL=test.js.map
package/dist/test.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,kCA2CC;AAED,gCAYC;AA9FD,gDAAkC;AAClC,4CAA8B;AAE9B,mCAA4C;AAE5C,iCAAoD;AAEpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACtD,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACjD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAe9C,SAAS,cAAc,CAAC,WAAmB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,WAAmB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACpC,OAAO;QACH,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;QAC1B,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7C,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,QAAQ;YACJ,OAAO,IAAA,iCAA0B,EAAC,IAAI,CAAC,IAAI,EAAE;gBACzC,UAAU,EAAE,mBAAmB;aAClC,CAAC,CAAC;QACP,CAAC;QACD,OAAO;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;QACL,CAAC;QACD,mBAAmB;YACf,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QACD,uBAAuB;YACnB,IAAA,eAAM,EACF,IAAI,CAAC,mBAAmB,EAAE,EAC1B,eAAe,IAAI,CAAC,UAAU,iBAAiB,CAClD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QACD,yBAAyB,CAAC,GAAG,OAAiB;YAC1C,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,4BAA4B,CAAC,GAAG,OAAiB;YAC7C,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,oBAAoB;YAChB,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;KACJ,CAAC;AACN,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAElC,IAAA,mBAAU,EAAC,GAAG,EAAE;QACZ,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,OAAO,GAAG,EAAE;YACR,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACnB,CAAC"}