@@ -20,10 +20,24 @@ import { convertObj } from 'swagger2openapi'
2020import { REST_DOCUMENT_TYPE , REST_KIND_KEY } from './rest.consts'
2121import type { RestDocumentInfo } from './rest.types'
2222
23- import { DocumentBuilder , DocumentDumper , YAML_EXPORT_GROUP_FORMAT } from '../../types'
24- import { FILE_FORMAT } from '../../consts'
25- import { createBundlingErrorHandler , getBundledFileDataWithDependencies , getDocumentTitle } from '../../utils'
26- import YAML from 'js-yaml'
23+ import {
24+ _TemplateResolver ,
25+ DocumentBuilder ,
26+ DocumentDumper ,
27+ ExportDocument ,
28+ ExportFormat ,
29+ } from '../../types'
30+ import { FILE_FORMAT , FILE_FORMAT_HTML , FILE_FORMAT_JSON } from '../../consts'
31+ import {
32+ createBundlingErrorHandler ,
33+ EXPORT_FORMAT_TO_FILE_FORMAT ,
34+ getBundledFileDataWithDependencies ,
35+ getDocumentTitle ,
36+ } from '../../utils'
37+ import { dump } from './rest.utils'
38+ import { generateHtmlPage } from '../../utils/export'
39+ import { removeOasExtensions } from '../../utils/removeOasExtensions'
40+ import { OpenApiExtensionKey } from '@netcracker/qubership-apihub-api-unifier'
2741
2842const openApiDocumentMeta = ( data : OpenAPIV3 . Document ) : RestDocumentInfo => {
2943 if ( typeof data !== 'object' || ! data ) {
@@ -99,8 +113,41 @@ export const buildRestDocument: DocumentBuilder<OpenAPIV3.Document> = async (par
99113}
100114
101115export const dumpRestDocument : DocumentDumper < OpenAPIV3 . Document > = ( document , format ) => {
102- if ( format === YAML_EXPORT_GROUP_FORMAT ) {
103- return new Blob ( [ YAML . dump ( document . data ) ] , { type : 'application/yaml' } )
116+ return new Blob ( ...dump ( document . data , format ?? FILE_FORMAT_JSON ) )
117+ }
118+
119+ export async function createRestExportDocument (
120+ filename : string ,
121+ data : string ,
122+ format : ExportFormat ,
123+ packageName : string ,
124+ version : string ,
125+ templateResolver : _TemplateResolver ,
126+ allowedOasExtensions ?: OpenApiExtensionKey [ ] ,
127+ generatedHtmlExportDocuments ?: ExportDocument [ ] ,
128+ addBackLink ?: boolean ,
129+ ) : Promise < ExportDocument > {
130+ const exportFilename = `${ getDocumentTitle ( filename ) } .${ format } `
131+ const [ [ document ] , blobProperties ] = dump ( removeOasExtensions ( JSON . parse ( data ) , allowedOasExtensions ) , EXPORT_FORMAT_TO_FILE_FORMAT . get ( format ) ! )
132+
133+ if ( format === FILE_FORMAT_HTML ) {
134+ const htmlExportDocument = {
135+ data : await generateHtmlPage (
136+ document ,
137+ getDocumentTitle ( filename ) ,
138+ packageName ,
139+ version ,
140+ templateResolver ,
141+ addBackLink ,
142+ ) ,
143+ filename : exportFilename ,
144+ }
145+ generatedHtmlExportDocuments ?. push ( htmlExportDocument )
146+ return htmlExportDocument
147+ }
148+
149+ return {
150+ data : new Blob ( [ document ] , blobProperties ) ,
151+ filename : exportFilename ,
104152 }
105- return new Blob ( [ JSON . stringify ( document . data , undefined , 2 ) ] , { type : 'application/json' } )
106153}
0 commit comments