schemantic 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/CHANGELOG.md +92 -0
- package/LICENSE +21 -0
- package/README.md +827 -0
- package/dist/__tests__/setup.d.ts +6 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +30 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/test-config.d.ts +36 -0
- package/dist/__tests__/test-config.d.ts.map +1 -0
- package/dist/__tests__/test-config.js +563 -0
- package/dist/__tests__/test-config.js.map +1 -0
- package/dist/cli/index.d.ts +118 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +657 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +21 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/schemantic.d.ts +95 -0
- package/dist/core/schemantic.d.ts.map +1 -0
- package/dist/core/schemantic.js +543 -0
- package/dist/core/schemantic.js.map +1 -0
- package/dist/generators/api-client-generator.d.ts +145 -0
- package/dist/generators/api-client-generator.d.ts.map +1 -0
- package/dist/generators/api-client-generator.js +856 -0
- package/dist/generators/api-client-generator.js.map +1 -0
- package/dist/generators/base.d.ts +117 -0
- package/dist/generators/base.d.ts.map +1 -0
- package/dist/generators/base.js +232 -0
- package/dist/generators/base.js.map +1 -0
- package/dist/generators/enum-generator.d.ts +52 -0
- package/dist/generators/enum-generator.d.ts.map +1 -0
- package/dist/generators/enum-generator.js +178 -0
- package/dist/generators/enum-generator.js.map +1 -0
- package/dist/generators/factory.d.ts +59 -0
- package/dist/generators/factory.d.ts.map +1 -0
- package/dist/generators/factory.js +127 -0
- package/dist/generators/factory.js.map +1 -0
- package/dist/generators/hook-generator.d.ts +36 -0
- package/dist/generators/hook-generator.d.ts.map +1 -0
- package/dist/generators/hook-generator.js +495 -0
- package/dist/generators/hook-generator.js.map +1 -0
- package/dist/generators/index.d.ts +10 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +26 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/object-generator.d.ts +48 -0
- package/dist/generators/object-generator.d.ts.map +1 -0
- package/dist/generators/object-generator.js +280 -0
- package/dist/generators/object-generator.js.map +1 -0
- package/dist/generators/primitive-generator.d.ts +40 -0
- package/dist/generators/primitive-generator.d.ts.map +1 -0
- package/dist/generators/primitive-generator.js +150 -0
- package/dist/generators/primitive-generator.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/base.d.ts +101 -0
- package/dist/parsers/base.d.ts.map +1 -0
- package/dist/parsers/base.js +77 -0
- package/dist/parsers/base.js.map +1 -0
- package/dist/parsers/factory.d.ts +64 -0
- package/dist/parsers/factory.d.ts.map +1 -0
- package/dist/parsers/factory.js +116 -0
- package/dist/parsers/factory.js.map +1 -0
- package/dist/parsers/index.d.ts +7 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +23 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/openapi.d.ts +52 -0
- package/dist/parsers/openapi.d.ts.map +1 -0
- package/dist/parsers/openapi.js +396 -0
- package/dist/parsers/openapi.js.map +1 -0
- package/dist/plugins/branded-types.d.ts +28 -0
- package/dist/plugins/branded-types.d.ts.map +1 -0
- package/dist/plugins/branded-types.js +568 -0
- package/dist/plugins/branded-types.js.map +1 -0
- package/dist/plugins/builtin.d.ts +38 -0
- package/dist/plugins/builtin.d.ts.map +1 -0
- package/dist/plugins/builtin.js +283 -0
- package/dist/plugins/builtin.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +23 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +92 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +245 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +99 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +233 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/performance-monitoring.d.ts +98 -0
- package/dist/plugins/performance-monitoring.d.ts.map +1 -0
- package/dist/plugins/performance-monitoring.js +596 -0
- package/dist/plugins/performance-monitoring.js.map +1 -0
- package/dist/plugins/request-deduplication.d.ts +27 -0
- package/dist/plugins/request-deduplication.d.ts.map +1 -0
- package/dist/plugins/request-deduplication.js +650 -0
- package/dist/plugins/request-deduplication.js.map +1 -0
- package/dist/plugins/zod-validation.d.ts +63 -0
- package/dist/plugins/zod-validation.d.ts.map +1 -0
- package/dist/plugins/zod-validation.js +743 -0
- package/dist/plugins/zod-validation.js.map +1 -0
- package/dist/types/core.d.ts +203 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +24 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi.d.ts +250 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +8 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/types/schema.d.ts +68 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +22 -0
- package/dist/types/schema.js.map +1 -0
- package/docs/ADVANCED_PLUGINS_IMPLEMENTATION.md +355 -0
- package/docs/ADVANCED_PLUGIN_DEVELOPMENT.md +309 -0
- package/docs/API.md +600 -0
- package/docs/CONFIGURATION.md +722 -0
- package/docs/FASTAPI_TUTORIAL.md +1497 -0
- package/docs/PLUGINS.md +683 -0
- package/docs/PLUGIN_DEVELOPMENT.md +720 -0
- package/package.json +90 -0
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Main Schemantic class
|
|
4
|
+
* Orchestrates the entire type generation process
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.Schemantic = exports.DEFAULT_CONFIG = void 0;
|
|
41
|
+
const fs = __importStar(require("fs/promises"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
// Re-export commonly used types and constants
|
|
44
|
+
var core_1 = require("../types/core");
|
|
45
|
+
Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function () { return core_1.DEFAULT_CONFIG; } });
|
|
46
|
+
const parsers_1 = require("../parsers");
|
|
47
|
+
const generators_1 = require("../generators");
|
|
48
|
+
const api_client_generator_1 = require("../generators/api-client-generator");
|
|
49
|
+
const hook_generator_1 = require("../generators/hook-generator");
|
|
50
|
+
const plugins_1 = require("../plugins");
|
|
51
|
+
/**
|
|
52
|
+
* Main Schemantic class
|
|
53
|
+
*/
|
|
54
|
+
class Schemantic {
|
|
55
|
+
constructor(config) {
|
|
56
|
+
this.resolvedSchemas = new Map();
|
|
57
|
+
this.config = config;
|
|
58
|
+
this.pluginManager = new plugins_1.PluginManager();
|
|
59
|
+
this.typeRegistry = this.createTypeRegistry();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate types and API client
|
|
63
|
+
*/
|
|
64
|
+
async generate() {
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
const errors = [];
|
|
67
|
+
const warnings = [];
|
|
68
|
+
const generatedFiles = [];
|
|
69
|
+
try {
|
|
70
|
+
// Load and parse schema
|
|
71
|
+
const schema = await this.loadSchema();
|
|
72
|
+
this.schema = schema;
|
|
73
|
+
// Create generation context
|
|
74
|
+
const context = this.createGenerationContext();
|
|
75
|
+
// Execute before generation hooks
|
|
76
|
+
await this.pluginManager.executeBeforeGeneration(context);
|
|
77
|
+
// Resolve all schema references
|
|
78
|
+
await this.resolveSchemaReferences(schema);
|
|
79
|
+
// Generate types
|
|
80
|
+
let generatedTypes = [];
|
|
81
|
+
if (this.config.generateTypes) {
|
|
82
|
+
generatedTypes = await this.generateTypes(context);
|
|
83
|
+
}
|
|
84
|
+
// Generate API client
|
|
85
|
+
let generatedClients = [];
|
|
86
|
+
if (this.config.generateApiClient) {
|
|
87
|
+
generatedClients = await this.generateApiClients(context);
|
|
88
|
+
}
|
|
89
|
+
// Generate files
|
|
90
|
+
const files = await this.generateFiles(generatedTypes, generatedClients);
|
|
91
|
+
generatedFiles.push(...files);
|
|
92
|
+
// Execute after generation hooks
|
|
93
|
+
const result = {
|
|
94
|
+
success: true,
|
|
95
|
+
generatedFiles,
|
|
96
|
+
errors,
|
|
97
|
+
warnings,
|
|
98
|
+
statistics: this.calculateStatistics(generatedTypes, generatedClients, generatedFiles, Date.now() - startTime),
|
|
99
|
+
};
|
|
100
|
+
await this.pluginManager.executeAfterGeneration(context, result);
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
errors.push({
|
|
105
|
+
code: "GENERATION_ERROR",
|
|
106
|
+
message: error instanceof Error ? error.message : String(error),
|
|
107
|
+
severity: "error",
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
generatedFiles,
|
|
112
|
+
errors,
|
|
113
|
+
warnings,
|
|
114
|
+
statistics: this.calculateStatistics([], [], generatedFiles, Date.now() - startTime),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Validate OpenAPI schema
|
|
120
|
+
*/
|
|
121
|
+
async validate() {
|
|
122
|
+
try {
|
|
123
|
+
const schema = await this.loadSchema();
|
|
124
|
+
const parser = parsers_1.ParserFactory.autoCreateParser({ data: schema }, this.config);
|
|
125
|
+
return await parser.validate(schema);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
return {
|
|
129
|
+
isValid: false,
|
|
130
|
+
errors: [
|
|
131
|
+
{
|
|
132
|
+
code: "VALIDATION_ERROR",
|
|
133
|
+
message: error instanceof Error ? error.message : String(error),
|
|
134
|
+
severity: "error",
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
warnings: [],
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Load schema from various sources
|
|
143
|
+
*/
|
|
144
|
+
async loadSchema() {
|
|
145
|
+
let input = {};
|
|
146
|
+
if (this.config.schemaUrl) {
|
|
147
|
+
input.url = this.config.schemaUrl;
|
|
148
|
+
}
|
|
149
|
+
else if (this.config.schemaFile) {
|
|
150
|
+
input.filePath = this.config.schemaFile;
|
|
151
|
+
}
|
|
152
|
+
else if (this.config.schemaData) {
|
|
153
|
+
input.data = this.config.schemaData;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
throw new Error("No schema source provided");
|
|
157
|
+
}
|
|
158
|
+
const parser = parsers_1.ParserFactory.autoCreateParser(input, this.config);
|
|
159
|
+
return await parser.parse(input);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create generation context
|
|
163
|
+
*/
|
|
164
|
+
createGenerationContext() {
|
|
165
|
+
return {
|
|
166
|
+
config: this.config,
|
|
167
|
+
schema: this.schema,
|
|
168
|
+
resolvedSchemas: this.resolvedSchemas,
|
|
169
|
+
generatedTypes: new Map(),
|
|
170
|
+
generatedClients: new Map(),
|
|
171
|
+
typeRegistry: this.typeRegistry,
|
|
172
|
+
schemaResolver: (ref) => this.resolvedSchemas.get(ref),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Resolve schema references
|
|
177
|
+
*/
|
|
178
|
+
async resolveSchemaReferences(schema) {
|
|
179
|
+
if (!schema.components?.schemas) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// Resolve all schemas
|
|
183
|
+
for (const [name, schemaRef] of Object.entries(schema.components.schemas)) {
|
|
184
|
+
if (typeof schemaRef === "object" && schemaRef !== null) {
|
|
185
|
+
// Stamp a stable generated type name to match $ref terminal name
|
|
186
|
+
schemaRef._generatedTypeName = name;
|
|
187
|
+
this.resolvedSchemas.set(`#/components/schemas/${name}`, schemaRef);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Generate types from schemas
|
|
193
|
+
*/
|
|
194
|
+
async generateTypes(context) {
|
|
195
|
+
const generators = generators_1.TypeGeneratorFactory.createFromConfig(this.config);
|
|
196
|
+
const generatedTypes = [];
|
|
197
|
+
// Generate types for each schema
|
|
198
|
+
for (const [ref, schema] of this.resolvedSchemas) {
|
|
199
|
+
// Apply schema transformations
|
|
200
|
+
const transformedSchema = this.pluginManager.transformSchema(schema, context);
|
|
201
|
+
// Execute before type generation hooks
|
|
202
|
+
await this.pluginManager.executeBeforeTypeGeneration(ref, transformedSchema, context);
|
|
203
|
+
// Generate type
|
|
204
|
+
const generatedType = generators_1.TypeGeneratorFactory.generateType(transformedSchema, context, generators);
|
|
205
|
+
if (generatedType) {
|
|
206
|
+
// Register type
|
|
207
|
+
this.typeRegistry.registerType(generatedType.name, generatedType);
|
|
208
|
+
context.generatedTypes.set(generatedType.name, generatedType);
|
|
209
|
+
// Execute after type generation hooks
|
|
210
|
+
await this.pluginManager.executeAfterTypeGeneration(generatedType.name, generatedType, context);
|
|
211
|
+
generatedTypes.push(generatedType);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return generatedTypes;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Generate API clients
|
|
218
|
+
*/
|
|
219
|
+
async generateApiClients(context) {
|
|
220
|
+
const generatedClients = [];
|
|
221
|
+
// Execute before client generation hooks
|
|
222
|
+
await this.pluginManager.executeBeforeClientGeneration(context);
|
|
223
|
+
// Generate main API client
|
|
224
|
+
const apiClientGenerator = new api_client_generator_1.ApiClientGenerator(context);
|
|
225
|
+
const generatedClient = apiClientGenerator.generate(context);
|
|
226
|
+
// Register client
|
|
227
|
+
context.generatedClients.set(generatedClient.name, generatedClient);
|
|
228
|
+
// Execute after client generation hooks
|
|
229
|
+
await this.pluginManager.executeAfterClientGeneration(generatedClient, context);
|
|
230
|
+
generatedClients.push(generatedClient);
|
|
231
|
+
// Generate custom clients from plugins
|
|
232
|
+
const customGenerators = this.pluginManager.getCustomClientGenerators();
|
|
233
|
+
for (const [name, generator] of customGenerators) {
|
|
234
|
+
try {
|
|
235
|
+
const customClient = generator(context);
|
|
236
|
+
context.generatedClients.set(customClient.name, customClient);
|
|
237
|
+
generatedClients.push(customClient);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
console.warn(`Custom client generator ${name} failed:`, error);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return generatedClients;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Generate files from generated types and clients
|
|
247
|
+
*/
|
|
248
|
+
async generateFiles(generatedTypes, generatedClients) {
|
|
249
|
+
const files = [];
|
|
250
|
+
// Ensure output directory exists
|
|
251
|
+
await fs.mkdir(this.config.outputDir, { recursive: true });
|
|
252
|
+
// Generate types file
|
|
253
|
+
if (generatedTypes.length > 0) {
|
|
254
|
+
const typesFile = await this.generateTypesFile(generatedTypes);
|
|
255
|
+
files.push(typesFile);
|
|
256
|
+
}
|
|
257
|
+
// Generate client files
|
|
258
|
+
for (const client of generatedClients) {
|
|
259
|
+
const clientFile = await this.generateClientFile(client);
|
|
260
|
+
files.push(clientFile);
|
|
261
|
+
}
|
|
262
|
+
// Generate hooks file (first-party) when enabled
|
|
263
|
+
if (this.config.generateHooks) {
|
|
264
|
+
const hooksFile = await this.generateHooksFile();
|
|
265
|
+
if (hooksFile)
|
|
266
|
+
files.push(hooksFile);
|
|
267
|
+
}
|
|
268
|
+
// Generate index file
|
|
269
|
+
if (this.config.generateIndexFile) {
|
|
270
|
+
const indexFile = await this.generateIndexFile(generatedTypes, generatedClients);
|
|
271
|
+
files.push(indexFile);
|
|
272
|
+
}
|
|
273
|
+
// Generate barrel exports
|
|
274
|
+
if (this.config.generateBarrelExports) {
|
|
275
|
+
const barrelFile = await this.generateBarrelFile(generatedTypes, generatedClients);
|
|
276
|
+
files.push(barrelFile);
|
|
277
|
+
}
|
|
278
|
+
return files;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Generate types file
|
|
282
|
+
*/
|
|
283
|
+
async generateTypesFile(generatedTypes) {
|
|
284
|
+
// Collect all dependencies
|
|
285
|
+
const allDependencies = [
|
|
286
|
+
...new Set(generatedTypes.flatMap((t) => t.dependencies)),
|
|
287
|
+
];
|
|
288
|
+
// Generate imports from dependencies
|
|
289
|
+
const imports = this.generateImportsFromDependencies(allDependencies);
|
|
290
|
+
// Generate types content (remove any existing imports from individual types)
|
|
291
|
+
const typesContent = generatedTypes
|
|
292
|
+
.map((type) => {
|
|
293
|
+
// Remove any import statements from the type content
|
|
294
|
+
return type.content
|
|
295
|
+
.replace(/^import\s+.*?from\s+['"][^'"]*['"];?\s*$/gm, "")
|
|
296
|
+
.trim();
|
|
297
|
+
})
|
|
298
|
+
.filter((content) => content.length > 0);
|
|
299
|
+
const content = imports + typesContent.join("\n\n");
|
|
300
|
+
const filePath = path.join(this.config.outputDir, "types.ts");
|
|
301
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
302
|
+
return {
|
|
303
|
+
path: filePath,
|
|
304
|
+
content,
|
|
305
|
+
type: "type",
|
|
306
|
+
dependencies: allDependencies,
|
|
307
|
+
size: Buffer.byteLength(content, "utf-8"),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Generate client file
|
|
312
|
+
*/
|
|
313
|
+
async generateClientFile(client) {
|
|
314
|
+
// Default to a clean, predictable filename when not provided
|
|
315
|
+
const fileName = this.config.outputFileName || `api-client.ts`;
|
|
316
|
+
const filePath = path.join(this.config.outputDir, fileName);
|
|
317
|
+
await fs.writeFile(filePath, client.content, "utf-8");
|
|
318
|
+
return {
|
|
319
|
+
path: filePath,
|
|
320
|
+
content: client.content,
|
|
321
|
+
type: "client",
|
|
322
|
+
dependencies: client.dependencies,
|
|
323
|
+
size: Buffer.byteLength(client.content, "utf-8"),
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Generate index file
|
|
328
|
+
*/
|
|
329
|
+
async generateIndexFile(generatedTypes, generatedClients) {
|
|
330
|
+
const exports = [];
|
|
331
|
+
// Export types - filter out generic instances
|
|
332
|
+
const allTypeExports = generatedTypes.flatMap((type) => type.exports);
|
|
333
|
+
if (allTypeExports.length > 0) {
|
|
334
|
+
// Filter out generic instances and keep only base types
|
|
335
|
+
const baseTypes = new Set();
|
|
336
|
+
for (const exportName of allTypeExports) {
|
|
337
|
+
if (exportName.includes("<") && exportName.includes(">")) {
|
|
338
|
+
// Extract base type name from generic type
|
|
339
|
+
const baseName = exportName.split("<")[0];
|
|
340
|
+
if (baseName && baseName.trim()) {
|
|
341
|
+
baseTypes.add(baseName);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
baseTypes.add(exportName);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (baseTypes.size > 0) {
|
|
349
|
+
exports.push(`export type { ${Array.from(baseTypes).join(", ")} } from './types';`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// Export clients
|
|
353
|
+
for (const client of generatedClients) {
|
|
354
|
+
// Re-export only values, not types
|
|
355
|
+
const valueExports = client.exports.filter((e) => e.endsWith("ApiClient"));
|
|
356
|
+
if (valueExports.length > 0) {
|
|
357
|
+
// Use configured output file name or default 'api-client.ts'
|
|
358
|
+
const clientFileBase = (this.config.outputFileName || `api-client.ts`).replace(/\.ts$/, "");
|
|
359
|
+
exports.push(`export { ${valueExports.join(", ")} } from './${clientFileBase}';`);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// Export hooks if generated
|
|
363
|
+
if (this.config.generateHooks) {
|
|
364
|
+
exports.push(`export { createApiHooks } from './hooks';`);
|
|
365
|
+
}
|
|
366
|
+
const content = exports
|
|
367
|
+
.map((line) => line.startsWith("export type") || line.includes(" from ") ? line : line)
|
|
368
|
+
.join("\n");
|
|
369
|
+
const filePath = path.join(this.config.outputDir, "index.ts");
|
|
370
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
371
|
+
return {
|
|
372
|
+
path: filePath,
|
|
373
|
+
content,
|
|
374
|
+
type: "index",
|
|
375
|
+
dependencies: [],
|
|
376
|
+
size: Buffer.byteLength(content, "utf-8"),
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Generate barrel file
|
|
381
|
+
*/
|
|
382
|
+
async generateBarrelFile(_generatedTypes, _generatedClients) {
|
|
383
|
+
const clientFileBase = (this.config.outputFileName || `api-client.ts`).replace(/\.ts$/, "");
|
|
384
|
+
const content = `// Barrel exports for schemantic generated code
|
|
385
|
+
export * from './types';
|
|
386
|
+
export * from './${clientFileBase}';
|
|
387
|
+
export * from './hooks';
|
|
388
|
+
`;
|
|
389
|
+
const filePath = path.join(this.config.outputDir, "barrel.ts");
|
|
390
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
391
|
+
return {
|
|
392
|
+
path: filePath,
|
|
393
|
+
content,
|
|
394
|
+
type: "barrel",
|
|
395
|
+
dependencies: [],
|
|
396
|
+
size: Buffer.byteLength(content, "utf-8"),
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Generate hooks file when enabled
|
|
401
|
+
*/
|
|
402
|
+
async generateHooksFile() {
|
|
403
|
+
try {
|
|
404
|
+
const hookGen = new hook_generator_1.HookGenerator(this.createGenerationContext());
|
|
405
|
+
const hooks = hookGen.generate();
|
|
406
|
+
const filePath = path.join(this.config.outputDir, "hooks.ts");
|
|
407
|
+
await fs.writeFile(filePath, hooks.content, "utf-8");
|
|
408
|
+
return {
|
|
409
|
+
path: filePath,
|
|
410
|
+
content: hooks.content,
|
|
411
|
+
type: "hook",
|
|
412
|
+
dependencies: [],
|
|
413
|
+
size: Buffer.byteLength(hooks.content, "utf-8"),
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
// Non-fatal: skip hooks on error
|
|
418
|
+
return undefined;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Calculate generation statistics
|
|
423
|
+
*/
|
|
424
|
+
calculateStatistics(generatedTypes, generatedClients, generatedFiles, generationTime) {
|
|
425
|
+
const totalEndpoints = generatedClients.reduce((sum, client) => sum + client.endpoints.length, 0);
|
|
426
|
+
const totalSize = generatedFiles.reduce((sum, file) => sum + file.size, 0);
|
|
427
|
+
return {
|
|
428
|
+
totalTypes: generatedTypes.length,
|
|
429
|
+
totalEndpoints,
|
|
430
|
+
totalFiles: generatedFiles.length,
|
|
431
|
+
totalSize,
|
|
432
|
+
generationTime,
|
|
433
|
+
schemaSize: this.schema ? JSON.stringify(this.schema).length : 0,
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Create type registry
|
|
438
|
+
*/
|
|
439
|
+
createTypeRegistry() {
|
|
440
|
+
const types = new Map();
|
|
441
|
+
return {
|
|
442
|
+
registerType: (name, type) => {
|
|
443
|
+
types.set(name, type);
|
|
444
|
+
},
|
|
445
|
+
getType: (name) => types.get(name),
|
|
446
|
+
getAllTypes: () => Array.from(types.values()),
|
|
447
|
+
getDependencies: (name) => {
|
|
448
|
+
const type = types.get(name);
|
|
449
|
+
return type ? type.dependencies : [];
|
|
450
|
+
},
|
|
451
|
+
resolveDependencies: () => {
|
|
452
|
+
const resolved = [];
|
|
453
|
+
const visited = new Set();
|
|
454
|
+
const resolve = (typeName) => {
|
|
455
|
+
if (visited.has(typeName))
|
|
456
|
+
return;
|
|
457
|
+
visited.add(typeName);
|
|
458
|
+
const type = types.get(typeName);
|
|
459
|
+
if (type) {
|
|
460
|
+
for (const dep of type.dependencies) {
|
|
461
|
+
resolve(dep);
|
|
462
|
+
}
|
|
463
|
+
resolved.push(typeName);
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
for (const typeName of types.keys()) {
|
|
467
|
+
resolve(typeName);
|
|
468
|
+
}
|
|
469
|
+
return resolved;
|
|
470
|
+
},
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Get plugin manager
|
|
475
|
+
*/
|
|
476
|
+
getPluginManager() {
|
|
477
|
+
return this.pluginManager;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Get configuration
|
|
481
|
+
*/
|
|
482
|
+
getConfig() {
|
|
483
|
+
return this.config;
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Generate import statements from dependencies
|
|
487
|
+
*/
|
|
488
|
+
generateImportsFromDependencies(dependencies) {
|
|
489
|
+
if (dependencies.length === 0) {
|
|
490
|
+
return "";
|
|
491
|
+
}
|
|
492
|
+
const imports = [];
|
|
493
|
+
// Known external package dependencies that should generate imports
|
|
494
|
+
const KNOWN_EXTERNAL_PACKAGES = new Set([
|
|
495
|
+
"zod",
|
|
496
|
+
"class-validator",
|
|
497
|
+
"react-query",
|
|
498
|
+
"crypto-js",
|
|
499
|
+
"performance-hooks",
|
|
500
|
+
"axios",
|
|
501
|
+
"fetch",
|
|
502
|
+
]);
|
|
503
|
+
// Generate import statements for known external dependencies only
|
|
504
|
+
for (const dep of dependencies) {
|
|
505
|
+
// Only generate imports for known external packages
|
|
506
|
+
// Skip type names that are defined in the same file
|
|
507
|
+
if (!KNOWN_EXTERNAL_PACKAGES.has(dep)) {
|
|
508
|
+
continue; // Skip internal type references
|
|
509
|
+
}
|
|
510
|
+
switch (dep) {
|
|
511
|
+
case "zod":
|
|
512
|
+
imports.push("import { z } from 'zod';");
|
|
513
|
+
break;
|
|
514
|
+
case "class-validator":
|
|
515
|
+
imports.push("import { IsString, IsNumber, IsBoolean, IsOptional, IsNotEmpty, MinLength, MaxLength, Min, Max, Matches } from 'class-validator';");
|
|
516
|
+
break;
|
|
517
|
+
case "react-query":
|
|
518
|
+
imports.push("import { useQuery, useMutation, useQueryClient } from 'react-query';");
|
|
519
|
+
break;
|
|
520
|
+
case "crypto-js":
|
|
521
|
+
imports.push("import CryptoJS from 'crypto-js';");
|
|
522
|
+
break;
|
|
523
|
+
case "performance-hooks":
|
|
524
|
+
imports.push("import { performance } from 'perf_hooks';");
|
|
525
|
+
break;
|
|
526
|
+
case "axios":
|
|
527
|
+
imports.push("import axios from 'axios';");
|
|
528
|
+
break;
|
|
529
|
+
case "fetch":
|
|
530
|
+
// fetch is a global in modern environments, no import needed
|
|
531
|
+
break;
|
|
532
|
+
// Add more external dependencies as needed
|
|
533
|
+
default:
|
|
534
|
+
// Should not reach here due to the filter above
|
|
535
|
+
console.warn(`Unknown external dependency: ${dep}`);
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return imports.length > 0 ? imports.join("\n") + "\n\n" : "";
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
exports.Schemantic = Schemantic;
|
|
543
|
+
//# sourceMappingURL=schemantic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemantic.js","sourceRoot":"","sources":["../../src/core/schemantic.ts"],"names":[],"mappings":"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"}
|