zinfer 0.0.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +477 -28
- package/bin/zinfer +2 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +486 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/brand-detector.d.ts +32 -0
- package/dist/core/brand-detector.d.ts.map +1 -0
- package/dist/core/brand-detector.js +121 -0
- package/dist/core/brand-detector.js.map +1 -0
- package/dist/core/config-loader.d.ts +87 -0
- package/dist/core/config-loader.d.ts.map +1 -0
- package/dist/core/config-loader.js +105 -0
- package/dist/core/config-loader.js.map +1 -0
- package/dist/core/description-extractor.d.ts +54 -0
- package/dist/core/description-extractor.d.ts.map +1 -0
- package/dist/core/description-extractor.js +180 -0
- package/dist/core/description-extractor.js.map +1 -0
- package/dist/core/errors.d.ts +35 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +96 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/extractor.d.ts +121 -0
- package/dist/core/extractor.d.ts.map +1 -0
- package/dist/core/extractor.js +504 -0
- package/dist/core/extractor.js.map +1 -0
- package/dist/core/file-resolver.d.ts +41 -0
- package/dist/core/file-resolver.d.ts.map +1 -0
- package/dist/core/file-resolver.js +95 -0
- package/dist/core/file-resolver.js.map +1 -0
- package/dist/core/getter-resolver.d.ts +67 -0
- package/dist/core/getter-resolver.d.ts.map +1 -0
- package/dist/core/getter-resolver.js +234 -0
- package/dist/core/getter-resolver.js.map +1 -0
- package/dist/core/import-resolver.d.ts +51 -0
- package/dist/core/import-resolver.d.ts.map +1 -0
- package/dist/core/import-resolver.js +158 -0
- package/dist/core/import-resolver.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +20 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +36 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/name-mapper.d.ts +45 -0
- package/dist/core/name-mapper.d.ts.map +1 -0
- package/dist/core/name-mapper.js +82 -0
- package/dist/core/name-mapper.js.map +1 -0
- package/dist/core/normalizer.d.ts +24 -0
- package/dist/core/normalizer.d.ts.map +1 -0
- package/dist/core/normalizer.js +50 -0
- package/dist/core/normalizer.js.map +1 -0
- package/dist/core/schema-detector.d.ts +49 -0
- package/dist/core/schema-detector.d.ts.map +1 -0
- package/dist/core/schema-detector.js +272 -0
- package/dist/core/schema-detector.js.map +1 -0
- package/dist/core/schema-reference-analyzer.d.ts +77 -0
- package/dist/core/schema-reference-analyzer.d.ts.map +1 -0
- package/dist/core/schema-reference-analyzer.js +269 -0
- package/dist/core/schema-reference-analyzer.js.map +1 -0
- package/dist/core/test-generator.d.ts +97 -0
- package/dist/core/test-generator.d.ts.map +1 -0
- package/dist/core/test-generator.js +177 -0
- package/dist/core/test-generator.js.map +1 -0
- package/dist/core/type-printer.d.ts +46 -0
- package/dist/core/type-printer.d.ts.map +1 -0
- package/dist/core/type-printer.js +519 -0
- package/dist/core/type-printer.js.map +1 -0
- package/dist/core/types.d.ts +124 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -7
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats the extraction result for console output.
|
|
3
|
+
*
|
|
4
|
+
* @param result - The extraction result containing input and output types
|
|
5
|
+
* @param options - Formatting options
|
|
6
|
+
* @returns Formatted string ready for console output
|
|
7
|
+
*/
|
|
8
|
+
export function formatResult(result, options = {}) {
|
|
9
|
+
const { indent = " ", includeSchemaName = false } = options;
|
|
10
|
+
const lines = [];
|
|
11
|
+
if (includeSchemaName) {
|
|
12
|
+
lines.push(`// Schema: ${result.schemaName}`);
|
|
13
|
+
lines.push("");
|
|
14
|
+
}
|
|
15
|
+
lines.push("// input");
|
|
16
|
+
lines.push(prettifyType(result.input, indent));
|
|
17
|
+
lines.push("");
|
|
18
|
+
lines.push("// output");
|
|
19
|
+
lines.push(prettifyType(result.output, indent));
|
|
20
|
+
return lines.join("\n");
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Prettifies a type string by formatting object types with proper indentation.
|
|
24
|
+
*
|
|
25
|
+
* @param typeStr - The type string to format
|
|
26
|
+
* @param indent - The indentation string to use
|
|
27
|
+
* @param descriptions - Optional field descriptions to insert as TSDoc comments
|
|
28
|
+
* @param prefix - Current path prefix for nested objects
|
|
29
|
+
* @returns The formatted type string
|
|
30
|
+
*/
|
|
31
|
+
function prettifyType(typeStr, indent, descriptions, prefix = "") {
|
|
32
|
+
// If it's not an object type, return as-is
|
|
33
|
+
if (!typeStr.startsWith("{") || !typeStr.endsWith("}")) {
|
|
34
|
+
return typeStr;
|
|
35
|
+
}
|
|
36
|
+
const prettified = prettifyObjectType(typeStr, indent, descriptions, prefix);
|
|
37
|
+
// Remove trailing spaces from each line
|
|
38
|
+
return prettified
|
|
39
|
+
.split("\n")
|
|
40
|
+
.map((line) => line.trimEnd())
|
|
41
|
+
.join("\n");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a TSDoc comment line.
|
|
45
|
+
*/
|
|
46
|
+
function createTsDocComment(description, indentStr) {
|
|
47
|
+
return `${indentStr}/** ${description} */\n`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Gets description for a field path.
|
|
51
|
+
*/
|
|
52
|
+
function getFieldDescription(fieldName, prefix, descriptions) {
|
|
53
|
+
if (!descriptions) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const path = prefix ? `${prefix}.${fieldName}` : fieldName;
|
|
57
|
+
const desc = descriptions.find((d) => d.path === path);
|
|
58
|
+
return desc?.description;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates initial parser state.
|
|
62
|
+
*/
|
|
63
|
+
function createParserState() {
|
|
64
|
+
return {
|
|
65
|
+
result: "",
|
|
66
|
+
depth: 0,
|
|
67
|
+
inString: false,
|
|
68
|
+
stringChar: "",
|
|
69
|
+
currentFieldName: "",
|
|
70
|
+
capturingFieldName: false,
|
|
71
|
+
pathStack: [],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Updates string literal tracking state.
|
|
76
|
+
* Returns true if currently inside a string literal.
|
|
77
|
+
*/
|
|
78
|
+
function updateStringState(state, char, prevChar) {
|
|
79
|
+
if ((char === '"' || char === "'" || char === "`") && prevChar !== "\\") {
|
|
80
|
+
if (!state.inString) {
|
|
81
|
+
state.inString = true;
|
|
82
|
+
state.stringChar = char;
|
|
83
|
+
}
|
|
84
|
+
else if (char === state.stringChar) {
|
|
85
|
+
state.inString = false;
|
|
86
|
+
state.stringChar = "";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return state.inString;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Handles opening brace character.
|
|
93
|
+
*/
|
|
94
|
+
function handleOpenBrace(state, indent) {
|
|
95
|
+
state.depth++;
|
|
96
|
+
state.result += "{\n" + indent.repeat(state.depth);
|
|
97
|
+
state.capturingFieldName = true;
|
|
98
|
+
state.currentFieldName = "";
|
|
99
|
+
if (state.depth > 1 && state.currentFieldName) {
|
|
100
|
+
state.pathStack.push(state.currentFieldName);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Handles closing brace character.
|
|
105
|
+
*/
|
|
106
|
+
function handleCloseBrace(state, indent) {
|
|
107
|
+
state.depth--;
|
|
108
|
+
if (state.pathStack.length > 0 && state.depth >= 1) {
|
|
109
|
+
state.pathStack.pop();
|
|
110
|
+
}
|
|
111
|
+
state.result += "\n" + indent.repeat(state.depth) + "}";
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Handles colon character and inserts TSDoc comment if applicable.
|
|
115
|
+
*/
|
|
116
|
+
function handleColon(state, indent, descriptions, prefix) {
|
|
117
|
+
if (state.capturingFieldName && state.currentFieldName) {
|
|
118
|
+
const cleanFieldName = state.currentFieldName.replace(/\?$/, "").trim();
|
|
119
|
+
const currentPath = [...state.pathStack, prefix].filter(Boolean).join(".");
|
|
120
|
+
const desc = getFieldDescription(cleanFieldName, currentPath, descriptions);
|
|
121
|
+
if (desc) {
|
|
122
|
+
const lastNewlinePos = state.result.lastIndexOf("\n");
|
|
123
|
+
const beforeField = state.result.substring(0, lastNewlinePos + 1);
|
|
124
|
+
const fieldPart = state.result.substring(lastNewlinePos + 1);
|
|
125
|
+
state.result = beforeField + createTsDocComment(desc, indent.repeat(state.depth)) + fieldPart;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
state.result += ":";
|
|
129
|
+
state.capturingFieldName = false;
|
|
130
|
+
state.currentFieldName = "";
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Handles semicolon character.
|
|
134
|
+
*/
|
|
135
|
+
function handleSemicolon(state, indent, typeStr, index) {
|
|
136
|
+
const remaining = typeStr.slice(index + 1).trim();
|
|
137
|
+
if (remaining.startsWith("}")) {
|
|
138
|
+
state.result += ";";
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
state.result += ";\n" + indent.repeat(state.depth);
|
|
142
|
+
state.capturingFieldName = true;
|
|
143
|
+
state.currentFieldName = "";
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Handles space character, skipping extra spaces after newlines.
|
|
148
|
+
*/
|
|
149
|
+
function handleSpace(state, indent) {
|
|
150
|
+
if (state.result.endsWith("\n" + indent.repeat(state.depth)) ||
|
|
151
|
+
state.result.endsWith("{\n" + indent.repeat(state.depth))) {
|
|
152
|
+
return true; // Skip this space
|
|
153
|
+
}
|
|
154
|
+
state.result += " ";
|
|
155
|
+
if (state.capturingFieldName) {
|
|
156
|
+
state.currentFieldName += " ";
|
|
157
|
+
}
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Handles default character.
|
|
162
|
+
*/
|
|
163
|
+
function handleDefaultChar(state, char) {
|
|
164
|
+
state.result += char;
|
|
165
|
+
if (state.capturingFieldName) {
|
|
166
|
+
state.currentFieldName += char;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Handles character inside a string literal.
|
|
171
|
+
*/
|
|
172
|
+
function handleStringChar(state, char) {
|
|
173
|
+
state.result += char;
|
|
174
|
+
if (state.capturingFieldName) {
|
|
175
|
+
state.currentFieldName += char;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Formats an object type string with proper indentation and line breaks.
|
|
180
|
+
*/
|
|
181
|
+
function prettifyObjectType(typeStr, indent, descriptions, prefix = "") {
|
|
182
|
+
const state = createParserState();
|
|
183
|
+
for (let i = 0; i < typeStr.length; i++) {
|
|
184
|
+
const char = typeStr[i];
|
|
185
|
+
const prevChar = typeStr[i - 1];
|
|
186
|
+
const inString = updateStringState(state, char, prevChar);
|
|
187
|
+
if (inString) {
|
|
188
|
+
handleStringChar(state, char);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
switch (char) {
|
|
192
|
+
case "{":
|
|
193
|
+
handleOpenBrace(state, indent);
|
|
194
|
+
break;
|
|
195
|
+
case "}":
|
|
196
|
+
handleCloseBrace(state, indent);
|
|
197
|
+
break;
|
|
198
|
+
case ":":
|
|
199
|
+
handleColon(state, indent, descriptions, prefix);
|
|
200
|
+
break;
|
|
201
|
+
case ";":
|
|
202
|
+
handleSemicolon(state, indent, typeStr, i);
|
|
203
|
+
break;
|
|
204
|
+
case " ":
|
|
205
|
+
handleSpace(state, indent);
|
|
206
|
+
break;
|
|
207
|
+
default:
|
|
208
|
+
handleDefaultChar(state, char);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return state.result;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Formats the extraction result as input type only.
|
|
215
|
+
*/
|
|
216
|
+
export function formatInputOnly(result, options = {}) {
|
|
217
|
+
const { indent = " " } = options;
|
|
218
|
+
return prettifyType(result.input, indent);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Formats the extraction result as output type only.
|
|
222
|
+
*/
|
|
223
|
+
export function formatOutputOnly(result, options = {}) {
|
|
224
|
+
const { indent = " " } = options;
|
|
225
|
+
return prettifyType(result.output, indent);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Applies brand information to a type string.
|
|
229
|
+
*
|
|
230
|
+
* @param typeStr - The type string to apply brands to
|
|
231
|
+
* @param brands - Array of brand information
|
|
232
|
+
* @returns The type string with brands applied
|
|
233
|
+
*/
|
|
234
|
+
function applyBrands(typeStr, brands) {
|
|
235
|
+
if (!brands || brands.length === 0) {
|
|
236
|
+
return typeStr;
|
|
237
|
+
}
|
|
238
|
+
let result = typeStr;
|
|
239
|
+
for (const brand of brands) {
|
|
240
|
+
if (brand.fieldPath === "") {
|
|
241
|
+
// Root-level brand: wrap the entire type
|
|
242
|
+
result = `${result} & BRAND<"${brand.brandName}">`;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// Field-level brand: find the field and apply brand to its type
|
|
246
|
+
result = applyBrandToField(result, brand.fieldPath, brand.brandName);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Applies a brand to a specific field in an object type.
|
|
253
|
+
*/
|
|
254
|
+
function applyBrandToField(typeStr, fieldPath, brandName) {
|
|
255
|
+
// Handle nested field paths
|
|
256
|
+
const parts = fieldPath.split(".");
|
|
257
|
+
const fieldName = parts[parts.length - 1];
|
|
258
|
+
// Find the field pattern (fieldName: type or fieldName?: type)
|
|
259
|
+
const fieldPatterns = [`${fieldName}: `, `${fieldName}?: `];
|
|
260
|
+
for (const pattern of fieldPatterns) {
|
|
261
|
+
const idx = typeStr.indexOf(pattern);
|
|
262
|
+
if (idx === -1)
|
|
263
|
+
continue;
|
|
264
|
+
const valueStart = idx + pattern.length;
|
|
265
|
+
// Find the end of the field type by tracking braces/brackets/parentheses
|
|
266
|
+
let depth = 0;
|
|
267
|
+
let endIdx = valueStart;
|
|
268
|
+
let inString = false;
|
|
269
|
+
let stringChar = "";
|
|
270
|
+
while (endIdx < typeStr.length) {
|
|
271
|
+
const char = typeStr[endIdx];
|
|
272
|
+
const prevChar = typeStr[endIdx - 1];
|
|
273
|
+
// Track string literals
|
|
274
|
+
if ((char === '"' || char === "'" || char === "`") && prevChar !== "\\") {
|
|
275
|
+
if (!inString) {
|
|
276
|
+
inString = true;
|
|
277
|
+
stringChar = char;
|
|
278
|
+
}
|
|
279
|
+
else if (char === stringChar) {
|
|
280
|
+
inString = false;
|
|
281
|
+
stringChar = "";
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (!inString) {
|
|
285
|
+
if (char === "{" || char === "[" || char === "(" || char === "<") {
|
|
286
|
+
depth++;
|
|
287
|
+
}
|
|
288
|
+
else if (char === "}" || char === "]" || char === ")" || char === ">") {
|
|
289
|
+
if (depth === 0)
|
|
290
|
+
break;
|
|
291
|
+
depth--;
|
|
292
|
+
}
|
|
293
|
+
else if (char === ";" && depth === 0) {
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
endIdx++;
|
|
298
|
+
}
|
|
299
|
+
// Extract the current type
|
|
300
|
+
const fieldType = typeStr.substring(valueStart, endIdx).trim();
|
|
301
|
+
const brandedType = `${fieldType} & BRAND<"${brandName}">`;
|
|
302
|
+
return typeStr.substring(0, valueStart) + brandedType + typeStr.substring(endIdx);
|
|
303
|
+
}
|
|
304
|
+
return typeStr;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Formats a single extraction result as TypeScript type declaration(s).
|
|
308
|
+
*
|
|
309
|
+
* @param result - The extraction result
|
|
310
|
+
* @param typeName - The mapped type names
|
|
311
|
+
* @param options - Declaration options
|
|
312
|
+
* @returns TypeScript type declaration string
|
|
313
|
+
*/
|
|
314
|
+
export function formatAsDeclaration(result, typeName, options = {}) {
|
|
315
|
+
const { inputOnly, outputOnly, mergeSame } = options;
|
|
316
|
+
const lines = [];
|
|
317
|
+
const indent = " ";
|
|
318
|
+
const inputFormatted = prettifyType(result.input, indent, result.fieldDescriptions);
|
|
319
|
+
// Apply brands to output type only (brands are runtime-only, not for input)
|
|
320
|
+
const outputWithBrands = applyBrands(result.output, result.brands);
|
|
321
|
+
const outputFormatted = prettifyType(outputWithBrands, indent, result.fieldDescriptions);
|
|
322
|
+
// Schema-level TSDoc comment
|
|
323
|
+
const schemaComment = result.description ? `/**\n * ${result.description}\n */\n` : "";
|
|
324
|
+
// Only export if the original schema was exported
|
|
325
|
+
const exportKeyword = result.isExported ? "export " : "";
|
|
326
|
+
// If mergeSame is enabled and types are identical (compare without brands for input)
|
|
327
|
+
if (mergeSame && result.input === result.output && !result.brands?.length) {
|
|
328
|
+
lines.push(`${schemaComment}${exportKeyword}type ${typeName.unifiedName} = ${inputFormatted};`);
|
|
329
|
+
// Emit aliases for input/output names that differ from the unified name
|
|
330
|
+
if (typeName.inputName !== typeName.unifiedName) {
|
|
331
|
+
lines.push(`${exportKeyword}type ${typeName.inputName} = ${typeName.unifiedName};`);
|
|
332
|
+
}
|
|
333
|
+
if (typeName.outputName !== typeName.unifiedName &&
|
|
334
|
+
typeName.outputName !== typeName.inputName) {
|
|
335
|
+
lines.push(`${exportKeyword}type ${typeName.outputName} = ${typeName.unifiedName};`);
|
|
336
|
+
}
|
|
337
|
+
return lines.join("\n");
|
|
338
|
+
}
|
|
339
|
+
// Input type
|
|
340
|
+
if (!outputOnly) {
|
|
341
|
+
lines.push(`${schemaComment}${exportKeyword}type ${typeName.inputName} = ${inputFormatted};`);
|
|
342
|
+
}
|
|
343
|
+
// Output type
|
|
344
|
+
if (!inputOnly) {
|
|
345
|
+
if (lines.length > 0) {
|
|
346
|
+
lines.push("");
|
|
347
|
+
}
|
|
348
|
+
// Only add schema comment to output if input was not added
|
|
349
|
+
const outputComment = outputOnly ? schemaComment : "";
|
|
350
|
+
lines.push(`${outputComment}${exportKeyword}type ${typeName.outputName} = ${outputFormatted};`);
|
|
351
|
+
}
|
|
352
|
+
return lines.join("\n");
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Formats multiple extraction results as TypeScript type declarations.
|
|
356
|
+
*
|
|
357
|
+
* @param results - Array of extraction results
|
|
358
|
+
* @param mapName - Function to map schema name to type names
|
|
359
|
+
* @param options - Declaration options
|
|
360
|
+
* @returns TypeScript type declarations string
|
|
361
|
+
*/
|
|
362
|
+
/**
|
|
363
|
+
* Escapes special characters in a string for use in a RegExp.
|
|
364
|
+
*/
|
|
365
|
+
function escapeRegExp(str) {
|
|
366
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
367
|
+
}
|
|
368
|
+
export function formatMultipleAsDeclarations(results, mapName, options = {}) {
|
|
369
|
+
// Build a map of schema names to their mapped type names (exported only)
|
|
370
|
+
const typeNameMap = new Map();
|
|
371
|
+
for (const result of results) {
|
|
372
|
+
if (!result.isExported)
|
|
373
|
+
continue;
|
|
374
|
+
typeNameMap.set(result.schemaName, mapName(result.schemaName));
|
|
375
|
+
}
|
|
376
|
+
// Pass 1: Replace schema references with correct type names
|
|
377
|
+
let fixedResults = results.map((result) => {
|
|
378
|
+
let input = result.input;
|
|
379
|
+
let output = result.output;
|
|
380
|
+
for (const [schemaName, mappedName] of typeNameMap) {
|
|
381
|
+
const escapedSchemaName = escapeRegExp(schemaName);
|
|
382
|
+
const inputPattern = new RegExp(`\\b${escapedSchemaName}Input\\b`, "g");
|
|
383
|
+
input = input.replace(inputPattern, mappedName.inputName);
|
|
384
|
+
const outputPattern = new RegExp(`\\b${escapedSchemaName}Output\\b`, "g");
|
|
385
|
+
output = output.replace(outputPattern, mappedName.outputName);
|
|
386
|
+
}
|
|
387
|
+
return { ...result, input, output };
|
|
388
|
+
});
|
|
389
|
+
// Pass 2: When mergeSame is enabled, determine which schemas can be merged and
|
|
390
|
+
// replace input/output-specific names with unified names.
|
|
391
|
+
// Uses topological sort to process schemas in dependency order so that
|
|
392
|
+
// transitive merges (A → B → C) are resolved in a single pass.
|
|
393
|
+
if (options.mergeSame) {
|
|
394
|
+
// Build dependency graph: which schemas does each schema reference?
|
|
395
|
+
const deps = new Map();
|
|
396
|
+
for (const result of fixedResults) {
|
|
397
|
+
const refSet = new Set();
|
|
398
|
+
for (const [, mapped] of typeNameMap) {
|
|
399
|
+
if (mapped.inputName === mapped.unifiedName)
|
|
400
|
+
continue;
|
|
401
|
+
const inputRe = new RegExp(`\\b${escapeRegExp(mapped.inputName)}\\b`);
|
|
402
|
+
const outputRe = new RegExp(`\\b${escapeRegExp(mapped.outputName)}\\b`);
|
|
403
|
+
if (inputRe.test(result.input) || outputRe.test(result.output)) {
|
|
404
|
+
refSet.add(mapped.inputName);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
deps.set(result.schemaName, refSet);
|
|
408
|
+
}
|
|
409
|
+
// Map inputName back to schemaName for dependency lookup
|
|
410
|
+
const inputNameToSchema = new Map();
|
|
411
|
+
for (const [schemaName, mapped] of typeNameMap) {
|
|
412
|
+
inputNameToSchema.set(mapped.inputName, schemaName);
|
|
413
|
+
}
|
|
414
|
+
// Topological sort (Kahn's algorithm)
|
|
415
|
+
const inDegree = new Map();
|
|
416
|
+
const graph = new Map();
|
|
417
|
+
for (const result of fixedResults) {
|
|
418
|
+
inDegree.set(result.schemaName, 0);
|
|
419
|
+
graph.set(result.schemaName, []);
|
|
420
|
+
}
|
|
421
|
+
for (const [schemaName, refInputNames] of deps) {
|
|
422
|
+
let count = 0;
|
|
423
|
+
for (const refInputName of refInputNames) {
|
|
424
|
+
const depSchema = inputNameToSchema.get(refInputName);
|
|
425
|
+
if (depSchema && graph.has(depSchema)) {
|
|
426
|
+
graph.get(depSchema).push(schemaName);
|
|
427
|
+
count++;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
inDegree.set(schemaName, count);
|
|
431
|
+
}
|
|
432
|
+
const order = [];
|
|
433
|
+
const queue = [...inDegree.entries()].filter(([, d]) => d === 0).map(([n]) => n);
|
|
434
|
+
while (queue.length > 0) {
|
|
435
|
+
const node = queue.shift();
|
|
436
|
+
order.push(node);
|
|
437
|
+
for (const next of graph.get(node) ?? []) {
|
|
438
|
+
const d = inDegree.get(next) - 1;
|
|
439
|
+
inDegree.set(next, d);
|
|
440
|
+
if (d === 0)
|
|
441
|
+
queue.push(next);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// Append any remaining (cyclic) schemas at the end
|
|
445
|
+
for (const result of fixedResults) {
|
|
446
|
+
if (!order.includes(result.schemaName))
|
|
447
|
+
order.push(result.schemaName);
|
|
448
|
+
}
|
|
449
|
+
// Process in topological order, accumulating merged schemas
|
|
450
|
+
const mergedSet = new Set();
|
|
451
|
+
const resultMap = new Map(fixedResults.map((r) => [r.schemaName, r]));
|
|
452
|
+
for (const schemaName of order) {
|
|
453
|
+
const result = resultMap.get(schemaName);
|
|
454
|
+
if (!result)
|
|
455
|
+
continue;
|
|
456
|
+
let { input, output } = result;
|
|
457
|
+
// Apply unifications from already-determined merged schemas
|
|
458
|
+
for (const mergedSchema of mergedSet) {
|
|
459
|
+
const mapped = typeNameMap.get(mergedSchema);
|
|
460
|
+
if (!mapped)
|
|
461
|
+
continue;
|
|
462
|
+
const escapedInput = escapeRegExp(mapped.inputName);
|
|
463
|
+
const escapedOutput = escapeRegExp(mapped.outputName);
|
|
464
|
+
input = input.replace(new RegExp(`\\b${escapedInput}\\b`, "g"), mapped.unifiedName);
|
|
465
|
+
output = output.replace(new RegExp(`\\b${escapedOutput}\\b`, "g"), mapped.unifiedName);
|
|
466
|
+
}
|
|
467
|
+
resultMap.set(schemaName, { ...result, input, output });
|
|
468
|
+
// Check if this schema is now mergeable
|
|
469
|
+
if (input === output && !(result.brands && result.brands.length > 0)) {
|
|
470
|
+
const mapped = typeNameMap.get(schemaName);
|
|
471
|
+
if (mapped && mapped.inputName !== mapped.unifiedName) {
|
|
472
|
+
mergedSet.add(schemaName);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
fixedResults = fixedResults.map((r) => resultMap.get(r.schemaName) ?? r);
|
|
477
|
+
}
|
|
478
|
+
const declarations = [];
|
|
479
|
+
// Only generate declarations for exported schemas
|
|
480
|
+
for (const result of fixedResults) {
|
|
481
|
+
if (!result.isExported) {
|
|
482
|
+
continue;
|
|
483
|
+
}
|
|
484
|
+
const typeName = mapName(result.schemaName);
|
|
485
|
+
const declaration = formatAsDeclaration(result, typeName, options);
|
|
486
|
+
declarations.push(declaration);
|
|
487
|
+
}
|
|
488
|
+
return declarations.join("\n\n");
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Checks if any results have brand information.
|
|
492
|
+
*/
|
|
493
|
+
function hasBrands(results) {
|
|
494
|
+
return results.some((r) => r.brands && r.brands.length > 0);
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Generates a complete TypeScript declaration file content.
|
|
498
|
+
*
|
|
499
|
+
* @param results - Array of extraction results
|
|
500
|
+
* @param mapName - Function to map schema name to type names
|
|
501
|
+
* @param options - Declaration options
|
|
502
|
+
* @returns Complete .d.ts or .ts file content
|
|
503
|
+
*/
|
|
504
|
+
export function generateDeclarationFile(results, mapName, options = {}) {
|
|
505
|
+
const lines = [];
|
|
506
|
+
// Add header comment
|
|
507
|
+
lines.push("// Generated by zinfer - Do not edit manually");
|
|
508
|
+
lines.push("");
|
|
509
|
+
// Add BRAND import if any result has brands
|
|
510
|
+
if (hasBrands(results)) {
|
|
511
|
+
lines.push('import type { BRAND } from "zod";');
|
|
512
|
+
lines.push("");
|
|
513
|
+
}
|
|
514
|
+
// Add type declarations
|
|
515
|
+
lines.push(formatMultipleAsDeclarations(results, mapName, options));
|
|
516
|
+
lines.push("");
|
|
517
|
+
return lines.join("\n");
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=type-printer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-printer.js","sourceRoot":"","sources":["../../src/core/type-printer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared type definitions for zinfer.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Information about a detected Zod schema in a source file.
|
|
6
|
+
*/
|
|
7
|
+
export interface DetectedSchema {
|
|
8
|
+
/** Variable name of the schema */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Whether the schema is exported */
|
|
11
|
+
isExported: boolean;
|
|
12
|
+
/** Line number where the schema is defined */
|
|
13
|
+
line: number;
|
|
14
|
+
/** Explicit type annotation if present (e.g., "Category" from z.ZodType<Category>) */
|
|
15
|
+
explicitType?: string;
|
|
16
|
+
/** JSDoc comment if present */
|
|
17
|
+
jsDoc?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Field description from Zod .describe().
|
|
21
|
+
*/
|
|
22
|
+
export interface FieldDescription {
|
|
23
|
+
/** Field path (e.g., "user.name" for nested fields) */
|
|
24
|
+
path: string;
|
|
25
|
+
/** Description text */
|
|
26
|
+
description: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Information about a branded type.
|
|
30
|
+
*/
|
|
31
|
+
export interface BrandInfo {
|
|
32
|
+
/** The brand name (e.g., "UserId") */
|
|
33
|
+
brandName: string;
|
|
34
|
+
/** The field path where the brand is applied (empty string for root-level) */
|
|
35
|
+
fieldPath: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Result of extracting types from a single schema.
|
|
39
|
+
*/
|
|
40
|
+
export interface ExtractResult {
|
|
41
|
+
/** Name of the schema */
|
|
42
|
+
schemaName: string;
|
|
43
|
+
/** Extracted input type as string */
|
|
44
|
+
input: string;
|
|
45
|
+
/** Extracted output type as string */
|
|
46
|
+
output: string;
|
|
47
|
+
/** Whether the original schema was exported */
|
|
48
|
+
isExported: boolean;
|
|
49
|
+
/** Schema-level description from .describe() */
|
|
50
|
+
description?: string;
|
|
51
|
+
/** Field descriptions from .describe() */
|
|
52
|
+
fieldDescriptions?: FieldDescription[];
|
|
53
|
+
/** Brand information for output type */
|
|
54
|
+
brands?: BrandInfo[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Result of extracting types from a single file with multiple schemas.
|
|
58
|
+
*/
|
|
59
|
+
export interface FileExtractResult {
|
|
60
|
+
/** Path to the source file */
|
|
61
|
+
filePath: string;
|
|
62
|
+
/** Extracted schemas */
|
|
63
|
+
schemas: ExtractResult[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Mapped type names for a schema.
|
|
67
|
+
*/
|
|
68
|
+
export interface MappedTypeName {
|
|
69
|
+
/** Original schema name */
|
|
70
|
+
originalName: string;
|
|
71
|
+
/** Generated input type name */
|
|
72
|
+
inputName: string;
|
|
73
|
+
/** Generated output type name */
|
|
74
|
+
outputName: string;
|
|
75
|
+
/** Unified name (when input === output) */
|
|
76
|
+
unifiedName: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Options for name mapping.
|
|
80
|
+
*/
|
|
81
|
+
export interface NameMappingOptions {
|
|
82
|
+
/** Suffix to remove from schema names (e.g., "Schema") */
|
|
83
|
+
removeSuffix?: string;
|
|
84
|
+
/** Suffix to add for input types (default: "Input") */
|
|
85
|
+
inputSuffix?: string;
|
|
86
|
+
/** Suffix to add for output types (default: "Output") */
|
|
87
|
+
outputSuffix?: string;
|
|
88
|
+
/** Custom name mappings */
|
|
89
|
+
customMap?: Record<string, string>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Options for output generation.
|
|
93
|
+
*/
|
|
94
|
+
export interface OutputOptions {
|
|
95
|
+
/** Output directory */
|
|
96
|
+
outDir?: string;
|
|
97
|
+
/** Single output file path */
|
|
98
|
+
outFile?: string;
|
|
99
|
+
/** Output file naming pattern (e.g., "[name].types.ts") */
|
|
100
|
+
outPattern?: string;
|
|
101
|
+
/** Generate .d.ts declaration files */
|
|
102
|
+
declaration?: boolean;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generated file information.
|
|
106
|
+
*/
|
|
107
|
+
export interface GeneratedFile {
|
|
108
|
+
/** Output file path */
|
|
109
|
+
path: string;
|
|
110
|
+
/** File content */
|
|
111
|
+
content: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Options for type declaration formatting.
|
|
115
|
+
*/
|
|
116
|
+
export interface DeclarationOptions {
|
|
117
|
+
/** Output only input types */
|
|
118
|
+
inputOnly?: boolean;
|
|
119
|
+
/** Output only output types */
|
|
120
|
+
outputOnly?: boolean;
|
|
121
|
+
/** Merge input/output if they are identical */
|
|
122
|
+
mergeSame?: boolean;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,wCAAwC;IACxC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|