Skip to content

Commit 9d62a60

Browse files
committed
Merge func
1 parent b18f18d commit 9d62a60

File tree

1 file changed

+16
-37
lines changed

1 file changed

+16
-37
lines changed

packages/generator/src/generate-schema.ts

Lines changed: 16 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,12 @@
11
import type { OpenAPIV3_1 } from 'openapi-types'
22
import type { ParameterDefinition } from './generate-interface'
33

4-
/**
5-
* Resolve $ref reference in OpenAPI parameter
6-
*/
7-
export function resolveParameterRef(
8-
ref: string,
9-
document: OpenAPIV3_1.Document,
10-
): OpenAPIV3_1.ParameterObject | null {
11-
if (!ref.startsWith('#/')) {
12-
return null
13-
}
14-
15-
const parts = ref.slice(2).split('/')
16-
let current: unknown = document
17-
18-
for (const part of parts) {
19-
if (current && typeof current === 'object' && part in current) {
20-
current = (current as Record<string, unknown>)[part]
21-
} else {
22-
return null
23-
}
24-
}
25-
26-
if (current && typeof current === 'object' && !('$ref' in current)) {
27-
return current as OpenAPIV3_1.ParameterObject
28-
}
29-
30-
return null
31-
}
32-
334
/**
345
* Resolve $ref reference in OpenAPI schema
356
*/
36-
export function resolveSchemaRef(
37-
ref: string,
38-
document: OpenAPIV3_1.Document,
39-
): OpenAPIV3_1.SchemaObject | null {
7+
export function resolveSchemaRef<
8+
T extends OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ParameterObject,
9+
>(ref: string, document: OpenAPIV3_1.Document): T | null {
4010
if (!ref.startsWith('#/')) {
4111
return null
4212
}
@@ -53,7 +23,7 @@ export function resolveSchemaRef(
5323
}
5424

5525
if (current && typeof current === 'object' && !('$ref' in current)) {
56-
return current as OpenAPIV3_1.SchemaObject
26+
return current as T
5727
}
5828

5929
return null
@@ -72,7 +42,10 @@ export function getTypeFromSchema(
7242
const defaultNonNullable = options?.defaultNonNullable ?? false
7343
// Handle $ref
7444
if ('$ref' in schema) {
75-
const resolved = resolveSchemaRef(schema.$ref, document)
45+
const resolved = resolveSchemaRef<OpenAPIV3_1.SchemaObject>(
46+
schema.$ref,
47+
document,
48+
)
7649
if (resolved) {
7750
return getTypeFromSchema(resolved, document, options)
7851
}
@@ -157,7 +130,10 @@ export function getTypeFromSchema(
157130
// Need to resolve $ref if present to check for default
158131
let hasDefault = false
159132
if ('$ref' in value) {
160-
const resolved = resolveSchemaRef(value.$ref, document)
133+
const resolved = resolveSchemaRef<OpenAPIV3_1.SchemaObject>(
134+
value.$ref,
135+
document,
136+
)
161137
if (resolved) {
162138
hasDefault = resolved.default !== undefined
163139
}
@@ -384,7 +360,10 @@ export function extractParameters(
384360
for (const param of allParams) {
385361
if ('$ref' in param) {
386362
// Resolve $ref parameter
387-
const resolved = resolveParameterRef(param.$ref, document)
363+
const resolved = resolveSchemaRef<OpenAPIV3_1.ParameterObject>(
364+
param.$ref,
365+
document,
366+
)
388367
if (
389368
resolved &&
390369
'in' in resolved &&

0 commit comments

Comments
 (0)