1
+ import { tableFromObject } from '@/formatters/table-from-object'
2
+ import { FlattenedSchemaPropertyItem } from '@/types/flattened-schema-property-item'
3
+ import { getflattenedSchema } from '@/utils/get-flattened-schema'
1
4
import { SchemaObject } from '@/utils/json-to-markdown'
2
- import { jsonToMarkdownTable } from '@/utils/json-to- markdown-table '
5
+ import { Markdown } from '@/utils/markdown/markdown '
3
6
import { OpenAPIV3 } from 'openapi-types'
4
7
5
- type ResponseFormatter = ( responses : OpenAPIV3 . ResponsesObject ) => string
8
+ type ResponseFormatter = (
9
+ responses : OpenAPIV3 . ResponsesObject ,
10
+ baseResponse ?: OpenAPIV3 . ResponsesObject
11
+ ) => string
6
12
7
- export const responseFormatter : ResponseFormatter = responses => {
13
+ export const responseFormatter : ResponseFormatter = (
14
+ responses ,
15
+ baseResponse
16
+ ) => {
17
+ let flattenedResponse : FlattenedSchemaPropertyItem [ ] = [ ]
18
+ let flattenedBaseResponse : FlattenedSchemaPropertyItem [ ] = [ ]
19
+
20
+ if ( baseResponse ) {
21
+ const successBaseReponse = ( baseResponse [ '200' ] ??
22
+ baseResponse [ '201' ] ) as OpenAPIV3 . ResponseObject // all refs have been resolved in main.ts
23
+
24
+ const successBaseResponseContent =
25
+ successBaseReponse ?. content ?. [ 'application/json' ] ??
26
+ successBaseReponse ?. content ?. [ 'text/plain' ]
27
+
28
+ const successBaseResponseContentSchema =
29
+ successBaseResponseContent ?. schema as SchemaObject
30
+
31
+ flattenedBaseResponse = getflattenedSchema ( successBaseResponseContentSchema )
32
+ }
8
33
const successResponse = ( responses [ '200' ] ??
9
34
responses [ '201' ] ) as OpenAPIV3 . ResponseObject // all refs have been resolved in main.ts
10
35
@@ -15,9 +40,47 @@ export const responseFormatter: ResponseFormatter = responses => {
15
40
const successResponseContentSchema =
16
41
successResponseContent ?. schema as SchemaObject
17
42
18
- const responseMarkdown = successResponseContent ?. schema
19
- ? jsonToMarkdownTable ( { schema : successResponseContentSchema } )
20
- : ''
43
+ flattenedResponse = getflattenedSchema ( successResponseContentSchema )
44
+
45
+ // const responseMarkdown = successResponseContent?.schema
46
+ // ? jsonToMarkdownTable({ schema: successResponseContentSchema })
47
+ // : ''
48
+
49
+ const mdc = new Markdown ( )
50
+
51
+ const headers = [ 'Property' , 'Type' , 'Required' , 'Description' , 'Example' ]
52
+
53
+ // const rows = Object.entries(obj.schema.properties ?? {}).map(
54
+ // ([propertyName, propertyMetadata]) => [
55
+ // propertyName,
56
+ // propertyMetadata.type,
57
+ // obj.schema.required?.includes(propertyName) ? 'Yes' : 'No',
58
+ // propertyMetadata.description ?? '',
59
+ // propertyMetadata.example ?? ''
60
+ // ]
61
+ // )
62
+ const baseFlattenedSchemaPropertyList = flattenedBaseResponse ?. map (
63
+ row => row . property
64
+ )
65
+ const rowsFromNewBody = flattenedResponse . map ( row => {
66
+ const hasBeenAdded = ! baseFlattenedSchemaPropertyList . includes ( row . property )
67
+
68
+ return {
69
+ property : `${ hasBeenAdded ? '✅' : '' } ${ row . property } ` ,
70
+ type : row . type ,
71
+ required : row . required ,
72
+ description : row . description ,
73
+ example : row . example
74
+ }
75
+ } )
76
+ const rows = [ ...rowsFromNewBody ]
77
+ const dataIndex = headers . map ( header => header . toLowerCase ( ) )
78
+
79
+ const tableMarkdown = tableFromObject ( { headers, rows, dataIndex } )
80
+
81
+ mdc . appendToNewLine ( tableMarkdown )
82
+
83
+ const responseMarkdown = successResponseContent ?. schema ? mdc . toString ( ) : ''
21
84
22
85
return responseMarkdown
23
86
}
0 commit comments