1- import type { OpenAPI , Operation , SchemaDefinition } from "~/core/openapi" ;
21import { getTupleItems , isTuple } from "~/core/tuple" ;
2+ import { getBodyRequest } from "./body-request" ;
33import getContentSchema from "./content" ;
44import resolveEndpoints from "./enpoint" ;
5+ import { getResponse } from "./response" ;
56import { filterGenericSchemas , resolveSchema , simplifySchema } from "./schema-definition" ;
7+ import type { PathsObject } from "@omer-x/openapi-types/paths" ;
8+ import type { ReferenceObject } from "@omer-x/openapi-types/reference" ;
9+ import type { RequestBodyObject } from "@omer-x/openapi-types/request-body" ;
10+ import type { ResponsesObject } from "@omer-x/openapi-types/response" ;
11+ import type { SchemaObject } from "@omer-x/openapi-types/schema" ;
612
7- function resolveRequestSchemas ( requestBody : Operation [ "requestBody" ] ) {
8- if ( ! requestBody ) return [ ] ;
13+ function resolveRequestSchemas ( body ?: RequestBodyObject | ReferenceObject ) {
14+ if ( ! body ) return [ ] ;
15+ const requestBody = getBodyRequest ( body ) ;
916 return [ resolveSchema ( getContentSchema ( requestBody . content ) ) ] ;
1017}
1118
12- function resolveResponseSchemas ( responses : Operation [ "responses" ] ) {
13- return Object . values ( responses ) . map ( response => {
19+ function resolveResponseSchemas ( responses ?: ResponsesObject ) {
20+ if ( ! responses ) return [ ] ;
21+ return Object . values ( responses ) . map ( resp => {
22+ const response = getResponse ( resp ) ;
1423 return Object . values ( response . content ?? { } ) . map ( content => {
1524 return simplifySchema ( resolveSchema ( content . schema ) ) ;
1625 } ) . flat ( ) ;
@@ -26,7 +35,7 @@ function extractTuples(collection: string[]) {
2635 } ) . flat ( ) ;
2736}
2837
29- export function resolveSchemas ( paths : OpenAPI [ "paths" ] ) {
38+ export function resolveSchemas ( paths : PathsObject ) {
3039 const collection = resolveEndpoints ( paths ) . map ( ( { operation } ) => ( [
3140 ...resolveRequestSchemas ( operation . requestBody ) ,
3241 ...resolveResponseSchemas ( operation . responses ) ,
@@ -35,23 +44,23 @@ export function resolveSchemas(paths: OpenAPI["paths"]) {
3544 return filterGenericSchemas ( uniqueCollection ) . toSorted ( ) ;
3645}
3746
38- function resolvePropDefinition ( definition : SchemaDefinition ) {
47+ function resolvePropDefinition ( definition : SchemaObject ) {
48+ if ( definition . $ref ) {
49+ return [ definition . $ref . replace ( "#/components/schemas/" , "" ) ] ;
50+ }
3951 if ( definition . type === "array" && definition . items ) {
4052 if ( Array . isArray ( definition . items ) ) {
4153 return definition . items . map < string [ ] > ( resolvePropDefinition ) . flat ( ) ;
4254 }
4355 return [ resolveSchema ( definition . items ) ] ;
4456 }
45- if ( definition . $ref ) {
46- return [ definition . $ref . replace ( "#/components/schemas/" , "" ) ] ;
47- }
4857 if ( definition . oneOf ) {
4958 return definition . oneOf . map < string [ ] > ( resolvePropDefinition ) . flat ( ) ;
5059 }
5160 return [ ] ;
5261}
5362
54- export function resolveSchemasFromProps ( props : Record < string , SchemaDefinition > ) {
63+ export function resolveSchemasFromProps ( props : Record < string , SchemaObject > ) {
5564 const collection = Object . values ( props ) . map ( resolvePropDefinition ) . flat ( ) ;
5665 const uniqueCollection = Array . from ( new Set ( extractTuples ( collection ) ) ) ;
5766 return filterGenericSchemas ( uniqueCollection ) . toSorted ( ) ;
0 commit comments