11import type { OpenAPIV3_1 } from 'openapi-types'
22import 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