@hexaijs/plugin-contracts-generator 0.1.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.
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/dist/ast-utils.d.ts +6 -0
- package/dist/ast-utils.d.ts.map +1 -0
- package/dist/ast-utils.js +111 -0
- package/dist/ast-utils.js.map +1 -0
- package/dist/class-analyzer.d.ts +16 -0
- package/dist/class-analyzer.d.ts.map +1 -0
- package/dist/class-analyzer.js +155 -0
- package/dist/class-analyzer.js.map +1 -0
- package/dist/cli.d.ts +36 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +321 -0
- package/dist/cli.js.map +1 -0
- package/dist/config-loader.d.ts +34 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +188 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/decorators/index.d.ts +143 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +123 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +18 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/types.d.ts +182 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +65 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/errors.d.ts +79 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +138 -0
- package/dist/errors.js.map +1 -0
- package/dist/file-copier.d.ts +85 -0
- package/dist/file-copier.d.ts.map +1 -0
- package/dist/file-copier.js +773 -0
- package/dist/file-copier.js.map +1 -0
- package/dist/file-graph-resolver.d.ts +47 -0
- package/dist/file-graph-resolver.d.ts.map +1 -0
- package/dist/file-graph-resolver.js +230 -0
- package/dist/file-graph-resolver.js.map +1 -0
- package/dist/file-system.d.ts +26 -0
- package/dist/file-system.d.ts.map +1 -0
- package/dist/file-system.js +34 -0
- package/dist/file-system.js.map +1 -0
- package/dist/hexai-plugin.d.ts +16 -0
- package/dist/hexai-plugin.d.ts.map +1 -0
- package/dist/hexai-plugin.js +59 -0
- package/dist/hexai-plugin.js.map +1 -0
- package/dist/import-analyzer.d.ts +6 -0
- package/dist/import-analyzer.d.ts.map +1 -0
- package/dist/import-analyzer.js +77 -0
- package/dist/import-analyzer.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +21 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +47 -0
- package/dist/logger.js.map +1 -0
- package/dist/parser.d.ts +32 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +209 -0
- package/dist/parser.js.map +1 -0
- package/dist/pipeline.d.ts +56 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +152 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/reexport-generator.d.ts +81 -0
- package/dist/reexport-generator.d.ts.map +1 -0
- package/dist/reexport-generator.js +208 -0
- package/dist/reexport-generator.js.map +1 -0
- package/dist/registry-generator.d.ts +27 -0
- package/dist/registry-generator.d.ts.map +1 -0
- package/dist/registry-generator.js +108 -0
- package/dist/registry-generator.js.map +1 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/message-registry.d.ts +23 -0
- package/dist/runtime/message-registry.d.ts.map +1 -0
- package/dist/runtime/message-registry.js +39 -0
- package/dist/runtime/message-registry.js.map +1 -0
- package/dist/scanner.d.ts +21 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +53 -0
- package/dist/scanner.js.map +1 -0
- package/dist/test-utils.d.ts +23 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +198 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/tsconfig-loader.d.ts +8 -0
- package/dist/tsconfig-loader.d.ts.map +1 -0
- package/dist/tsconfig-loader.js +64 -0
- package/dist/tsconfig-loader.js.map +1 -0
- package/package.json +79 -0
package/dist/pipeline.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContractsPipeline = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const scanner_1 = require("./scanner");
|
|
6
|
+
const parser_1 = require("./parser");
|
|
7
|
+
const file_graph_resolver_1 = require("./file-graph-resolver");
|
|
8
|
+
const file_copier_1 = require("./file-copier");
|
|
9
|
+
const file_system_1 = require("./file-system");
|
|
10
|
+
const logger_1 = require("./logger");
|
|
11
|
+
const DEFAULT_EXCLUDE_DEPENDENCIES = [
|
|
12
|
+
"**/*.test.ts",
|
|
13
|
+
"**/*.spec.ts",
|
|
14
|
+
"**/*.eh.ts",
|
|
15
|
+
"**/db.ts",
|
|
16
|
+
"**/infra/**",
|
|
17
|
+
];
|
|
18
|
+
class ContractsPipeline {
|
|
19
|
+
deps;
|
|
20
|
+
messageTypes;
|
|
21
|
+
constructor(deps, messageTypes) {
|
|
22
|
+
this.deps = deps;
|
|
23
|
+
this.messageTypes = messageTypes;
|
|
24
|
+
}
|
|
25
|
+
static async create(options = {}) {
|
|
26
|
+
const fileSystem = options.fileSystem ?? file_system_1.nodeFileSystem;
|
|
27
|
+
const logger = options.logger ?? logger_1.noopLogger;
|
|
28
|
+
const excludeDependencies = options.excludeDependencies ?? DEFAULT_EXCLUDE_DEPENDENCIES;
|
|
29
|
+
const scanner = new scanner_1.Scanner({ fileSystem, messageTypes: options.messageTypes });
|
|
30
|
+
const parser = new parser_1.Parser({
|
|
31
|
+
responseNamingConventions: options.responseNamingConventions,
|
|
32
|
+
messageTypes: options.messageTypes,
|
|
33
|
+
});
|
|
34
|
+
const fileGraphResolver = await file_graph_resolver_1.FileGraphResolver.create({
|
|
35
|
+
tsconfigPath: options.tsconfigPath,
|
|
36
|
+
fileSystem,
|
|
37
|
+
excludeDependencies,
|
|
38
|
+
});
|
|
39
|
+
const fileCopier = new file_copier_1.FileCopier({ fileSystem });
|
|
40
|
+
return new ContractsPipeline({
|
|
41
|
+
scanner,
|
|
42
|
+
parser,
|
|
43
|
+
fileGraphResolver,
|
|
44
|
+
fileCopier,
|
|
45
|
+
fileSystem,
|
|
46
|
+
logger,
|
|
47
|
+
}, options.messageTypes);
|
|
48
|
+
}
|
|
49
|
+
static fromDependencies(deps) {
|
|
50
|
+
return new ContractsPipeline(deps);
|
|
51
|
+
}
|
|
52
|
+
async execute(options) {
|
|
53
|
+
const { contextName, sourceDir, outputDir, pathAliasRewrites, removeDecorators } = options;
|
|
54
|
+
const contextOutputDir = (0, path_1.join)(outputDir, contextName);
|
|
55
|
+
this.deps.logger.info(`Processing context: ${contextName}`);
|
|
56
|
+
this.deps.logger.debug(` Source: ${sourceDir}`);
|
|
57
|
+
this.deps.logger.debug(` Output: ${contextOutputDir}`);
|
|
58
|
+
const decoratedFiles = await this.scan(sourceDir);
|
|
59
|
+
const messages = await this.parse(decoratedFiles, sourceDir);
|
|
60
|
+
const fileGraph = await this.resolve(decoratedFiles, sourceDir);
|
|
61
|
+
const responseTypesToExport = this.collectResponseTypesToExport(messages);
|
|
62
|
+
const copiedFiles = await this.copy(fileGraph, sourceDir, contextOutputDir, pathAliasRewrites, responseTypesToExport, removeDecorators, this.messageTypes);
|
|
63
|
+
await this.exportBarrel(copiedFiles, contextOutputDir);
|
|
64
|
+
this.deps.logger.info(`Completed context: ${contextName} (${messages.events.length} events, ${messages.commands.length} commands, ${messages.queries.length} queries, ${copiedFiles.length} files)`);
|
|
65
|
+
return {
|
|
66
|
+
events: messages.events,
|
|
67
|
+
commands: messages.commands,
|
|
68
|
+
queries: messages.queries,
|
|
69
|
+
copiedFiles,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
collectResponseTypesToExport(messages) {
|
|
73
|
+
const result = new Map();
|
|
74
|
+
const allMessages = [...messages.commands, ...messages.queries];
|
|
75
|
+
for (const message of allMessages) {
|
|
76
|
+
if (message.resultType?.kind !== "reference")
|
|
77
|
+
continue;
|
|
78
|
+
const typeName = message.resultType.name;
|
|
79
|
+
const sourceFile = message.sourceFile.absolutePath;
|
|
80
|
+
// Check if this type exists and is not exported
|
|
81
|
+
const typeDef = messages.typeDefinitions.find((t) => t.name === typeName &&
|
|
82
|
+
t.sourceFile.absolutePath === sourceFile &&
|
|
83
|
+
!t.exported);
|
|
84
|
+
if (typeDef) {
|
|
85
|
+
const existing = result.get(sourceFile) ?? [];
|
|
86
|
+
if (!existing.includes(typeName)) {
|
|
87
|
+
existing.push(typeName);
|
|
88
|
+
result.set(sourceFile, existing);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (result.size > 0) {
|
|
93
|
+
this.deps.logger.debug(`Found ${result.size} file(s) with unexported response types`);
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
async scan(sourceDir) {
|
|
98
|
+
this.deps.logger.debug(`Scanning for decorated files in ${sourceDir}`);
|
|
99
|
+
const files = await this.deps.scanner.scan(sourceDir);
|
|
100
|
+
this.deps.logger.debug(`Found ${files.length} decorated file(s)`);
|
|
101
|
+
return files;
|
|
102
|
+
}
|
|
103
|
+
async parse(files, sourceRoot) {
|
|
104
|
+
this.deps.logger.debug(`Parsing ${files.length} file(s)`);
|
|
105
|
+
const events = [];
|
|
106
|
+
const commands = [];
|
|
107
|
+
const queries = [];
|
|
108
|
+
const typeDefinitions = [];
|
|
109
|
+
for (const file of files) {
|
|
110
|
+
const content = await this.deps.fileSystem.readFile(file);
|
|
111
|
+
const sourceFileInfo = {
|
|
112
|
+
absolutePath: file,
|
|
113
|
+
relativePath: (0, path_1.relative)(sourceRoot, file),
|
|
114
|
+
};
|
|
115
|
+
const result = this.deps.parser.parse(content, sourceFileInfo);
|
|
116
|
+
events.push(...result.events);
|
|
117
|
+
commands.push(...result.commands);
|
|
118
|
+
queries.push(...result.queries);
|
|
119
|
+
typeDefinitions.push(...result.typeDefinitions);
|
|
120
|
+
}
|
|
121
|
+
this.deps.logger.debug(`Parsed ${events.length} event(s), ${commands.length} command(s), ${queries.length} query(s), ${typeDefinitions.length} type(s)`);
|
|
122
|
+
return { events, commands, queries, typeDefinitions };
|
|
123
|
+
}
|
|
124
|
+
async resolve(entryPoints, sourceRoot) {
|
|
125
|
+
this.deps.logger.debug(`Resolving dependencies for ${entryPoints.length} entry point(s)`);
|
|
126
|
+
const graph = await this.deps.fileGraphResolver.buildGraph(entryPoints, sourceRoot);
|
|
127
|
+
this.deps.logger.debug(`Resolved ${graph.nodes.size} file(s) in dependency graph`);
|
|
128
|
+
return graph;
|
|
129
|
+
}
|
|
130
|
+
async copy(fileGraph, sourceRoot, outputDir, pathAliasRewrites, responseTypesToExport, removeDecorators, messageTypes) {
|
|
131
|
+
this.deps.logger.debug(`Copying files to ${outputDir}`);
|
|
132
|
+
await this.deps.fileSystem.mkdir(outputDir, { recursive: true });
|
|
133
|
+
const result = await this.deps.fileCopier.copyFiles({
|
|
134
|
+
sourceRoot,
|
|
135
|
+
outputDir,
|
|
136
|
+
fileGraph,
|
|
137
|
+
pathAliasRewrites,
|
|
138
|
+
responseTypesToExport,
|
|
139
|
+
removeDecorators,
|
|
140
|
+
messageTypes,
|
|
141
|
+
});
|
|
142
|
+
this.deps.logger.debug(`Copied ${result.copiedFiles.length} file(s)`);
|
|
143
|
+
return result.copiedFiles;
|
|
144
|
+
}
|
|
145
|
+
async exportBarrel(copiedFiles, outputDir) {
|
|
146
|
+
this.deps.logger.debug(`Generating barrel export at ${outputDir}/index.ts`);
|
|
147
|
+
const indexContent = this.deps.fileCopier.generateBarrelExport(copiedFiles, outputDir);
|
|
148
|
+
await this.deps.fileSystem.writeFile((0, path_1.join)(outputDir, "index.ts"), indexContent);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.ContractsPipeline = ContractsPipeline;
|
|
152
|
+
//# 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";
|
|
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,eAAe,CAAC;AAE3D;;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;gBAEpB,OAAO,GAAE,wBAA6B;IAIlD;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsB/D;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgB3D;;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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
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.ReexportGenerator = void 0;
|
|
37
|
+
const ts = __importStar(require("typescript"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const file_system_1 = require("./file-system");
|
|
40
|
+
/**
|
|
41
|
+
* Generates re-export files for pathAliasRewrites
|
|
42
|
+
*/
|
|
43
|
+
class ReexportGenerator {
|
|
44
|
+
fs;
|
|
45
|
+
constructor(options = {}) {
|
|
46
|
+
this.fs = options.fileSystem ?? file_system_1.nodeFileSystem;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Analyzes files to find imports that match pathAliasRewrites
|
|
50
|
+
* and groups them by rewritten path
|
|
51
|
+
*/
|
|
52
|
+
async analyze(options) {
|
|
53
|
+
const { files, pathAliasRewrites } = options;
|
|
54
|
+
// Invert the map: rewritten prefix -> original prefix
|
|
55
|
+
const rewrittenToOriginal = new Map();
|
|
56
|
+
for (const [original, rewritten] of pathAliasRewrites) {
|
|
57
|
+
rewrittenToOriginal.set(rewritten, original);
|
|
58
|
+
}
|
|
59
|
+
// Collect all rewritten imports across all files
|
|
60
|
+
const allImports = [];
|
|
61
|
+
for (const file of files) {
|
|
62
|
+
const content = await this.fs.readFile(file);
|
|
63
|
+
const imports = this.extractRewrittenImports(content, rewrittenToOriginal);
|
|
64
|
+
allImports.push(...imports);
|
|
65
|
+
}
|
|
66
|
+
// Group by rewritten path and merge symbols
|
|
67
|
+
return this.groupImportsByPath(allImports);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Generates re-export files
|
|
71
|
+
*/
|
|
72
|
+
async generate(options) {
|
|
73
|
+
const { outputDir, reexportFiles } = options;
|
|
74
|
+
const generatedFiles = [];
|
|
75
|
+
for (const reexport of reexportFiles) {
|
|
76
|
+
const filePath = path.join(outputDir, reexport.relativePath);
|
|
77
|
+
const content = this.generateReexportContent(reexport);
|
|
78
|
+
await this.fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
79
|
+
await this.fs.writeFile(filePath, content);
|
|
80
|
+
generatedFiles.push(filePath);
|
|
81
|
+
}
|
|
82
|
+
return generatedFiles;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Extracts imports from source content that match rewritten prefixes
|
|
86
|
+
*/
|
|
87
|
+
extractRewrittenImports(content, rewrittenToOriginal) {
|
|
88
|
+
const sourceFile = ts.createSourceFile("temp.ts", content, ts.ScriptTarget.Latest, true);
|
|
89
|
+
const imports = [];
|
|
90
|
+
ts.forEachChild(sourceFile, (node) => {
|
|
91
|
+
if (!ts.isImportDeclaration(node) || !node.importClause) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const moduleSpecifier = node.moduleSpecifier.text;
|
|
95
|
+
// Check if this import matches any rewritten prefix
|
|
96
|
+
for (const [rewrittenPrefix, originalPrefix] of rewrittenToOriginal) {
|
|
97
|
+
if (moduleSpecifier.startsWith(rewrittenPrefix)) {
|
|
98
|
+
const symbols = this.extractSymbolNames(node.importClause);
|
|
99
|
+
if (symbols.length > 0) {
|
|
100
|
+
// Calculate the original path
|
|
101
|
+
const suffix = moduleSpecifier.slice(rewrittenPrefix.length);
|
|
102
|
+
const originalPath = originalPrefix + suffix;
|
|
103
|
+
imports.push({
|
|
104
|
+
rewrittenPath: moduleSpecifier,
|
|
105
|
+
originalPath,
|
|
106
|
+
symbols,
|
|
107
|
+
isTypeOnly: node.importClause.isTypeOnly ?? false,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return imports;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Extracts symbol names from import clause
|
|
118
|
+
*/
|
|
119
|
+
extractSymbolNames(importClause) {
|
|
120
|
+
const names = [];
|
|
121
|
+
// Default import
|
|
122
|
+
if (importClause.name) {
|
|
123
|
+
names.push(importClause.name.text);
|
|
124
|
+
}
|
|
125
|
+
// Named imports
|
|
126
|
+
if (importClause.namedBindings && ts.isNamedImports(importClause.namedBindings)) {
|
|
127
|
+
for (const element of importClause.namedBindings.elements) {
|
|
128
|
+
// Use the original name if aliased, otherwise use the imported name
|
|
129
|
+
const originalName = element.propertyName?.text ?? element.name.text;
|
|
130
|
+
names.push(originalName);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return names;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Groups imports by rewritten path and merges symbols
|
|
137
|
+
*/
|
|
138
|
+
groupImportsByPath(imports) {
|
|
139
|
+
const grouped = new Map();
|
|
140
|
+
for (const imp of imports) {
|
|
141
|
+
const existing = grouped.get(imp.rewrittenPath);
|
|
142
|
+
if (existing) {
|
|
143
|
+
for (const symbol of imp.symbols) {
|
|
144
|
+
existing.symbols.add(symbol);
|
|
145
|
+
}
|
|
146
|
+
if (!imp.isTypeOnly) {
|
|
147
|
+
existing.hasValueImport = true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
grouped.set(imp.rewrittenPath, {
|
|
152
|
+
originalPath: imp.originalPath,
|
|
153
|
+
symbols: new Set(imp.symbols),
|
|
154
|
+
hasValueImport: !imp.isTypeOnly,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Convert to ReexportFile array
|
|
159
|
+
const result = [];
|
|
160
|
+
for (const [rewrittenPath, data] of grouped) {
|
|
161
|
+
// Convert rewritten package path to relative file path
|
|
162
|
+
// e.g., "@libera/contracts/common/request" -> "common/request.ts"
|
|
163
|
+
const relativePath = this.rewrittenPathToRelativePath(rewrittenPath);
|
|
164
|
+
result.push({
|
|
165
|
+
relativePath,
|
|
166
|
+
originalModule: data.originalPath,
|
|
167
|
+
symbols: Array.from(data.symbols).sort(),
|
|
168
|
+
isTypeOnly: !data.hasValueImport,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return result.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Converts a rewritten package path to a relative file path
|
|
175
|
+
* e.g., "@libera/contracts/common/request" with prefix "@libera/contracts"
|
|
176
|
+
* -> "common/request.ts"
|
|
177
|
+
*/
|
|
178
|
+
rewrittenPathToRelativePath(rewrittenPath) {
|
|
179
|
+
// Find the subpath after the package name
|
|
180
|
+
// Assume format: @scope/package/subpath or package/subpath
|
|
181
|
+
const parts = rewrittenPath.split("/");
|
|
182
|
+
let subpathStart;
|
|
183
|
+
if (parts[0].startsWith("@")) {
|
|
184
|
+
// Scoped package: @scope/package/subpath
|
|
185
|
+
subpathStart = 2;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
// Regular package: package/subpath
|
|
189
|
+
subpathStart = 1;
|
|
190
|
+
}
|
|
191
|
+
const subpath = parts.slice(subpathStart).join("/");
|
|
192
|
+
// If no subpath, use index.ts
|
|
193
|
+
if (!subpath) {
|
|
194
|
+
return "index.ts";
|
|
195
|
+
}
|
|
196
|
+
return subpath + ".ts";
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Generates the content for a re-export file
|
|
200
|
+
*/
|
|
201
|
+
generateReexportContent(reexport) {
|
|
202
|
+
const exportKeyword = reexport.isTypeOnly ? "export type" : "export";
|
|
203
|
+
const symbols = reexport.symbols.join(", ");
|
|
204
|
+
return `${exportKeyword} { ${symbols} } from "${reexport.originalModule}";\n`;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
exports.ReexportGenerator = ReexportGenerator;
|
|
208
|
+
//# sourceMappingURL=reexport-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reexport-generator.js","sourceRoot":"","sources":["../src/reexport-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DomainEvent, Command, Query } from "./domain/types";
|
|
2
|
+
export interface RegistryGeneratorOptions {
|
|
3
|
+
readonly messageRegistryImport: string;
|
|
4
|
+
readonly useNamespace?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface ContextMessages {
|
|
7
|
+
readonly contextName: string;
|
|
8
|
+
readonly events: readonly DomainEvent[];
|
|
9
|
+
readonly commands: readonly Command[];
|
|
10
|
+
readonly queries?: readonly Query[];
|
|
11
|
+
readonly importPath?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class RegistryGenerator {
|
|
14
|
+
private readonly options;
|
|
15
|
+
constructor(options?: Partial<RegistryGeneratorOptions>);
|
|
16
|
+
generate(contexts: readonly ContextMessages[]): string;
|
|
17
|
+
private generateEmptyRegistry;
|
|
18
|
+
private generateWithNamespace;
|
|
19
|
+
private getNamespaceInfos;
|
|
20
|
+
private generateNamespaceImports;
|
|
21
|
+
private generateNamespaceExports;
|
|
22
|
+
private generateNamespaceRegistrations;
|
|
23
|
+
private toNamespace;
|
|
24
|
+
private generateImports;
|
|
25
|
+
private generateRegistrations;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=registry-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-generator.d.ts","sourceRoot":"","sources":["../src/registry-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIlE,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAChC;AAkBD,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;gBAEvC,OAAO,GAAE,OAAO,CAAC,wBAAwB,CAAM;IAI3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM;IA2BtD,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,8BAA8B;IAUtC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,qBAAqB;CAQhC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RegistryGenerator = void 0;
|
|
4
|
+
const DEFAULT_OPTIONS = {
|
|
5
|
+
messageRegistryImport: "@hexaijs/plugin-contracts-generator/runtime",
|
|
6
|
+
};
|
|
7
|
+
function hasMessages(ctx) {
|
|
8
|
+
return (ctx.events.length > 0 ||
|
|
9
|
+
ctx.commands.length > 0 ||
|
|
10
|
+
(ctx.queries?.length ?? 0) > 0);
|
|
11
|
+
}
|
|
12
|
+
function getAllMessages(ctx) {
|
|
13
|
+
return [...ctx.events, ...ctx.commands, ...(ctx.queries ?? [])];
|
|
14
|
+
}
|
|
15
|
+
class RegistryGenerator {
|
|
16
|
+
options;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
19
|
+
}
|
|
20
|
+
generate(contexts) {
|
|
21
|
+
const allMessages = contexts.flatMap((ctx) => getAllMessages(ctx).map((message) => ({
|
|
22
|
+
message,
|
|
23
|
+
contextName: ctx.contextName,
|
|
24
|
+
})));
|
|
25
|
+
if (allMessages.length === 0) {
|
|
26
|
+
return this.generateEmptyRegistry();
|
|
27
|
+
}
|
|
28
|
+
if (this.options.useNamespace) {
|
|
29
|
+
return this.generateWithNamespace(contexts, allMessages);
|
|
30
|
+
}
|
|
31
|
+
const imports = this.generateImports(contexts);
|
|
32
|
+
const registrations = this.generateRegistrations(allMessages);
|
|
33
|
+
return [
|
|
34
|
+
imports,
|
|
35
|
+
"",
|
|
36
|
+
"export const messageRegistry = new MessageRegistry()",
|
|
37
|
+
registrations,
|
|
38
|
+
].join("\n");
|
|
39
|
+
}
|
|
40
|
+
generateEmptyRegistry() {
|
|
41
|
+
return [
|
|
42
|
+
`import { MessageRegistry } from "${this.options.messageRegistryImport}";`,
|
|
43
|
+
"",
|
|
44
|
+
"export const messageRegistry = new MessageRegistry();",
|
|
45
|
+
"",
|
|
46
|
+
].join("\n");
|
|
47
|
+
}
|
|
48
|
+
generateWithNamespace(contexts, allMessages) {
|
|
49
|
+
const imports = this.generateNamespaceImports(contexts);
|
|
50
|
+
const exports = this.generateNamespaceExports(contexts);
|
|
51
|
+
const registrations = this.generateNamespaceRegistrations(allMessages);
|
|
52
|
+
return [
|
|
53
|
+
imports,
|
|
54
|
+
"",
|
|
55
|
+
exports,
|
|
56
|
+
"",
|
|
57
|
+
"export const messageRegistry = new MessageRegistry()",
|
|
58
|
+
registrations,
|
|
59
|
+
].join("\n");
|
|
60
|
+
}
|
|
61
|
+
getNamespaceInfos(contexts) {
|
|
62
|
+
return contexts.filter(hasMessages).map((ctx) => ({
|
|
63
|
+
importPath: ctx.importPath ?? `./${ctx.contextName}`,
|
|
64
|
+
namespace: this.toNamespace(ctx.contextName),
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
generateNamespaceImports(contexts) {
|
|
68
|
+
return [
|
|
69
|
+
`import { MessageRegistry } from "${this.options.messageRegistryImport}";`,
|
|
70
|
+
...this.getNamespaceInfos(contexts).map(({ importPath, namespace }) => `import * as ${namespace} from "${importPath}";`),
|
|
71
|
+
].join("\n");
|
|
72
|
+
}
|
|
73
|
+
generateNamespaceExports(contexts) {
|
|
74
|
+
return this.getNamespaceInfos(contexts)
|
|
75
|
+
.map(({ importPath, namespace }) => `export * as ${namespace} from "${importPath}";`)
|
|
76
|
+
.join("\n");
|
|
77
|
+
}
|
|
78
|
+
generateNamespaceRegistrations(messages) {
|
|
79
|
+
const lines = messages.map(({ message, contextName }) => {
|
|
80
|
+
const namespace = this.toNamespace(contextName);
|
|
81
|
+
return ` .register(${namespace}.${message.name})`;
|
|
82
|
+
});
|
|
83
|
+
return lines.join("\n") + ";\n";
|
|
84
|
+
}
|
|
85
|
+
toNamespace(contextName) {
|
|
86
|
+
// kebab-case to camelCase
|
|
87
|
+
return contextName.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
88
|
+
}
|
|
89
|
+
generateImports(contexts) {
|
|
90
|
+
const lines = [
|
|
91
|
+
`import { MessageRegistry } from "${this.options.messageRegistryImport}";`,
|
|
92
|
+
];
|
|
93
|
+
for (const ctx of contexts) {
|
|
94
|
+
const messageNames = getAllMessages(ctx).map((m) => m.name);
|
|
95
|
+
if (messageNames.length > 0) {
|
|
96
|
+
const importPath = ctx.importPath ?? `./${ctx.contextName}`;
|
|
97
|
+
lines.push(`import { ${messageNames.join(", ")} } from "${importPath}";`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return lines.join("\n");
|
|
101
|
+
}
|
|
102
|
+
generateRegistrations(messages) {
|
|
103
|
+
const lines = messages.map(({ message }) => ` .register(${message.name})`);
|
|
104
|
+
return lines.join("\n") + ";\n";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.RegistryGenerator = RegistryGenerator;
|
|
108
|
+
//# sourceMappingURL=registry-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-generator.js","sourceRoot":"","sources":["../src/registry-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,cAAc,GACtB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageRegistry = void 0;
|
|
4
|
+
var message_registry_1 = require("./message-registry");
|
|
5
|
+
Object.defineProperty(exports, "MessageRegistry", { enumerable: true, get: function () { return message_registry_1.MessageRegistry; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":";;;AAAA,uDAI4B;AAHxB,mHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type Version = string | number | undefined;
|
|
2
|
+
export interface MessageHeaders {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
schemaVersion?: Version;
|
|
6
|
+
createdAt: Date;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface MessageClass<T = any> {
|
|
10
|
+
getSchemaVersion(): Version;
|
|
11
|
+
getType(): string;
|
|
12
|
+
from(rawPayload: Record<string, unknown>, header?: MessageHeaders): T;
|
|
13
|
+
new (payload: any, headers?: any): T;
|
|
14
|
+
}
|
|
15
|
+
export declare class MessageRegistry {
|
|
16
|
+
private readonly registry;
|
|
17
|
+
register(messageClass: MessageClass): this;
|
|
18
|
+
dehydrate<T>(header: MessageHeaders, body: Record<string, unknown>): T;
|
|
19
|
+
has(type: string, version?: Version): boolean;
|
|
20
|
+
size(): number;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=message-registry.d.ts.map
|