@atomic-ehr/codegen 0.0.1-canary.20250821160126.c552195 → 0.0.1-canary.20250822150706.c3b8669
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/dist/api/builder.d.ts +3 -3
- package/dist/api/builder.d.ts.map +1 -1
- package/dist/api/builder.js +374 -0
- package/dist/api/generators/base/BaseGenerator.d.ts +4 -4
- package/dist/api/generators/base/BaseGenerator.d.ts.map +1 -1
- package/dist/api/generators/base/BaseGenerator.js +572 -0
- package/dist/api/generators/base/FileManager.d.ts +2 -2
- package/dist/api/generators/base/FileManager.d.ts.map +1 -1
- package/dist/api/generators/base/FileManager.js +204 -0
- package/dist/api/generators/base/PythonTypeMapper.d.ts +2 -2
- package/dist/api/generators/base/PythonTypeMapper.d.ts.map +1 -1
- package/dist/api/generators/base/PythonTypeMapper.js +71 -0
- package/dist/api/generators/base/TemplateEngine.d.ts +1 -1
- package/dist/api/generators/base/TemplateEngine.d.ts.map +1 -1
- package/dist/api/generators/base/TemplateEngine.js +133 -0
- package/dist/api/generators/base/TypeMapper.js +153 -0
- package/dist/api/generators/base/TypeScriptTypeMapper.d.ts +1 -1
- package/dist/api/generators/base/TypeScriptTypeMapper.d.ts.map +1 -1
- package/dist/api/generators/base/TypeScriptTypeMapper.js +232 -0
- package/dist/api/generators/base/builders/DirectoryBuilder.d.ts +4 -4
- package/dist/api/generators/base/builders/DirectoryBuilder.d.ts.map +1 -1
- package/dist/api/generators/base/builders/DirectoryBuilder.js +215 -0
- package/dist/api/generators/base/builders/FileBuilder.d.ts +2 -2
- package/dist/api/generators/base/builders/FileBuilder.d.ts.map +1 -1
- package/dist/api/generators/base/builders/FileBuilder.js +408 -0
- package/dist/api/generators/base/builders/IndexBuilder.d.ts +2 -2
- package/dist/api/generators/base/builders/IndexBuilder.d.ts.map +1 -1
- package/dist/api/generators/base/builders/IndexBuilder.js +290 -0
- package/dist/api/generators/base/enhanced-errors.d.ts +2 -2
- package/dist/api/generators/base/enhanced-errors.d.ts.map +1 -1
- package/dist/api/generators/base/enhanced-errors.js +259 -0
- package/dist/api/generators/base/error-handler.d.ts +1 -1
- package/dist/api/generators/base/error-handler.d.ts.map +1 -1
- package/dist/api/generators/base/error-handler.js +243 -0
- package/dist/api/generators/base/errors.d.ts +2 -2
- package/dist/api/generators/base/errors.d.ts.map +1 -1
- package/dist/api/generators/base/errors.js +694 -0
- package/dist/api/generators/base/index.d.ts +22 -22
- package/dist/api/generators/base/index.d.ts.map +1 -1
- package/dist/api/generators/base/index.js +161 -0
- package/dist/api/generators/base/types.d.ts +2 -2
- package/dist/api/generators/base/types.d.ts.map +1 -1
- package/dist/api/generators/base/types.js +12 -0
- package/dist/api/generators/rest-client.d.ts +2 -2
- package/dist/api/generators/rest-client.d.ts.map +1 -1
- package/dist/api/generators/rest-client.js +847 -0
- package/dist/api/generators/search-parameter-enhancer.d.ts +1 -1
- package/dist/api/generators/search-parameter-enhancer.d.ts.map +1 -1
- package/dist/api/generators/search-parameter-enhancer.js +801 -0
- package/dist/api/generators/types.js +4 -0
- package/dist/api/generators/typescript.d.ts +3 -3
- package/dist/api/generators/typescript.d.ts.map +1 -1
- package/dist/api/generators/typescript.js +537 -0
- package/dist/api/generators/validation-generator.js +632 -0
- package/dist/api/index.d.ts +10 -10
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +51 -0
- package/dist/cli/commands/generate/typescript.d.ts +1 -1
- package/dist/cli/commands/generate/typescript.d.ts.map +1 -1
- package/dist/cli/commands/generate/typescript.js +52 -0
- package/dist/cli/commands/generate.d.ts +5 -12
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +158 -0
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +100 -0
- package/dist/cli/commands/typeschema/generate.js +130 -0
- package/dist/cli/commands/typeschema.js +48 -0
- package/dist/cli/index.js +12 -8664
- package/dist/cli/utils/log.d.ts +2 -2
- package/dist/cli/utils/log.d.ts.map +1 -1
- package/dist/cli/utils/log.js +23 -0
- package/dist/cli/utils/prompts.js +224 -0
- package/dist/cli/utils/spinner.js +270 -0
- package/dist/config.d.ts +22 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +703 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -38
- package/dist/logger.js +290 -0
- package/dist/typeschema/cache.d.ts +2 -2
- package/dist/typeschema/cache.d.ts.map +1 -1
- package/dist/typeschema/cache.js +285 -0
- package/dist/typeschema/core/binding.d.ts +1 -1
- package/dist/typeschema/core/binding.d.ts.map +1 -1
- package/dist/typeschema/core/binding.js +187 -0
- package/dist/typeschema/core/field-builder.d.ts +1 -1
- package/dist/typeschema/core/field-builder.d.ts.map +1 -1
- package/dist/typeschema/core/field-builder.js +259 -0
- package/dist/typeschema/core/identifier.js +117 -0
- package/dist/typeschema/core/nested-types.d.ts +1 -1
- package/dist/typeschema/core/nested-types.d.ts.map +1 -1
- package/dist/typeschema/core/nested-types.js +111 -0
- package/dist/typeschema/core/transformer.d.ts +2 -2
- package/dist/typeschema/core/transformer.d.ts.map +1 -1
- package/dist/typeschema/core/transformer.js +345 -0
- package/dist/typeschema/generator.d.ts +3 -3
- package/dist/typeschema/generator.d.ts.map +1 -1
- package/dist/typeschema/generator.js +352 -0
- package/dist/typeschema/index.d.ts +14 -14
- package/dist/typeschema/index.d.ts.map +1 -1
- package/dist/typeschema/index.js +92 -0
- package/dist/typeschema/parser.d.ts +2 -2
- package/dist/typeschema/parser.d.ts.map +1 -1
- package/dist/typeschema/parser.js +310 -0
- package/dist/typeschema/profile/processor.d.ts +1 -1
- package/dist/typeschema/profile/processor.d.ts.map +1 -1
- package/dist/typeschema/profile/processor.js +268 -0
- package/dist/typeschema/schema.js +456 -0
- package/dist/typeschema/type-schema.types.js +39 -0
- package/dist/typeschema/types.js +4 -0
- package/dist/typeschema/utils.d.ts +1 -1
- package/dist/typeschema/utils.d.ts.map +1 -1
- package/dist/typeschema/utils.js +13 -0
- package/dist/typeschema/value-set/processor.d.ts +1 -1
- package/dist/typeschema/value-set/processor.d.ts.map +1 -1
- package/dist/typeschema/value-set/processor.js +168 -0
- package/dist/utils/codegen-logger.js +204 -0
- package/dist/utils.js +42 -0
- package/package.json +15 -4
- package/dist/index-e7pfye24.js +0 -8532
package/dist/api/builder.d.ts
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Provides a fluent, chainable API for common codegen use cases with pre-built generators.
|
|
5
5
|
* This builder pattern allows users to configure generation in a declarative way.
|
|
6
6
|
*/
|
|
7
|
-
import type { Config, RestClientConfig, TypeSchemaConfig } from "../config";
|
|
8
|
-
import type { TypeSchema } from "../typeschema/type-schema.types";
|
|
9
|
-
import type { CodegenLogger } from "../utils/codegen-logger";
|
|
7
|
+
import type { Config, RestClientConfig, TypeSchemaConfig } from "../config.js";
|
|
8
|
+
import type { TypeSchema } from "../typeschema/type-schema.types.js";
|
|
9
|
+
import type { CodegenLogger } from "../utils/codegen-logger.js";
|
|
10
10
|
/**
|
|
11
11
|
* Configuration options for the API builder
|
|
12
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/api/builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/api/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-Level API Builder
|
|
3
|
+
*
|
|
4
|
+
* Provides a fluent, chainable API for common codegen use cases with pre-built generators.
|
|
5
|
+
* This builder pattern allows users to configure generation in a declarative way.
|
|
6
|
+
*/
|
|
7
|
+
import { TypeSchemaCache, TypeSchemaGenerator, TypeSchemaParser, } from "../typeschema/index.js";
|
|
8
|
+
import { createLogger } from "../utils/codegen-logger.js";
|
|
9
|
+
import { RestClientGenerator } from "./generators/rest-client.js";
|
|
10
|
+
import { TypeScriptGenerator } from "./generators/typescript.js";
|
|
11
|
+
/**
|
|
12
|
+
* High-Level API Builder class
|
|
13
|
+
*
|
|
14
|
+
* Provides a fluent interface for configuring and executing code generation
|
|
15
|
+
* from FHIR packages or TypeSchema documents.
|
|
16
|
+
*/
|
|
17
|
+
export class APIBuilder {
|
|
18
|
+
schemas = [];
|
|
19
|
+
options;
|
|
20
|
+
generators = new Map();
|
|
21
|
+
progressCallback;
|
|
22
|
+
cache;
|
|
23
|
+
pendingOperations = [];
|
|
24
|
+
typeSchemaGenerator;
|
|
25
|
+
logger;
|
|
26
|
+
typeSchemaConfig;
|
|
27
|
+
constructor(options = {}) {
|
|
28
|
+
this.options = {
|
|
29
|
+
outputDir: options.outputDir || "./generated",
|
|
30
|
+
verbose: options.verbose ?? false,
|
|
31
|
+
overwrite: options.overwrite ?? true,
|
|
32
|
+
validate: options.validate ?? true,
|
|
33
|
+
cache: options.cache ?? true,
|
|
34
|
+
typeSchemaConfig: options.typeSchemaConfig,
|
|
35
|
+
};
|
|
36
|
+
this.typeSchemaConfig = options.typeSchemaConfig;
|
|
37
|
+
// Use provided logger or create a default one
|
|
38
|
+
this.logger =
|
|
39
|
+
options.logger ||
|
|
40
|
+
createLogger({
|
|
41
|
+
verbose: this.options.verbose,
|
|
42
|
+
prefix: "API",
|
|
43
|
+
});
|
|
44
|
+
if (this.options.cache) {
|
|
45
|
+
this.cache = new TypeSchemaCache(this.typeSchemaConfig);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load TypeSchema from a FHIR package
|
|
50
|
+
*/
|
|
51
|
+
fromPackage(packageName, version) {
|
|
52
|
+
this.logger.debug(`Loading from FHIR package: ${packageName}@${version || "latest"}`);
|
|
53
|
+
const operation = this.loadFromPackage(packageName, version);
|
|
54
|
+
this.pendingOperations.push(operation);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Load TypeSchema from files
|
|
59
|
+
*/
|
|
60
|
+
fromFiles(...filePaths) {
|
|
61
|
+
this.logger.debug(`Loading from ${filePaths.length} TypeSchema files`);
|
|
62
|
+
const operation = this.loadFromFiles(filePaths);
|
|
63
|
+
this.pendingOperations.push(operation);
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Load TypeSchema from TypeSchema objects
|
|
68
|
+
*/
|
|
69
|
+
fromSchemas(schemas) {
|
|
70
|
+
this.logger.debug(`Adding ${schemas.length} TypeSchemas to generation`);
|
|
71
|
+
this.schemas = [...this.schemas, ...schemas];
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Configure TypeScript generation
|
|
76
|
+
*/
|
|
77
|
+
typescript(options = {}) {
|
|
78
|
+
// Hardcode types subfolder
|
|
79
|
+
const typesOutputDir = `${this.options.outputDir}/types`;
|
|
80
|
+
const generator = new TypeScriptGenerator({
|
|
81
|
+
outputDir: typesOutputDir,
|
|
82
|
+
moduleFormat: options.moduleFormat || "esm",
|
|
83
|
+
generateIndex: options.generateIndex ?? true,
|
|
84
|
+
includeDocuments: options.includeDocuments ?? true,
|
|
85
|
+
namingConvention: options.namingConvention || "PascalCase",
|
|
86
|
+
includeExtensions: options.includeExtensions ?? false,
|
|
87
|
+
includeProfiles: options.includeProfiles ?? false,
|
|
88
|
+
logger: this.logger.child("TS"),
|
|
89
|
+
verbose: this.options.verbose,
|
|
90
|
+
validate: true, // Enable validation for debugging
|
|
91
|
+
overwrite: this.options.overwrite,
|
|
92
|
+
});
|
|
93
|
+
this.generators.set("typescript", generator);
|
|
94
|
+
this.logger.debug(`Configured TypeScript generator (${options.moduleFormat || "esm"})`);
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Configure REST client generation
|
|
99
|
+
*/
|
|
100
|
+
restClient(options = {}) {
|
|
101
|
+
// REST client goes in client subfolder
|
|
102
|
+
const clientOutputDir = `${this.options.outputDir}/client`;
|
|
103
|
+
const generator = new RestClientGenerator({
|
|
104
|
+
outputDir: clientOutputDir,
|
|
105
|
+
logger: this.logger.child("REST"),
|
|
106
|
+
...options, // Pass all RestClientConfig options
|
|
107
|
+
});
|
|
108
|
+
this.generators.set("restclient", generator);
|
|
109
|
+
this.logger.debug(`Configured REST client generator (${options.clientName || "FHIRClient"})`);
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Set a progress callback for monitoring generation
|
|
114
|
+
*/
|
|
115
|
+
onProgress(callback) {
|
|
116
|
+
this.progressCallback = callback;
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Set the output directory for all generators
|
|
121
|
+
*/
|
|
122
|
+
outputTo(directory) {
|
|
123
|
+
this.logger.debug(`Setting output directory: ${directory}`);
|
|
124
|
+
this.options.outputDir = directory;
|
|
125
|
+
// Update all configured generators
|
|
126
|
+
for (const generator of this.generators.values()) {
|
|
127
|
+
if (generator.setOutputDir) {
|
|
128
|
+
generator.setOutputDir(directory);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Enable/disable verbose logging
|
|
135
|
+
*/
|
|
136
|
+
verbose(enabled = true) {
|
|
137
|
+
this.options.verbose = enabled;
|
|
138
|
+
return this;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Enable/disable validation
|
|
142
|
+
*/
|
|
143
|
+
validate(enabled = true) {
|
|
144
|
+
this.options.validate = enabled;
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Ensure TypeScript generator is configured if REST client is configured
|
|
149
|
+
*/
|
|
150
|
+
ensureTypeScriptForRestClient() {
|
|
151
|
+
const hasRestClient = this.generators.has("restclient");
|
|
152
|
+
const hasTypeScript = this.generators.has("typescript");
|
|
153
|
+
if (hasRestClient && !hasTypeScript) {
|
|
154
|
+
this.logger.debug("Automatically adding TypeScript generator for REST client");
|
|
155
|
+
// Add TypeScript generator with minimal config
|
|
156
|
+
this.typescript({
|
|
157
|
+
moduleFormat: "esm",
|
|
158
|
+
generateIndex: true,
|
|
159
|
+
includeDocuments: false,
|
|
160
|
+
namingConvention: "PascalCase",
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Execute the generation process
|
|
166
|
+
*/
|
|
167
|
+
async generate() {
|
|
168
|
+
// Ensure TypeScript is configured if REST client is configured
|
|
169
|
+
this.ensureTypeScriptForRestClient();
|
|
170
|
+
const startTime = performance.now();
|
|
171
|
+
const result = {
|
|
172
|
+
success: false,
|
|
173
|
+
outputDir: this.options.outputDir,
|
|
174
|
+
filesGenerated: [],
|
|
175
|
+
errors: [],
|
|
176
|
+
warnings: [],
|
|
177
|
+
duration: 0,
|
|
178
|
+
};
|
|
179
|
+
this.logger.debug(`Starting generation with ${this.generators.size} generators`);
|
|
180
|
+
try {
|
|
181
|
+
this.reportProgress("Loading", 0, 4, "Loading TypeSchema data...");
|
|
182
|
+
// Load schemas if needed
|
|
183
|
+
await this.resolveSchemas();
|
|
184
|
+
this.logger.debug(`Resolved ${this.schemas.length} schemas`);
|
|
185
|
+
this.reportProgress("Validating", 1, 4, "Validating TypeSchema documents...");
|
|
186
|
+
// Validate schemas
|
|
187
|
+
if (this.options.validate) {
|
|
188
|
+
this.logger.debug("Starting schema validation");
|
|
189
|
+
await this.validateSchemas(result);
|
|
190
|
+
this.logger.debug("Schema validation completed");
|
|
191
|
+
}
|
|
192
|
+
this.reportProgress("Generating", 2, 4, "Generating code...");
|
|
193
|
+
this.logger.debug(`Executing ${this.generators.size} generators`);
|
|
194
|
+
// Execute all configured generators
|
|
195
|
+
await this.executeGenerators(result);
|
|
196
|
+
this.reportProgress("Complete", 4, 4, "Generation completed successfully");
|
|
197
|
+
result.success = result.errors.length === 0;
|
|
198
|
+
this.logger.debug(`Generation completed: ${result.filesGenerated.length} files`);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
this.logger.error("Code generation failed", error instanceof Error ? error : new Error(String(error)));
|
|
202
|
+
result.errors.push(error instanceof Error ? error.message : String(error));
|
|
203
|
+
result.success = false;
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
result.duration = performance.now() - startTime;
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Generate and return the results without writing to files
|
|
212
|
+
*/
|
|
213
|
+
async build() {
|
|
214
|
+
await this.resolveSchemas();
|
|
215
|
+
const results = {};
|
|
216
|
+
for (const [type, generator] of this.generators.entries()) {
|
|
217
|
+
if (generator.build) {
|
|
218
|
+
results[type] = await generator.build(this.schemas);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return results;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Clear all configuration and start fresh
|
|
225
|
+
*/
|
|
226
|
+
reset() {
|
|
227
|
+
this.schemas = [];
|
|
228
|
+
this.generators.clear();
|
|
229
|
+
this.progressCallback = undefined;
|
|
230
|
+
return this;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get loaded schemas (for inspection)
|
|
234
|
+
*/
|
|
235
|
+
getSchemas() {
|
|
236
|
+
return [...this.schemas];
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get configured generators (for inspection)
|
|
240
|
+
*/
|
|
241
|
+
getGenerators() {
|
|
242
|
+
return Array.from(this.generators.keys());
|
|
243
|
+
}
|
|
244
|
+
// Private implementation methods
|
|
245
|
+
async loadFromPackage(packageName, version) {
|
|
246
|
+
const generator = new TypeSchemaGenerator({
|
|
247
|
+
verbose: this.options.verbose,
|
|
248
|
+
logger: this.logger.child("Schema"),
|
|
249
|
+
treeshake: this.typeSchemaConfig?.treeshake,
|
|
250
|
+
}, this.typeSchemaConfig);
|
|
251
|
+
this.typeSchemaGenerator = generator; // Store for REST client generation
|
|
252
|
+
const schemas = await generator.generateFromPackage(packageName, version);
|
|
253
|
+
this.schemas = [...this.schemas, ...schemas];
|
|
254
|
+
if (this.cache) {
|
|
255
|
+
this.cache.setMany(schemas);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
async loadFromFiles(filePaths) {
|
|
259
|
+
if (!this.typeSchemaGenerator) {
|
|
260
|
+
this.typeSchemaGenerator = new TypeSchemaGenerator({
|
|
261
|
+
verbose: this.options.verbose,
|
|
262
|
+
logger: this.logger.child("Schema"),
|
|
263
|
+
treeshake: this.typeSchemaConfig?.treeshake,
|
|
264
|
+
}, this.typeSchemaConfig);
|
|
265
|
+
}
|
|
266
|
+
const parser = new TypeSchemaParser({
|
|
267
|
+
format: "auto",
|
|
268
|
+
validate: this.options.validate,
|
|
269
|
+
});
|
|
270
|
+
const schemas = await parser.parseFromFiles(filePaths);
|
|
271
|
+
this.schemas = [...this.schemas, ...schemas];
|
|
272
|
+
if (this.cache) {
|
|
273
|
+
this.cache.setMany(schemas);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async resolveSchemas() {
|
|
277
|
+
// Wait for all pending async operations to complete
|
|
278
|
+
if (this.pendingOperations.length > 0) {
|
|
279
|
+
await Promise.all(this.pendingOperations);
|
|
280
|
+
this.pendingOperations = []; // Clear completed operations
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
async validateSchemas(_result) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
async executeGenerators(result) {
|
|
287
|
+
const generatorCount = this.generators.size;
|
|
288
|
+
let current = 0;
|
|
289
|
+
for (const [type, generator] of this.generators.entries()) {
|
|
290
|
+
this.reportProgress("Generating", 2 + current / generatorCount, 4, `Generating ${type}...`);
|
|
291
|
+
try {
|
|
292
|
+
const files = await generator.generate(this.schemas);
|
|
293
|
+
result.filesGenerated.push(...files.map((f) => f.path || f.filename));
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
result.errors.push(`${type} generator failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
297
|
+
}
|
|
298
|
+
current++;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
reportProgress(phase, current, total, message) {
|
|
302
|
+
if (this.progressCallback) {
|
|
303
|
+
this.progressCallback(phase, current, total, message);
|
|
304
|
+
}
|
|
305
|
+
if (this.options.verbose && message) {
|
|
306
|
+
this.logger.debug(`[${phase}] ${message}`);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Create a new API builder instance
|
|
312
|
+
*/
|
|
313
|
+
export function createAPI(options) {
|
|
314
|
+
return new APIBuilder(options);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Create an API builder instance from a configuration object
|
|
318
|
+
*/
|
|
319
|
+
export function createAPIFromConfig(config) {
|
|
320
|
+
const builder = new APIBuilder({
|
|
321
|
+
outputDir: config.outputDir,
|
|
322
|
+
verbose: config.verbose,
|
|
323
|
+
overwrite: config.overwrite,
|
|
324
|
+
validate: config.validate,
|
|
325
|
+
cache: config.cache,
|
|
326
|
+
typeSchemaConfig: config.typeSchema,
|
|
327
|
+
});
|
|
328
|
+
// Add packages if specified
|
|
329
|
+
if (config.packages && config.packages.length > 0) {
|
|
330
|
+
for (const pkg of config.packages) {
|
|
331
|
+
builder.fromPackage(pkg);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Add files if specified
|
|
335
|
+
if (config.files && config.files.length > 0) {
|
|
336
|
+
builder.fromFiles(...config.files);
|
|
337
|
+
}
|
|
338
|
+
// Configure TypeScript generator if specified
|
|
339
|
+
if (config.typescript) {
|
|
340
|
+
builder.typescript(config.typescript);
|
|
341
|
+
}
|
|
342
|
+
// Configure REST client generator if specified
|
|
343
|
+
if (config.restClient) {
|
|
344
|
+
console.log("fsdfdsfsdfdsf");
|
|
345
|
+
builder.restClient(config.restClient);
|
|
346
|
+
}
|
|
347
|
+
return builder;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Convenience function for quick TypeScript generation from a package
|
|
351
|
+
*/
|
|
352
|
+
export async function generateTypesFromPackage(packageName, outputDir, options = {}) {
|
|
353
|
+
return createAPI({
|
|
354
|
+
outputDir,
|
|
355
|
+
verbose: options.verbose,
|
|
356
|
+
validate: options.validate,
|
|
357
|
+
})
|
|
358
|
+
.fromPackage(packageName, options.version)
|
|
359
|
+
.typescript()
|
|
360
|
+
.generate();
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Convenience function for quick TypeScript generation from files
|
|
364
|
+
*/
|
|
365
|
+
export async function generateTypesFromFiles(inputFiles, outputDir, options = {}) {
|
|
366
|
+
return createAPI({
|
|
367
|
+
outputDir,
|
|
368
|
+
verbose: options.verbose,
|
|
369
|
+
validate: options.validate,
|
|
370
|
+
})
|
|
371
|
+
.fromFiles(...inputFiles)
|
|
372
|
+
.typescript()
|
|
373
|
+
.generate();
|
|
374
|
+
}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* specific logic for type mapping, content generation, and validation.
|
|
7
7
|
*/
|
|
8
8
|
import type { TypeSchema } from "../../../typeschema/type-schema.types";
|
|
9
|
-
import type { CodegenLogger } from "../../../utils/codegen-logger";
|
|
10
|
-
import { ErrorHandler, GeneratorErrorBoundary } from "./error-handler";
|
|
11
|
-
import { FileManager } from "./FileManager";
|
|
12
|
-
import type { BaseGeneratorOptions, GeneratedFile, GeneratorCapabilities, ProgressCallback, TemplateContext, TemplateEngine, TypeMapper } from "./types";
|
|
9
|
+
import type { CodegenLogger } from "../../../utils/codegen-logger.js";
|
|
10
|
+
import { ErrorHandler, GeneratorErrorBoundary } from "./error-handler.js";
|
|
11
|
+
import { FileManager } from "./FileManager.js";
|
|
12
|
+
import type { BaseGeneratorOptions, GeneratedFile, GeneratorCapabilities, ProgressCallback, TemplateContext, TemplateEngine, TypeMapper } from "./types.js";
|
|
13
13
|
/**
|
|
14
14
|
* Abstract base generator class with comprehensive functionality
|
|
15
15
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseGenerator.d.ts","sourceRoot":"","sources":["../../../../src/api/generators/base/BaseGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"BaseGenerator.d.ts","sourceRoot":"","sources":["../../../../src/api/generators/base/BaseGenerator.ts"],"names":[],"mappings":"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"}
|