@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/cli.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import type { MessageType, DecoratorNames, ResponseNamingConvention } from "./domain/types";
|
|
3
|
+
/**
|
|
4
|
+
* Options for runWithConfig when config is provided directly.
|
|
5
|
+
*/
|
|
6
|
+
export interface RunWithConfigOptions {
|
|
7
|
+
outputDir: string;
|
|
8
|
+
messageTypes?: MessageType[];
|
|
9
|
+
generateMessageRegistry?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Plugin configuration structure for contracts generator.
|
|
13
|
+
* This is the config passed from hexai.config.ts.
|
|
14
|
+
*/
|
|
15
|
+
export interface ContractsPluginConfig {
|
|
16
|
+
contexts: Array<{
|
|
17
|
+
name: string;
|
|
18
|
+
sourceDir: string;
|
|
19
|
+
tsconfigPath?: string;
|
|
20
|
+
}>;
|
|
21
|
+
pathAliasRewrites?: Record<string, string>;
|
|
22
|
+
externalDependencies?: Record<string, string>;
|
|
23
|
+
decoratorNames?: DecoratorNames;
|
|
24
|
+
responseNamingConventions?: ResponseNamingConvention[];
|
|
25
|
+
removeDecorators?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function run(args: string[]): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Run contracts generator with config provided directly.
|
|
30
|
+
* This is used by the hexai CLI integration where config comes from hexai.config.ts.
|
|
31
|
+
*
|
|
32
|
+
* @param options - CLI options (outputDir, messageTypes, generateMessageRegistry)
|
|
33
|
+
* @param pluginConfig - Plugin configuration from hexai.config.ts
|
|
34
|
+
*/
|
|
35
|
+
export declare function runWithConfig(options: RunWithConfigOptions, pluginConfig: ContractsPluginConfig): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAsB5F;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yBAAyB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAqKD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDvD;AAoBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,YAAY,EAAE,qBAAqB,GACpC,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.run = run;
|
|
5
|
+
exports.runWithConfig = runWithConfig;
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const config_loader_1 = require("./config-loader");
|
|
8
|
+
const index_1 = require("./index");
|
|
9
|
+
const registry_generator_1 = require("./registry-generator");
|
|
10
|
+
const reexport_generator_1 = require("./reexport-generator");
|
|
11
|
+
const file_system_1 = require("./file-system");
|
|
12
|
+
const domain_1 = require("./domain");
|
|
13
|
+
const DEFAULT_CONFIG_PATH = "application.config.ts";
|
|
14
|
+
const EXIT_CODE_ERROR = 1;
|
|
15
|
+
const VALID_MESSAGE_TYPES = ["event", "command", "query"];
|
|
16
|
+
const CLI_OPTIONS = {
|
|
17
|
+
config: { short: "-c", long: "--config", requiresValue: true },
|
|
18
|
+
outputDir: { short: "-o", long: "--output-dir", requiresValue: true },
|
|
19
|
+
messageTypes: { short: "-m", long: "--message-types", requiresValue: true },
|
|
20
|
+
generateMessageRegistry: { short: null, long: "--generate-message-registry", requiresValue: false },
|
|
21
|
+
help: { short: "-h", long: "--help", requiresValue: false },
|
|
22
|
+
};
|
|
23
|
+
function parseMessageTypes(value) {
|
|
24
|
+
const types = value.split(",").map((type) => type.trim().toLowerCase());
|
|
25
|
+
const invalidTypes = types.filter((type) => !VALID_MESSAGE_TYPES.includes(type));
|
|
26
|
+
if (invalidTypes.length > 0) {
|
|
27
|
+
throw new Error(`Invalid message type(s): ${invalidTypes.join(", ")}. ` +
|
|
28
|
+
`Valid types are: ${VALID_MESSAGE_TYPES.join(", ")}`);
|
|
29
|
+
}
|
|
30
|
+
return types;
|
|
31
|
+
}
|
|
32
|
+
function extractOptionValue(args, currentIndex, optionName) {
|
|
33
|
+
const currentArg = args[currentIndex];
|
|
34
|
+
const equalsIndex = currentArg.indexOf("=");
|
|
35
|
+
if (equalsIndex !== -1) {
|
|
36
|
+
return {
|
|
37
|
+
value: currentArg.slice(equalsIndex + 1),
|
|
38
|
+
nextIndex: currentIndex,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const nextValue = args[currentIndex + 1];
|
|
42
|
+
if (!nextValue) {
|
|
43
|
+
throw new Error(`Missing value for ${optionName} option`);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
value: nextValue,
|
|
47
|
+
nextIndex: currentIndex + 1,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function matchesOption(arg, option) {
|
|
51
|
+
const matchesShortOrLong = arg === option.short || arg === option.long;
|
|
52
|
+
const matchesLongWithValue = option.long !== null && arg.startsWith(`${option.long}=`);
|
|
53
|
+
return matchesShortOrLong || matchesLongWithValue;
|
|
54
|
+
}
|
|
55
|
+
function parseArgs(args) {
|
|
56
|
+
const options = {
|
|
57
|
+
config: DEFAULT_CONFIG_PATH,
|
|
58
|
+
};
|
|
59
|
+
for (let i = 0; i < args.length; i++) {
|
|
60
|
+
const arg = args[i];
|
|
61
|
+
if (matchesOption(arg, CLI_OPTIONS.config)) {
|
|
62
|
+
const { value, nextIndex } = extractOptionValue(args, i, "--config");
|
|
63
|
+
options.config = value;
|
|
64
|
+
i = nextIndex;
|
|
65
|
+
}
|
|
66
|
+
else if (matchesOption(arg, CLI_OPTIONS.outputDir)) {
|
|
67
|
+
const { value, nextIndex } = extractOptionValue(args, i, "--output-dir");
|
|
68
|
+
options.outputDir = value;
|
|
69
|
+
i = nextIndex;
|
|
70
|
+
}
|
|
71
|
+
else if (matchesOption(arg, CLI_OPTIONS.messageTypes)) {
|
|
72
|
+
const { value, nextIndex } = extractOptionValue(args, i, "--message-types");
|
|
73
|
+
options.messageTypes = parseMessageTypes(value);
|
|
74
|
+
i = nextIndex;
|
|
75
|
+
}
|
|
76
|
+
else if (matchesOption(arg, CLI_OPTIONS.generateMessageRegistry)) {
|
|
77
|
+
options.generateMessageRegistry = true;
|
|
78
|
+
}
|
|
79
|
+
else if (matchesOption(arg, CLI_OPTIONS.help)) {
|
|
80
|
+
printHelp();
|
|
81
|
+
process.exit(0);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!options.outputDir) {
|
|
85
|
+
throw new Error("Missing required option: --output-dir");
|
|
86
|
+
}
|
|
87
|
+
return options;
|
|
88
|
+
}
|
|
89
|
+
function printHelp() {
|
|
90
|
+
console.log(`
|
|
91
|
+
contracts-generator - Extract domain events and commands from TypeScript source
|
|
92
|
+
|
|
93
|
+
Usage:
|
|
94
|
+
contracts-generator --output-dir <path> [options]
|
|
95
|
+
|
|
96
|
+
Required:
|
|
97
|
+
-o, --output-dir <path> Output directory for generated contracts
|
|
98
|
+
|
|
99
|
+
Options:
|
|
100
|
+
-c, --config <path> Path to config file (default: ${DEFAULT_CONFIG_PATH})
|
|
101
|
+
-m, --message-types <types> Filter message types to extract (comma-separated)
|
|
102
|
+
Valid types: ${VALID_MESSAGE_TYPES.join(", ")}
|
|
103
|
+
Default: all types
|
|
104
|
+
--generate-message-registry Generate message registry index.ts file
|
|
105
|
+
Default: not generated
|
|
106
|
+
-h, --help Show this help message
|
|
107
|
+
|
|
108
|
+
Config file format:
|
|
109
|
+
export default {
|
|
110
|
+
contracts: {
|
|
111
|
+
contexts: [
|
|
112
|
+
{
|
|
113
|
+
name: "lecture",
|
|
114
|
+
sourceDir: "packages/lecture/src",
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
pathAliasRewrites: {
|
|
118
|
+
"@/": "@libera/",
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
Examples:
|
|
124
|
+
# Extract all message types
|
|
125
|
+
contracts-generator --output-dir packages/contracts/src
|
|
126
|
+
|
|
127
|
+
# Extract only commands and queries
|
|
128
|
+
contracts-generator -o packages/contracts/requests -m command,query
|
|
129
|
+
|
|
130
|
+
# Extract only events
|
|
131
|
+
contracts-generator -o packages/contracts/events --message-types event
|
|
132
|
+
|
|
133
|
+
# Generate with message registry (index.ts)
|
|
134
|
+
contracts-generator -o packages/contracts/src --generate-message-registry
|
|
135
|
+
|
|
136
|
+
# Use with custom config
|
|
137
|
+
contracts-generator -c app.config.ts -o packages/contracts/src
|
|
138
|
+
`);
|
|
139
|
+
}
|
|
140
|
+
function calculateSummaryTotals(results) {
|
|
141
|
+
return results.reduce((totals, contextResult) => ({
|
|
142
|
+
events: totals.events + contextResult.result.events.length,
|
|
143
|
+
commands: totals.commands + contextResult.result.commands.length,
|
|
144
|
+
files: totals.files + contextResult.result.copiedFiles.length,
|
|
145
|
+
}), { events: 0, commands: 0, files: 0 });
|
|
146
|
+
}
|
|
147
|
+
function countTotalMessages(totals) {
|
|
148
|
+
return totals.events + totals.commands;
|
|
149
|
+
}
|
|
150
|
+
function logSummary(logger, totals) {
|
|
151
|
+
logger.info("\n--- Summary ---");
|
|
152
|
+
logger.info(`Total events: ${totals.events}`);
|
|
153
|
+
logger.info(`Total commands: ${totals.commands}`);
|
|
154
|
+
logger.info(`Total files copied: ${totals.files}`);
|
|
155
|
+
}
|
|
156
|
+
async function run(args) {
|
|
157
|
+
const options = parseArgs(args);
|
|
158
|
+
const configPath = (0, path_1.resolve)(options.config);
|
|
159
|
+
const configDir = (0, path_1.dirname)(configPath);
|
|
160
|
+
const outputDir = (0, path_1.resolve)(configDir, options.outputDir);
|
|
161
|
+
const logger = new index_1.ConsoleLogger({ level: "info" });
|
|
162
|
+
logger.info(`Loading config from: ${configPath}`);
|
|
163
|
+
const configLoader = new config_loader_1.ConfigLoader();
|
|
164
|
+
const config = await configLoader.load(configPath);
|
|
165
|
+
logger.info(`Found ${config.contexts.length} context(s) to process`);
|
|
166
|
+
logger.info(`Output directory: ${outputDir}`);
|
|
167
|
+
if (options.messageTypes) {
|
|
168
|
+
logger.info(`Message types filter: ${options.messageTypes.join(", ")}`);
|
|
169
|
+
}
|
|
170
|
+
const pathAliasRewrites = config.pathAliasRewrites
|
|
171
|
+
? new Map(Object.entries(config.pathAliasRewrites))
|
|
172
|
+
: undefined;
|
|
173
|
+
const results = [];
|
|
174
|
+
for (const context of config.contexts) {
|
|
175
|
+
const sourceDir = (0, path_1.resolve)(configDir, context.sourceDir);
|
|
176
|
+
const tsconfigPath = context.tsconfigPath
|
|
177
|
+
? (0, path_1.resolve)(configDir, context.tsconfigPath)
|
|
178
|
+
: undefined;
|
|
179
|
+
const result = await (0, index_1.processContext)({
|
|
180
|
+
contextName: context.name,
|
|
181
|
+
sourceDir,
|
|
182
|
+
outputDir,
|
|
183
|
+
pathAliasRewrites,
|
|
184
|
+
tsconfigPath,
|
|
185
|
+
removeDecorators: config.removeDecorators,
|
|
186
|
+
messageTypes: options.messageTypes,
|
|
187
|
+
logger,
|
|
188
|
+
});
|
|
189
|
+
results.push({ name: context.name, result, outputDir });
|
|
190
|
+
}
|
|
191
|
+
const totals = calculateSummaryTotals(results);
|
|
192
|
+
logSummary(logger, totals);
|
|
193
|
+
if (options.generateMessageRegistry) {
|
|
194
|
+
await generateRegistry(outputDir, results, totals, logger);
|
|
195
|
+
}
|
|
196
|
+
if (config.pathAliasRewrites) {
|
|
197
|
+
await generateReexports(config, outputDir, results, logger);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Converts plugin config to internal ContractsConfig format.
|
|
202
|
+
*/
|
|
203
|
+
function toContractsConfig(pluginConfig) {
|
|
204
|
+
return {
|
|
205
|
+
contexts: pluginConfig.contexts.map((ctx) => ({
|
|
206
|
+
name: ctx.name,
|
|
207
|
+
sourceDir: ctx.sourceDir,
|
|
208
|
+
tsconfigPath: ctx.tsconfigPath,
|
|
209
|
+
})),
|
|
210
|
+
pathAliasRewrites: pluginConfig.pathAliasRewrites,
|
|
211
|
+
externalDependencies: pluginConfig.externalDependencies,
|
|
212
|
+
decoratorNames: (0, domain_1.mergeDecoratorNames)(pluginConfig.decoratorNames),
|
|
213
|
+
responseNamingConventions: pluginConfig.responseNamingConventions,
|
|
214
|
+
removeDecorators: pluginConfig.removeDecorators ?? true,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Run contracts generator with config provided directly.
|
|
219
|
+
* This is used by the hexai CLI integration where config comes from hexai.config.ts.
|
|
220
|
+
*
|
|
221
|
+
* @param options - CLI options (outputDir, messageTypes, generateMessageRegistry)
|
|
222
|
+
* @param pluginConfig - Plugin configuration from hexai.config.ts
|
|
223
|
+
*/
|
|
224
|
+
async function runWithConfig(options, pluginConfig) {
|
|
225
|
+
const outputDir = (0, path_1.resolve)(options.outputDir);
|
|
226
|
+
const logger = new index_1.ConsoleLogger({ level: "info" });
|
|
227
|
+
const config = toContractsConfig(pluginConfig);
|
|
228
|
+
logger.info(`Found ${config.contexts.length} context(s) to process`);
|
|
229
|
+
logger.info(`Output directory: ${outputDir}`);
|
|
230
|
+
if (options.messageTypes) {
|
|
231
|
+
logger.info(`Message types filter: ${options.messageTypes.join(", ")}`);
|
|
232
|
+
}
|
|
233
|
+
const pathAliasRewrites = config.pathAliasRewrites
|
|
234
|
+
? new Map(Object.entries(config.pathAliasRewrites))
|
|
235
|
+
: undefined;
|
|
236
|
+
const results = [];
|
|
237
|
+
for (const context of config.contexts) {
|
|
238
|
+
const sourceDir = (0, path_1.resolve)(context.sourceDir);
|
|
239
|
+
const tsconfigPath = context.tsconfigPath
|
|
240
|
+
? (0, path_1.resolve)(context.tsconfigPath)
|
|
241
|
+
: undefined;
|
|
242
|
+
const result = await (0, index_1.processContext)({
|
|
243
|
+
contextName: context.name,
|
|
244
|
+
sourceDir,
|
|
245
|
+
outputDir,
|
|
246
|
+
pathAliasRewrites,
|
|
247
|
+
tsconfigPath,
|
|
248
|
+
removeDecorators: config.removeDecorators,
|
|
249
|
+
messageTypes: options.messageTypes,
|
|
250
|
+
logger,
|
|
251
|
+
});
|
|
252
|
+
results.push({ name: context.name, result, outputDir });
|
|
253
|
+
}
|
|
254
|
+
const totals = calculateSummaryTotals(results);
|
|
255
|
+
logSummary(logger, totals);
|
|
256
|
+
if (options.generateMessageRegistry) {
|
|
257
|
+
await generateRegistry(outputDir, results, totals, logger);
|
|
258
|
+
}
|
|
259
|
+
if (config.pathAliasRewrites) {
|
|
260
|
+
await generateReexports(config, outputDir, results, logger);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async function generateRegistry(outputDir, results, totals, logger) {
|
|
264
|
+
const contextMessages = results.map((contextResult) => {
|
|
265
|
+
const contextOutputDir = (0, path_1.join)(contextResult.outputDir, contextResult.name);
|
|
266
|
+
const importPath = "./" + (0, path_1.relative)(outputDir, contextOutputDir).replace(/\\/g, "/");
|
|
267
|
+
return {
|
|
268
|
+
contextName: contextResult.name,
|
|
269
|
+
events: contextResult.result.events,
|
|
270
|
+
commands: contextResult.result.commands,
|
|
271
|
+
queries: contextResult.result.queries,
|
|
272
|
+
importPath,
|
|
273
|
+
};
|
|
274
|
+
});
|
|
275
|
+
const generator = new registry_generator_1.RegistryGenerator({ useNamespace: true });
|
|
276
|
+
const registryContent = generator.generate(contextMessages);
|
|
277
|
+
await file_system_1.nodeFileSystem.mkdir(outputDir, { recursive: true });
|
|
278
|
+
const indexPath = (0, path_1.join)(outputDir, "index.ts");
|
|
279
|
+
await file_system_1.nodeFileSystem.writeFile(indexPath, registryContent);
|
|
280
|
+
logger.info(` Generated index.ts with ${countTotalMessages(totals)} message(s)`);
|
|
281
|
+
}
|
|
282
|
+
async function generateReexports(config, outputDir, results, logger) {
|
|
283
|
+
logger.info("\n--- Generating re-exports for pathAliasRewrites ---");
|
|
284
|
+
const pathAliasRewrites = new Map(Object.entries(config.pathAliasRewrites));
|
|
285
|
+
const allCopiedFiles = results.flatMap((contextResult) => contextResult.result.copiedFiles);
|
|
286
|
+
const generator = new reexport_generator_1.ReexportGenerator({ fileSystem: file_system_1.nodeFileSystem });
|
|
287
|
+
const reexportFiles = await generator.analyze({
|
|
288
|
+
files: allCopiedFiles,
|
|
289
|
+
pathAliasRewrites,
|
|
290
|
+
});
|
|
291
|
+
if (reexportFiles.length === 0) {
|
|
292
|
+
logger.info(" No re-export files needed");
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const generatedFiles = await generator.generate({
|
|
296
|
+
outputDir,
|
|
297
|
+
reexportFiles,
|
|
298
|
+
});
|
|
299
|
+
logger.info(` Generated ${generatedFiles.length} re-export file(s):`);
|
|
300
|
+
for (const file of generatedFiles) {
|
|
301
|
+
logger.info(` - ${(0, path_1.relative)(outputDir, file)}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
async function main() {
|
|
305
|
+
try {
|
|
306
|
+
await run(process.argv.slice(2));
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
if (error instanceof Error) {
|
|
310
|
+
console.error(`Error: ${error.message}`);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
console.error("Unknown error occurred");
|
|
314
|
+
}
|
|
315
|
+
process.exit(EXIT_CODE_ERROR);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (require.main === module) {
|
|
319
|
+
main();
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { FileSystem } from "./file-system";
|
|
2
|
+
import type { DecoratorNames, ResponseNamingConvention } from "./domain";
|
|
3
|
+
export interface ContextConfig {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly sourceDir: string;
|
|
6
|
+
readonly tsconfigPath?: string;
|
|
7
|
+
readonly responseNamingConventions?: readonly ResponseNamingConvention[];
|
|
8
|
+
}
|
|
9
|
+
export interface ContractsConfig {
|
|
10
|
+
readonly contexts: readonly ContextConfig[];
|
|
11
|
+
readonly pathAliasRewrites?: Readonly<Record<string, string>>;
|
|
12
|
+
readonly externalDependencies?: Readonly<Record<string, string>>;
|
|
13
|
+
readonly decoratorNames: Required<DecoratorNames>;
|
|
14
|
+
readonly responseNamingConventions?: readonly ResponseNamingConvention[];
|
|
15
|
+
readonly removeDecorators?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ConfigLoaderOptions {
|
|
18
|
+
fileSystem?: FileSystem;
|
|
19
|
+
}
|
|
20
|
+
export declare class ConfigLoader {
|
|
21
|
+
private readonly fs;
|
|
22
|
+
constructor(options?: ConfigLoaderOptions);
|
|
23
|
+
load(configPath: string): Promise<ContractsConfig>;
|
|
24
|
+
private loadTypeScriptConfig;
|
|
25
|
+
private extractContractsConfig;
|
|
26
|
+
private resolveContexts;
|
|
27
|
+
private resolveStringContext;
|
|
28
|
+
private expandGlobPattern;
|
|
29
|
+
private loadPackageConfig;
|
|
30
|
+
private validateObjectContext;
|
|
31
|
+
private matchGlobPattern;
|
|
32
|
+
}
|
|
33
|
+
export { ConfigLoadError } from "./errors";
|
|
34
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAMzE,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,yBAAyB,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC5E;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACzE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvC;AAwBD,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;gBAEpB,OAAO,GAAE,mBAAwB;IAIvC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAO1C,oBAAoB;YAiBpB,sBAAsB;YAgCtB,eAAe;YAqBf,oBAAoB;YAYpB,iBAAiB;YAQjB,iBAAiB;IAqC/B,OAAO,CAAC,qBAAqB;YA0Bf,gBAAgB;CAuCjC;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,188 @@
|
|
|
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.ConfigLoadError = exports.ConfigLoader = void 0;
|
|
37
|
+
const path_1 = require("path");
|
|
38
|
+
const ts = __importStar(require("typescript"));
|
|
39
|
+
const errors_1 = require("./errors");
|
|
40
|
+
const file_system_1 = require("./file-system");
|
|
41
|
+
const domain_1 = require("./domain");
|
|
42
|
+
const PACKAGE_CONFIG_FILENAME = "application.config.ts";
|
|
43
|
+
const SUPPORTED_GLOB_PARTS_COUNT = 2;
|
|
44
|
+
class ConfigLoader {
|
|
45
|
+
fs;
|
|
46
|
+
constructor(options = {}) {
|
|
47
|
+
this.fs = options.fileSystem ?? file_system_1.nodeFileSystem;
|
|
48
|
+
}
|
|
49
|
+
async load(configPath) {
|
|
50
|
+
const absolutePath = (0, path_1.resolve)(configPath);
|
|
51
|
+
const config = await this.loadTypeScriptConfig(absolutePath);
|
|
52
|
+
return this.extractContractsConfig(config, (0, path_1.dirname)(absolutePath));
|
|
53
|
+
}
|
|
54
|
+
async loadTypeScriptConfig(absolutePath) {
|
|
55
|
+
const source = await this.fs.readFile(absolutePath);
|
|
56
|
+
const result = ts.transpileModule(source, {
|
|
57
|
+
compilerOptions: {
|
|
58
|
+
module: ts.ModuleKind.CommonJS,
|
|
59
|
+
target: ts.ScriptTarget.ES2020,
|
|
60
|
+
esModuleInterop: true,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const exports = {};
|
|
64
|
+
const moduleWrapper = new Function("exports", result.outputText);
|
|
65
|
+
moduleWrapper(exports);
|
|
66
|
+
return exports.default ?? exports;
|
|
67
|
+
}
|
|
68
|
+
async extractContractsConfig(config, configDir) {
|
|
69
|
+
const contracts = config.contracts;
|
|
70
|
+
if (!contracts) {
|
|
71
|
+
throw new errors_1.ConfigLoadError("Missing 'contracts' section in config");
|
|
72
|
+
}
|
|
73
|
+
if (!contracts.contexts || !Array.isArray(contracts.contexts)) {
|
|
74
|
+
throw new errors_1.ConfigLoadError("Missing 'contracts.contexts' in config");
|
|
75
|
+
}
|
|
76
|
+
const contexts = await this.resolveContexts(contracts.contexts, configDir);
|
|
77
|
+
if (contexts.length === 0) {
|
|
78
|
+
throw new errors_1.ConfigLoadError("No contexts found from 'contexts'");
|
|
79
|
+
}
|
|
80
|
+
const decoratorNames = (0, domain_1.mergeDecoratorNames)(contracts.decoratorNames);
|
|
81
|
+
return {
|
|
82
|
+
contexts,
|
|
83
|
+
pathAliasRewrites: contracts.pathAliasRewrites,
|
|
84
|
+
externalDependencies: contracts.externalDependencies,
|
|
85
|
+
decoratorNames,
|
|
86
|
+
responseNamingConventions: contracts.responseNamingConventions,
|
|
87
|
+
removeDecorators: contracts.removeDecorators ?? true,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async resolveContexts(contextsConfig, configDir) {
|
|
91
|
+
const contexts = [];
|
|
92
|
+
for (let i = 0; i < contextsConfig.length; i++) {
|
|
93
|
+
const item = contextsConfig[i];
|
|
94
|
+
if (typeof item === "string") {
|
|
95
|
+
const resolvedContexts = await this.resolveStringContext(item, configDir);
|
|
96
|
+
contexts.push(...resolvedContexts);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
const validated = this.validateObjectContext(item, i);
|
|
100
|
+
contexts.push(validated);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return contexts;
|
|
104
|
+
}
|
|
105
|
+
async resolveStringContext(contextPath, configDir) {
|
|
106
|
+
if (contextPath.includes("*")) {
|
|
107
|
+
return this.expandGlobPattern(contextPath, configDir);
|
|
108
|
+
}
|
|
109
|
+
const packageDir = (0, path_1.resolve)(configDir, contextPath);
|
|
110
|
+
return [await this.loadPackageConfig(packageDir)];
|
|
111
|
+
}
|
|
112
|
+
async expandGlobPattern(pattern, configDir) {
|
|
113
|
+
const packageDirs = await this.matchGlobPattern(pattern, configDir);
|
|
114
|
+
const configs = await Promise.all(packageDirs.map((packageDir) => this.loadPackageConfig(packageDir)));
|
|
115
|
+
return configs;
|
|
116
|
+
}
|
|
117
|
+
async loadPackageConfig(packageDir) {
|
|
118
|
+
const configPath = (0, path_1.join)(packageDir, PACKAGE_CONFIG_FILENAME);
|
|
119
|
+
if (!await this.fs.exists(configPath)) {
|
|
120
|
+
throw new errors_1.ConfigLoadError(`Missing application.config.ts in package: ${packageDir}`);
|
|
121
|
+
}
|
|
122
|
+
const packageConfig = await this.loadTypeScriptConfig(configPath);
|
|
123
|
+
if (!packageConfig.contextName || typeof packageConfig.contextName !== "string") {
|
|
124
|
+
throw new errors_1.ConfigLoadError(`Missing 'contextName' in ${configPath}`);
|
|
125
|
+
}
|
|
126
|
+
if (!packageConfig.sourceDir || typeof packageConfig.sourceDir !== "string") {
|
|
127
|
+
throw new errors_1.ConfigLoadError(`Missing 'sourceDir' in ${configPath}`);
|
|
128
|
+
}
|
|
129
|
+
const contextName = packageConfig.contextName;
|
|
130
|
+
const sourceDir = (0, path_1.resolve)(packageDir, packageConfig.sourceDir);
|
|
131
|
+
const tsconfigPath = packageConfig.tsconfigPath
|
|
132
|
+
? (0, path_1.resolve)(packageDir, packageConfig.tsconfigPath)
|
|
133
|
+
: undefined;
|
|
134
|
+
return {
|
|
135
|
+
name: contextName,
|
|
136
|
+
sourceDir,
|
|
137
|
+
tsconfigPath,
|
|
138
|
+
responseNamingConventions: packageConfig.responseNamingConventions,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
validateObjectContext(ctx, index) {
|
|
142
|
+
if (!ctx.name || typeof ctx.name !== "string") {
|
|
143
|
+
throw new errors_1.ConfigLoadError(`Invalid context at index ${index}: missing 'name'`);
|
|
144
|
+
}
|
|
145
|
+
if (!ctx.sourceDir || typeof ctx.sourceDir !== "string") {
|
|
146
|
+
throw new errors_1.ConfigLoadError(`Invalid context at index ${index}: missing 'sourceDir'`);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
name: ctx.name,
|
|
150
|
+
sourceDir: ctx.sourceDir,
|
|
151
|
+
tsconfigPath: ctx.tsconfigPath,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
async matchGlobPattern(pattern, configDir) {
|
|
155
|
+
const globParts = pattern.split("*");
|
|
156
|
+
if (globParts.length !== SUPPORTED_GLOB_PARTS_COUNT) {
|
|
157
|
+
throw new errors_1.ConfigLoadError(`Invalid glob pattern: "${pattern}". Only single wildcard patterns like "packages/*" are supported.`);
|
|
158
|
+
}
|
|
159
|
+
const [prefix, suffix] = globParts;
|
|
160
|
+
const baseDir = (0, path_1.resolve)(configDir, prefix);
|
|
161
|
+
if (!await this.fs.exists(baseDir)) {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
const entries = await this.fs.readdir(baseDir);
|
|
165
|
+
const matchedDirs = [];
|
|
166
|
+
for (const entry of entries) {
|
|
167
|
+
const fullPath = (0, path_1.resolve)(baseDir, entry);
|
|
168
|
+
const stats = await this.fs.stat(fullPath);
|
|
169
|
+
if (!stats.isDirectory()) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (suffix) {
|
|
173
|
+
const suffixPath = (0, path_1.resolve)(fullPath, suffix.replace(/^\//, ""));
|
|
174
|
+
if (await this.fs.exists(suffixPath)) {
|
|
175
|
+
matchedDirs.push(fullPath);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
matchedDirs.push(fullPath);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return matchedDirs.sort();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.ConfigLoader = ConfigLoader;
|
|
186
|
+
var errors_2 = require("./errors");
|
|
187
|
+
Object.defineProperty(exports, "ConfigLoadError", { enumerable: true, get: function () { return errors_2.ConfigLoadError; } });
|
|
188
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
|