* Generate all pending standalone types discovered via $ref resolution. * Iterates until no new types are discovered (handles transitive $ref chains).
(
packageName: string,
packageDir: string,
headerComment: string
)
| 1091 | * Iterates until no new types are discovered (handles transitive $ref chains). |
| 1092 | */ |
| 1093 | async function generatePendingStandaloneTypes( |
| 1094 | packageName: string, |
| 1095 | packageDir: string, |
| 1096 | headerComment: string |
| 1097 | ): Promise<void> { |
| 1098 | const generated = new Set<string>(); |
| 1099 | |
| 1100 | while (true) { |
| 1101 | const batch: [string, JSONSchema7][] = []; |
| 1102 | for (const [name, schema] of pendingStandaloneTypes) { |
| 1103 | if (!generated.has(name)) { |
| 1104 | batch.push([name, schema]); |
| 1105 | generated.add(name); |
| 1106 | } |
| 1107 | } |
| 1108 | pendingStandaloneTypes.clear(); |
| 1109 | |
| 1110 | if (batch.length === 0) break; |
| 1111 | |
| 1112 | for (const [name, schema] of batch) { |
| 1113 | if (schema.type === "string" && schema.enum) { |
| 1114 | await generateStandaloneEnum(name, schema, packageName, packageDir, headerComment); |
| 1115 | } else if (schema.type === "object" && schema.properties) { |
| 1116 | await generateStandaloneRecord(name, schema, packageName, packageDir, headerComment); |
| 1117 | } else if (schema.anyOf && Array.isArray(schema.anyOf)) { |
| 1118 | const variants = resolveAnyOfVariants(schema.anyOf as JSONSchema7[]); |
| 1119 | if (variants.length > 1 && findDiscriminator(variants)) { |
| 1120 | await generatePolymorphicResultClass(name, schema, packageName, packageDir); |
| 1121 | } else { |
| 1122 | console.warn(`[codegen] Cannot generate standalone type for ${name}: anyOf without discriminator`); |
| 1123 | } |
| 1124 | } else { |
| 1125 | console.warn(`[codegen] Cannot generate standalone type for ${name}: type=${schema.type}`); |
| 1126 | } |
| 1127 | } |
| 1128 | // Generating records may have discovered more $ref targets — loop again |
| 1129 | } |
| 1130 | } |
| 1131 | |
| 1132 | async function generateStandaloneEnum( |
| 1133 | name: string, |
no test coverage detected
searching dependent graphs…