Skip to content

Commit ecccd42

Browse files
committed
fix: schema dependency order
1 parent 9a052c3 commit ecccd42

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

lib/process-document.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { registerTypesFromSchema, schemaToType } from './process-schema.js';
1515
import {
1616
maybeJsDocDescription,
1717
schemaIsOrHasReferenceObject,
18+
schemaIsOrHasReferenceObjectsExclusively,
1819
} from './utils.js';
1920

2021
function wordWrap(text: string) {
@@ -138,17 +139,11 @@ export async function processOpenApiDocument(
138139

139140
for (const [schemaName, schemaObject] of Object.entries(
140141
schema.components?.schemas || {},
141-
).sort(([, a], [, b]) => {
142-
if (!schemaIsOrHasReferenceObject(a) && schemaIsOrHasReferenceObject(b)) {
143-
return -1;
144-
}
145-
146-
if (schemaIsOrHasReferenceObject(a) && !schemaIsOrHasReferenceObject(b)) {
147-
return 1;
148-
}
142+
)
143+
.sort(([, a]) => (schemaIsOrHasReferenceObject(a) ? 1 : 0))
144+
.sort(([, a]) => (schemaIsOrHasReferenceObjectsExclusively(a) ? 1 : 0))) {
145+
console.log({ schemaObject });
149146

150-
return 0;
151-
})) {
152147
registerTypesFromSchema(
153148
typesAndInterfaces,
154149
typesFile,

lib/utils.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,19 @@ export function schemaIsOrHasReferenceObject(
3030
);
3131
}
3232

33+
export function schemaIsOrHasReferenceObjectsExclusively(
34+
a: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject,
35+
): boolean {
36+
return (
37+
isReferenceObject(a) ||
38+
('properties' in a &&
39+
Object.values(a.properties).every(schemaIsOrHasReferenceObject)) ||
40+
('anyOf' in a && a.anyOf.every(schemaIsOrHasReferenceObject)) ||
41+
('allOf' in a && a.allOf.every(schemaIsOrHasReferenceObject)) ||
42+
('oneOf' in a && a.oneOf.every(schemaIsOrHasReferenceObject))
43+
);
44+
}
45+
3346
export function refToName(ref: string): string {
3447
const name = ref.split('/').at(-1);
3548
if (!name) {

0 commit comments

Comments
 (0)