@hexaijs/plugin-contracts-generator 0.2.0 → 0.2.2

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 (98) hide show
  1. package/README.md +33 -25
  2. package/dist/ast-utils.d.ts +6 -0
  3. package/dist/ast-utils.d.ts.map +1 -0
  4. package/dist/ast-utils.js +73 -0
  5. package/dist/ast-utils.js.map +1 -0
  6. package/dist/class-analyzer.d.ts +16 -0
  7. package/dist/class-analyzer.d.ts.map +1 -0
  8. package/dist/class-analyzer.js +114 -0
  9. package/dist/class-analyzer.js.map +1 -0
  10. package/dist/cli.d.ts +32 -1
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +226 -2480
  13. package/dist/cli.js.map +1 -1
  14. package/dist/config-loader.d.ts +24 -0
  15. package/dist/config-loader.d.ts.map +1 -0
  16. package/dist/config-loader.js +126 -0
  17. package/dist/config-loader.js.map +1 -0
  18. package/dist/context-config.d.ts +44 -0
  19. package/dist/context-config.d.ts.map +1 -0
  20. package/dist/context-config.js +140 -0
  21. package/dist/context-config.js.map +1 -0
  22. package/dist/domain/index.d.ts +2 -0
  23. package/dist/domain/index.d.ts.map +1 -0
  24. package/dist/domain/index.js +2 -0
  25. package/dist/domain/index.js.map +1 -0
  26. package/dist/domain/types.d.ts +182 -0
  27. package/dist/domain/types.d.ts.map +1 -0
  28. package/dist/domain/types.js +49 -0
  29. package/dist/domain/types.js.map +1 -0
  30. package/dist/errors.d.ts +72 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +112 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/file-copier.d.ts +84 -0
  35. package/dist/file-copier.d.ts.map +1 -0
  36. package/dist/file-copier.js +721 -0
  37. package/dist/file-copier.js.map +1 -0
  38. package/dist/file-graph-resolver.d.ts +42 -0
  39. package/dist/file-graph-resolver.d.ts.map +1 -0
  40. package/dist/file-graph-resolver.js +138 -0
  41. package/dist/file-graph-resolver.js.map +1 -0
  42. package/dist/file-system.d.ts +26 -0
  43. package/dist/file-system.d.ts.map +1 -0
  44. package/dist/file-system.js +30 -0
  45. package/dist/file-system.js.map +1 -0
  46. package/dist/hexai-plugin.d.ts +16 -0
  47. package/dist/hexai-plugin.d.ts.map +1 -0
  48. package/dist/hexai-plugin.js +56 -0
  49. package/dist/hexai-plugin.js.map +1 -0
  50. package/dist/import-analyzer.d.ts +6 -0
  51. package/dist/import-analyzer.d.ts.map +1 -0
  52. package/dist/import-analyzer.js +39 -0
  53. package/dist/import-analyzer.js.map +1 -0
  54. package/dist/index.d.ts +39 -531
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +56 -2739
  57. package/dist/index.js.map +1 -1
  58. package/dist/logger.d.ts +21 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/logger.js +43 -0
  61. package/dist/logger.js.map +1 -0
  62. package/dist/parser.d.ts +32 -0
  63. package/dist/parser.d.ts.map +1 -0
  64. package/dist/parser.js +202 -0
  65. package/dist/parser.js.map +1 -0
  66. package/dist/pipeline.d.ts +57 -0
  67. package/dist/pipeline.d.ts.map +1 -0
  68. package/dist/pipeline.js +148 -0
  69. package/dist/pipeline.js.map +1 -0
  70. package/dist/reexport-generator.d.ts +81 -0
  71. package/dist/reexport-generator.d.ts.map +1 -0
  72. package/dist/reexport-generator.js +171 -0
  73. package/dist/reexport-generator.js.map +1 -0
  74. package/dist/registry-generator.d.ts +27 -0
  75. package/dist/registry-generator.d.ts.map +1 -0
  76. package/dist/registry-generator.js +104 -0
  77. package/dist/registry-generator.js.map +1 -0
  78. package/dist/runtime/index.d.ts +2 -23
  79. package/dist/runtime/index.d.ts.map +1 -0
  80. package/dist/runtime/index.js +1 -38
  81. package/dist/runtime/index.js.map +1 -1
  82. package/dist/runtime/message-registry.d.ts +23 -0
  83. package/dist/runtime/message-registry.d.ts.map +1 -0
  84. package/dist/runtime/message-registry.js +35 -0
  85. package/dist/runtime/message-registry.js.map +1 -0
  86. package/dist/scanner.d.ts +21 -0
  87. package/dist/scanner.d.ts.map +1 -0
  88. package/dist/scanner.js +49 -0
  89. package/dist/scanner.js.map +1 -0
  90. package/dist/test-utils.d.ts +23 -0
  91. package/dist/test-utils.d.ts.map +1 -0
  92. package/dist/test-utils.js +188 -0
  93. package/dist/test-utils.js.map +1 -0
  94. package/package.json +69 -64
  95. package/dist/cli-CPg-O4OY.d.ts +0 -214
  96. package/dist/decorators/index.d.ts +0 -144
  97. package/dist/decorators/index.js +0 -28
  98. package/dist/decorators/index.js.map +0 -1
@@ -0,0 +1,21 @@
1
+ export type LogLevel = "debug" | "info" | "warn" | "error";
2
+ export interface Logger {
3
+ debug(message: string): void;
4
+ info(message: string): void;
5
+ warn(message: string): void;
6
+ error(message: string): void;
7
+ }
8
+ export interface ConsoleLoggerOptions {
9
+ level?: LogLevel;
10
+ }
11
+ export declare class ConsoleLogger implements Logger {
12
+ private readonly level;
13
+ constructor(options?: ConsoleLoggerOptions);
14
+ debug(message: string): void;
15
+ info(message: string): void;
16
+ warn(message: string): void;
17
+ error(message: string): void;
18
+ private shouldLog;
19
+ }
20
+ export declare const noopLogger: Logger;
21
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,MAAM;IACnB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AASD,MAAM,WAAW,oBAAoB;IACjC,KAAK,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,qBAAa,aAAc,YAAW,MAAM;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IAEjC,YAAY,OAAO,GAAE,oBAAyB,EAE7C;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3B;IAED,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1B;IAED,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1B;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3B;IAED,OAAO,CAAC,SAAS;CAGpB;AASD,eAAO,MAAM,UAAU,EAAE,MAAyB,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,43 @@
1
+ const LOG_LEVEL_PRIORITY = {
2
+ debug: 0,
3
+ info: 1,
4
+ warn: 2,
5
+ error: 3,
6
+ };
7
+ export class ConsoleLogger {
8
+ level;
9
+ constructor(options = {}) {
10
+ this.level = options.level ?? "info";
11
+ }
12
+ debug(message) {
13
+ if (this.shouldLog("debug")) {
14
+ console.debug(message);
15
+ }
16
+ }
17
+ info(message) {
18
+ if (this.shouldLog("info")) {
19
+ console.info(message);
20
+ }
21
+ }
22
+ warn(message) {
23
+ if (this.shouldLog("warn")) {
24
+ console.warn(message);
25
+ }
26
+ }
27
+ error(message) {
28
+ if (this.shouldLog("error")) {
29
+ console.error(message);
30
+ }
31
+ }
32
+ shouldLog(level) {
33
+ return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[this.level];
34
+ }
35
+ }
36
+ class NoopLogger {
37
+ debug() { }
38
+ info() { }
39
+ warn() { }
40
+ error() { }
41
+ }
42
+ export const noopLogger = new NoopLogger();
43
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AASA,MAAM,kBAAkB,GAA6B;IACjD,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACX,CAAC;AAMF,MAAM,OAAO,aAAa;IACL,KAAK,CAAW;IAEjC,YAAY,OAAO,GAAyB,EAAE;QAC1C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe;QAChB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe;QAChB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,KAAe;QAC7B,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;CACJ;AAED,MAAM,UAAU;IACZ,KAAK,KAAU,CAAC;IAChB,IAAI,KAAU,CAAC;IACf,IAAI,KAAU,CAAC;IACf,KAAK,KAAU,CAAC;CACnB;AAED,MAAM,CAAC,MAAM,UAAU,GAAW,IAAI,UAAU,EAAE,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { Command, DecoratorNames, DomainEvent, MessageType, Query, ResponseNamingConvention, SourceFile, TypeDefinition } from "./domain/index.js";
2
+ export type { MessageType };
3
+ export interface ParseResult {
4
+ readonly events: readonly DomainEvent[];
5
+ readonly commands: readonly Command[];
6
+ readonly queries: readonly Query[];
7
+ readonly typeDefinitions: readonly TypeDefinition[];
8
+ }
9
+ export interface ParserOptions {
10
+ decoratorNames?: DecoratorNames;
11
+ responseNamingConventions?: readonly ResponseNamingConvention[];
12
+ messageTypes?: readonly MessageType[];
13
+ }
14
+ export declare class Parser {
15
+ private readonly decoratorMappings;
16
+ private readonly responseNamingConventions;
17
+ private readonly messageTypes;
18
+ constructor(options?: ParserOptions);
19
+ parse(sourceCode: string, sourceFileInfo: SourceFile): ParseResult;
20
+ private collectMessagesFromClass;
21
+ private applyNamingConventionMatching;
22
+ private findMatchingResponseType;
23
+ private buildMessage;
24
+ private extractMessageDetails;
25
+ private extractPayload;
26
+ private parsePayloadTypeArgument;
27
+ private flattenIntersectionToFields;
28
+ private extractTypeDefinition;
29
+ private extractInterfaceDefinition;
30
+ private buildTypeDefinition;
31
+ }
32
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAER,OAAO,EACP,cAAc,EACd,WAAW,EAIX,WAAW,EAEX,KAAK,EACL,wBAAwB,EACxB,UAAU,EACV,cAAc,EAGjB,MAAM,mBAAmB,CAAC;AAY3B,YAAY,EAAE,WAAW,EAAE,CAAC;AAI5B,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,aAAa;IAC1B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yBAAyB,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChE,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACzC;AAkCD,qBAAa,MAAM;IACf,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IACvD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAsC;IAChF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAElE,YAAY,OAAO,GAAE,aAAkB,EAKtC;IAED,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,GAAG,WAAW,CAyCjE;IAED,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,6BAA6B;IAkBrC,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,mBAAmB;CAiB9B"}
package/dist/parser.js ADDED
@@ -0,0 +1,202 @@
1
+ import ts from "typescript";
2
+ import { mergeDecoratorNames } from "./domain/index.js";
3
+ import { extractFieldsFromMembers, parseTypeNode } from "./ast-utils.js";
4
+ import { extractClassSourceText, getBaseClassName, getDecoratorOptions, hasDecorator, hasExportModifier, } from "./class-analyzer.js";
5
+ import { extractImports } from "./import-analyzer.js";
6
+ const PAYLOAD_TYPE_ARGUMENT_INDEX = 0;
7
+ function buildDecoratorMappings(decoratorNames) {
8
+ return [
9
+ { decorator: decoratorNames.event, messageType: "event" },
10
+ { decorator: decoratorNames.command, messageType: "command" },
11
+ { decorator: decoratorNames.query, messageType: "query" },
12
+ ];
13
+ }
14
+ function extractTypeParameterNames(typeParameters) {
15
+ if (!typeParameters)
16
+ return undefined;
17
+ return typeParameters.map(tp => tp.name.text);
18
+ }
19
+ export class Parser {
20
+ decoratorMappings;
21
+ responseNamingConventions;
22
+ messageTypes;
23
+ constructor(options = {}) {
24
+ const names = mergeDecoratorNames(options.decoratorNames);
25
+ this.decoratorMappings = buildDecoratorMappings(names);
26
+ this.responseNamingConventions = options.responseNamingConventions ?? [];
27
+ this.messageTypes = options.messageTypes;
28
+ }
29
+ parse(sourceCode, sourceFileInfo) {
30
+ const tsSourceFile = ts.createSourceFile(sourceFileInfo.absolutePath, sourceCode, ts.ScriptTarget.Latest, true);
31
+ const events = [];
32
+ const commands = [];
33
+ const queries = [];
34
+ const typeDefinitions = [];
35
+ const messageCollectors = {
36
+ event: (m) => events.push(m),
37
+ command: (m) => commands.push(m),
38
+ query: (m) => queries.push(m),
39
+ };
40
+ const visit = (node) => {
41
+ if (ts.isClassDeclaration(node) && node.name) {
42
+ this.collectMessagesFromClass(node, sourceCode, tsSourceFile, sourceFileInfo, messageCollectors);
43
+ }
44
+ if (ts.isTypeAliasDeclaration(node) && node.name) {
45
+ typeDefinitions.push(this.extractTypeDefinition(node, sourceFileInfo));
46
+ }
47
+ if (ts.isInterfaceDeclaration(node) && node.name) {
48
+ typeDefinitions.push(this.extractInterfaceDefinition(node, sourceFileInfo));
49
+ }
50
+ ts.forEachChild(node, visit);
51
+ };
52
+ visit(tsSourceFile);
53
+ this.applyNamingConventionMatching(commands, typeDefinitions);
54
+ this.applyNamingConventionMatching(queries, typeDefinitions);
55
+ return { events, commands, queries, typeDefinitions };
56
+ }
57
+ collectMessagesFromClass(node, sourceCode, tsSourceFile, sourceFileInfo, collectors) {
58
+ for (const { decorator, messageType } of this.decoratorMappings) {
59
+ if (!hasDecorator(node, decorator))
60
+ continue;
61
+ if (this.messageTypes && !this.messageTypes.includes(messageType))
62
+ continue;
63
+ const message = this.buildMessage(node, sourceCode, tsSourceFile, sourceFileInfo, messageType, decorator);
64
+ collectors[messageType](message);
65
+ }
66
+ }
67
+ applyNamingConventionMatching(messages, typeDefinitions) {
68
+ for (const message of messages) {
69
+ const hasExplicitResultType = Boolean(message.resultType);
70
+ if (hasExplicitResultType)
71
+ continue;
72
+ const matchedTypeName = this.findMatchingResponseType(message.name, typeDefinitions);
73
+ if (matchedTypeName) {
74
+ message.resultType = {
75
+ kind: "reference",
76
+ name: matchedTypeName,
77
+ };
78
+ }
79
+ }
80
+ }
81
+ findMatchingResponseType(messageName, typeDefinitions) {
82
+ for (const convention of this.responseNamingConventions) {
83
+ const hasSuffix = messageName.endsWith(convention.messageSuffix);
84
+ if (!hasSuffix)
85
+ continue;
86
+ const messagePrefix = messageName.slice(0, -convention.messageSuffix.length);
87
+ const expectedResponseName = messagePrefix + convention.responseSuffix;
88
+ const matchingType = typeDefinitions.find(t => t.name === expectedResponseName);
89
+ if (matchingType)
90
+ return matchingType.name;
91
+ }
92
+ return undefined;
93
+ }
94
+ buildMessage(node, sourceCode, tsSourceFile, sourceFileInfo, messageType, decoratorName) {
95
+ const extracted = this.extractMessageDetails(node, sourceCode, tsSourceFile);
96
+ const decoratorOptions = getDecoratorOptions(node, decoratorName);
97
+ const baseMessage = {
98
+ name: node.name.text,
99
+ messageType,
100
+ sourceFile: sourceFileInfo,
101
+ fields: extracted.fields,
102
+ payloadType: extracted.payloadType,
103
+ sourceText: extracted.sourceText,
104
+ imports: extracted.imports,
105
+ baseClass: extracted.baseClass,
106
+ };
107
+ const explicitResponseName = decoratorOptions?.response;
108
+ const supportsResultType = messageType === "command" || messageType === "query";
109
+ if (!supportsResultType || !explicitResponseName) {
110
+ return baseMessage;
111
+ }
112
+ return {
113
+ ...baseMessage,
114
+ resultType: {
115
+ kind: "reference",
116
+ name: explicitResponseName,
117
+ },
118
+ };
119
+ }
120
+ extractMessageDetails(node, sourceCode, tsSourceFile) {
121
+ const { fields, payloadType } = this.extractPayload(node);
122
+ const sourceText = extractClassSourceText(node, sourceCode);
123
+ const imports = extractImports(tsSourceFile);
124
+ const baseClass = getBaseClassName(node);
125
+ return {
126
+ fields,
127
+ payloadType,
128
+ sourceText,
129
+ imports,
130
+ baseClass,
131
+ };
132
+ }
133
+ extractPayload(node) {
134
+ const emptyPayload = { fields: [] };
135
+ if (!node.heritageClauses)
136
+ return emptyPayload;
137
+ const extendsClause = node.heritageClauses.find(clause => clause.token === ts.SyntaxKind.ExtendsKeyword);
138
+ if (!extendsClause)
139
+ return emptyPayload;
140
+ for (const type of extendsClause.types) {
141
+ const typeArgs = type.typeArguments;
142
+ if (!typeArgs || typeArgs.length === 0)
143
+ continue;
144
+ const payloadTypeArg = typeArgs[PAYLOAD_TYPE_ARGUMENT_INDEX];
145
+ const extractedPayload = this.parsePayloadTypeArgument(payloadTypeArg);
146
+ if (extractedPayload)
147
+ return extractedPayload;
148
+ }
149
+ return emptyPayload;
150
+ }
151
+ parsePayloadTypeArgument(typeArg) {
152
+ if (ts.isTypeReferenceNode(typeArg) && ts.isIdentifier(typeArg.typeName)) {
153
+ return {
154
+ fields: [],
155
+ payloadType: parseTypeNode(typeArg),
156
+ };
157
+ }
158
+ if (ts.isTypeLiteralNode(typeArg)) {
159
+ return {
160
+ fields: extractFieldsFromMembers(typeArg.members),
161
+ };
162
+ }
163
+ if (ts.isIntersectionTypeNode(typeArg)) {
164
+ const parsedType = parseTypeNode(typeArg);
165
+ return {
166
+ fields: this.flattenIntersectionToFields(parsedType),
167
+ payloadType: parsedType,
168
+ };
169
+ }
170
+ return undefined;
171
+ }
172
+ flattenIntersectionToFields(intersection) {
173
+ const fields = [];
174
+ for (const type of intersection.types) {
175
+ if (type.kind === "object") {
176
+ fields.push(...type.fields);
177
+ }
178
+ }
179
+ return fields;
180
+ }
181
+ extractTypeDefinition(node, sourceFileInfo) {
182
+ return this.buildTypeDefinition(node.name.text, "type", sourceFileInfo, parseTypeNode(node.type), node.typeParameters, node);
183
+ }
184
+ extractInterfaceDefinition(node, sourceFileInfo) {
185
+ const body = {
186
+ kind: "object",
187
+ fields: extractFieldsFromMembers(node.members),
188
+ };
189
+ return this.buildTypeDefinition(node.name.text, "interface", sourceFileInfo, body, node.typeParameters, node);
190
+ }
191
+ buildTypeDefinition(name, kind, sourceFile, body, typeParameters, node) {
192
+ return {
193
+ name,
194
+ kind,
195
+ sourceFile,
196
+ body,
197
+ typeParameters: extractTypeParameterNames(typeParameters),
198
+ exported: hasExportModifier(node),
199
+ };
200
+ }
201
+ }
202
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { Scanner } from "./scanner.js";
2
+ import { Parser } from "./parser.js";
3
+ import { FileGraphResolver, type FileGraph } from "./file-graph-resolver.js";
4
+ import { FileCopier } from "./file-copier.js";
5
+ import { ContextConfig } from "./context-config.js";
6
+ import type { DomainEvent, Command, Query, TypeDefinition, ResponseNamingConvention, MessageType } from "./domain/types.js";
7
+ import { type FileSystem } from "./file-system.js";
8
+ import { type Logger } from "./logger.js";
9
+ export interface PipelineDependencies {
10
+ readonly scanner: Scanner;
11
+ readonly parser: Parser;
12
+ readonly fileGraphResolver: FileGraphResolver;
13
+ readonly fileCopier: FileCopier;
14
+ readonly fileSystem: FileSystem;
15
+ readonly logger: Logger;
16
+ }
17
+ export interface PipelineOptions {
18
+ readonly contextName: string;
19
+ readonly sourceDir: string;
20
+ readonly outputDir: string;
21
+ readonly pathAliasRewrites?: Map<string, string>;
22
+ readonly removeDecorators?: boolean;
23
+ }
24
+ export interface PipelineResult {
25
+ readonly events: readonly DomainEvent[];
26
+ readonly commands: readonly Command[];
27
+ readonly queries: readonly Query[];
28
+ readonly copiedFiles: string[];
29
+ }
30
+ export interface ParsedMessages {
31
+ readonly events: readonly DomainEvent[];
32
+ readonly commands: readonly Command[];
33
+ readonly queries: readonly Query[];
34
+ readonly typeDefinitions: readonly TypeDefinition[];
35
+ }
36
+ export declare class ContractsPipeline {
37
+ private readonly deps;
38
+ private readonly messageTypes?;
39
+ private constructor();
40
+ static create(options: {
41
+ contextConfig: ContextConfig;
42
+ responseNamingConventions?: readonly ResponseNamingConvention[];
43
+ fileSystem?: FileSystem;
44
+ logger?: Logger;
45
+ excludeDependencies?: string[];
46
+ messageTypes?: MessageType[];
47
+ }): ContractsPipeline;
48
+ static fromDependencies(deps: PipelineDependencies): ContractsPipeline;
49
+ execute(options: PipelineOptions): Promise<PipelineResult>;
50
+ private collectResponseTypesToExport;
51
+ scan(sourceDir: string): Promise<string[]>;
52
+ parse(files: string[], sourceRoot: string): Promise<ParsedMessages>;
53
+ resolve(entryPoints: string[], sourceRoot: string): Promise<FileGraph>;
54
+ copy(fileGraph: FileGraph, sourceRoot: string, outputDir: string, pathAliasRewrites?: Map<string, string>, responseTypesToExport?: Map<string, string[]>, removeDecorators?: boolean, messageTypes?: readonly MessageType[]): Promise<string[]>;
55
+ exportBarrel(copiedFiles: string[], outputDir: string): Promise<void>;
56
+ }
57
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { join, relative } from "path";
2
+ import { Scanner } from "./scanner.js";
3
+ import { Parser } from "./parser.js";
4
+ import { FileGraphResolver } from "./file-graph-resolver.js";
5
+ import { FileCopier } from "./file-copier.js";
6
+ import { nodeFileSystem } from "./file-system.js";
7
+ import { noopLogger } from "./logger.js";
8
+ const DEFAULT_EXCLUDE_DEPENDENCIES = [
9
+ "**/*.test.ts",
10
+ "**/*.spec.ts",
11
+ "**/*.eh.ts",
12
+ "**/db.ts",
13
+ "**/infra/**",
14
+ ];
15
+ export class ContractsPipeline {
16
+ deps;
17
+ messageTypes;
18
+ constructor(deps, messageTypes) {
19
+ this.deps = deps;
20
+ this.messageTypes = messageTypes;
21
+ }
22
+ static create(options) {
23
+ const fileSystem = options.fileSystem ?? nodeFileSystem;
24
+ const logger = options.logger ?? noopLogger;
25
+ const excludeDependencies = options.excludeDependencies ?? DEFAULT_EXCLUDE_DEPENDENCIES;
26
+ const scanner = new Scanner({ fileSystem, messageTypes: options.messageTypes });
27
+ const parser = new Parser({
28
+ responseNamingConventions: options.responseNamingConventions ?? options.contextConfig.responseNamingConventions,
29
+ messageTypes: options.messageTypes,
30
+ });
31
+ const fileGraphResolver = FileGraphResolver.create({
32
+ contextConfig: options.contextConfig,
33
+ fileSystem,
34
+ excludeDependencies,
35
+ });
36
+ const fileCopier = new FileCopier({ fileSystem });
37
+ return new ContractsPipeline({
38
+ scanner,
39
+ parser,
40
+ fileGraphResolver,
41
+ fileCopier,
42
+ fileSystem,
43
+ logger,
44
+ }, options.messageTypes);
45
+ }
46
+ static fromDependencies(deps) {
47
+ return new ContractsPipeline(deps);
48
+ }
49
+ async execute(options) {
50
+ const { contextName, sourceDir, outputDir, pathAliasRewrites, removeDecorators } = options;
51
+ const contextOutputDir = join(outputDir, contextName);
52
+ this.deps.logger.info(`Processing context: ${contextName}`);
53
+ this.deps.logger.debug(` Source: ${sourceDir}`);
54
+ this.deps.logger.debug(` Output: ${contextOutputDir}`);
55
+ const decoratedFiles = await this.scan(sourceDir);
56
+ const messages = await this.parse(decoratedFiles, sourceDir);
57
+ const fileGraph = await this.resolve(decoratedFiles, sourceDir);
58
+ const responseTypesToExport = this.collectResponseTypesToExport(messages);
59
+ const copiedFiles = await this.copy(fileGraph, sourceDir, contextOutputDir, pathAliasRewrites, responseTypesToExport, removeDecorators, this.messageTypes);
60
+ await this.exportBarrel(copiedFiles, contextOutputDir);
61
+ this.deps.logger.info(`Completed context: ${contextName} (${messages.events.length} events, ${messages.commands.length} commands, ${messages.queries.length} queries, ${copiedFiles.length} files)`);
62
+ return {
63
+ events: messages.events,
64
+ commands: messages.commands,
65
+ queries: messages.queries,
66
+ copiedFiles,
67
+ };
68
+ }
69
+ collectResponseTypesToExport(messages) {
70
+ const result = new Map();
71
+ const allMessages = [...messages.commands, ...messages.queries];
72
+ for (const message of allMessages) {
73
+ if (message.resultType?.kind !== "reference")
74
+ continue;
75
+ const typeName = message.resultType.name;
76
+ const sourceFile = message.sourceFile.absolutePath;
77
+ // Check if this type exists and is not exported
78
+ const typeDef = messages.typeDefinitions.find((t) => t.name === typeName &&
79
+ t.sourceFile.absolutePath === sourceFile &&
80
+ !t.exported);
81
+ if (typeDef) {
82
+ const existing = result.get(sourceFile) ?? [];
83
+ if (!existing.includes(typeName)) {
84
+ existing.push(typeName);
85
+ result.set(sourceFile, existing);
86
+ }
87
+ }
88
+ }
89
+ if (result.size > 0) {
90
+ this.deps.logger.debug(`Found ${result.size} file(s) with unexported response types`);
91
+ }
92
+ return result;
93
+ }
94
+ async scan(sourceDir) {
95
+ this.deps.logger.debug(`Scanning for decorated files in ${sourceDir}`);
96
+ const files = await this.deps.scanner.scan(sourceDir);
97
+ this.deps.logger.debug(`Found ${files.length} decorated file(s)`);
98
+ return files;
99
+ }
100
+ async parse(files, sourceRoot) {
101
+ this.deps.logger.debug(`Parsing ${files.length} file(s)`);
102
+ const events = [];
103
+ const commands = [];
104
+ const queries = [];
105
+ const typeDefinitions = [];
106
+ for (const file of files) {
107
+ const content = await this.deps.fileSystem.readFile(file);
108
+ const sourceFileInfo = {
109
+ absolutePath: file,
110
+ relativePath: relative(sourceRoot, file),
111
+ };
112
+ const result = this.deps.parser.parse(content, sourceFileInfo);
113
+ events.push(...result.events);
114
+ commands.push(...result.commands);
115
+ queries.push(...result.queries);
116
+ typeDefinitions.push(...result.typeDefinitions);
117
+ }
118
+ this.deps.logger.debug(`Parsed ${events.length} event(s), ${commands.length} command(s), ${queries.length} query(s), ${typeDefinitions.length} type(s)`);
119
+ return { events, commands, queries, typeDefinitions };
120
+ }
121
+ async resolve(entryPoints, sourceRoot) {
122
+ this.deps.logger.debug(`Resolving dependencies for ${entryPoints.length} entry point(s)`);
123
+ const graph = await this.deps.fileGraphResolver.buildGraph(entryPoints, sourceRoot);
124
+ this.deps.logger.debug(`Resolved ${graph.nodes.size} file(s) in dependency graph`);
125
+ return graph;
126
+ }
127
+ async copy(fileGraph, sourceRoot, outputDir, pathAliasRewrites, responseTypesToExport, removeDecorators, messageTypes) {
128
+ this.deps.logger.debug(`Copying files to ${outputDir}`);
129
+ await this.deps.fileSystem.mkdir(outputDir, { recursive: true });
130
+ const result = await this.deps.fileCopier.copyFiles({
131
+ sourceRoot,
132
+ outputDir,
133
+ fileGraph,
134
+ pathAliasRewrites,
135
+ responseTypesToExport,
136
+ removeDecorators,
137
+ messageTypes,
138
+ });
139
+ this.deps.logger.debug(`Copied ${result.copiedFiles.length} file(s)`);
140
+ return result.copiedFiles;
141
+ }
142
+ async exportBarrel(copiedFiles, outputDir) {
143
+ this.deps.logger.debug(`Generating barrel export at ${outputDir}/index.ts`);
144
+ const indexContent = this.deps.fileCopier.generateBarrelExport(copiedFiles, outputDir);
145
+ await this.deps.fileSystem.writeFile(join(outputDir, "index.ts"), indexContent);
146
+ }
147
+ }
148
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { FileSystem } from "./file-system.js";
2
+ /**
3
+ * Represents an import that was rewritten via pathAliasRewrites
4
+ */
5
+ export interface RewrittenImport {
6
+ /** The rewritten module specifier (e.g., "@libera/contracts/common/request") */
7
+ readonly rewrittenPath: string;
8
+ /** The original module specifier before rewrite (e.g., "@libera/common/request") */
9
+ readonly originalPath: string;
10
+ /** The imported symbol names */
11
+ readonly symbols: readonly string[];
12
+ /** Whether this is a type-only import */
13
+ readonly isTypeOnly: boolean;
14
+ }
15
+ /**
16
+ * Represents a re-export file to be generated
17
+ */
18
+ export interface ReexportFile {
19
+ /** Relative path within contracts output dir (e.g., "common/request.ts") */
20
+ readonly relativePath: string;
21
+ /** The original module to re-export from */
22
+ readonly originalModule: string;
23
+ /** Symbols to re-export */
24
+ readonly symbols: readonly string[];
25
+ /** Whether all symbols are type-only */
26
+ readonly isTypeOnly: boolean;
27
+ }
28
+ export interface ReexportGeneratorOptions {
29
+ fileSystem?: FileSystem;
30
+ }
31
+ export interface AnalyzeOptions {
32
+ /** The files to analyze (absolute paths) */
33
+ readonly files: readonly string[];
34
+ /** Map of original path prefix -> rewritten path prefix */
35
+ readonly pathAliasRewrites: ReadonlyMap<string, string>;
36
+ }
37
+ export interface GenerateOptions {
38
+ /** The output directory for re-export files */
39
+ readonly outputDir: string;
40
+ /** The re-export files to generate */
41
+ readonly reexportFiles: readonly ReexportFile[];
42
+ }
43
+ /**
44
+ * Generates re-export files for pathAliasRewrites
45
+ */
46
+ export declare class ReexportGenerator {
47
+ private readonly fs;
48
+ constructor(options?: ReexportGeneratorOptions);
49
+ /**
50
+ * Analyzes files to find imports that match pathAliasRewrites
51
+ * and groups them by rewritten path
52
+ */
53
+ analyze(options: AnalyzeOptions): Promise<ReexportFile[]>;
54
+ /**
55
+ * Generates re-export files
56
+ */
57
+ generate(options: GenerateOptions): Promise<string[]>;
58
+ /**
59
+ * Extracts imports from source content that match rewritten prefixes
60
+ */
61
+ private extractRewrittenImports;
62
+ /**
63
+ * Extracts symbol names from import clause
64
+ */
65
+ private extractSymbolNames;
66
+ /**
67
+ * Groups imports by rewritten path and merges symbols
68
+ */
69
+ private groupImportsByPath;
70
+ /**
71
+ * Converts a rewritten package path to a relative file path
72
+ * e.g., "@libera/contracts/common/request" with prefix "@libera/contracts"
73
+ * -> "common/request.ts"
74
+ */
75
+ private rewrittenPathToRelativePath;
76
+ /**
77
+ * Generates the content for a re-export file
78
+ */
79
+ private generateReexportContent;
80
+ }
81
+ //# sourceMappingURL=reexport-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reexport-generator.d.ts","sourceRoot":"","sources":["../src/reexport-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,wCAAwC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACrC,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,2DAA2D;IAC3D,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,eAAe;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;CACnD;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;IAEhC,YAAY,OAAO,GAAE,wBAA6B,EAEjD;IAED;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAoB9D;IAED;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAc1D;IAED;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA4C/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2C1B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAwBnC;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAKlC"}