1515 */
1616
1717import {
18- _TemplateResolver ,
1918 BuilderStrategy ,
2019 BuildResult ,
2120 BuildTypeContexts ,
22- DocumentExporter ,
2321 ExportDocument ,
2422 ExportRestOperationsGroupBuildConfig ,
25- HTML_EXPORT_GROUP_FORMAT ,
26- JSON_EXPORT_GROUP_FORMAT ,
27- OperationsGroupExportFormat ,
2823 TRANSFORMATION_KIND_MERGED ,
2924 TRANSFORMATION_KIND_REDUCED ,
3025} from '../types'
3126import { DocumentGroupStrategy } from './document-group.strategy'
3227import { MergedDocumentGroupStrategy } from './merged-document-group.strategy'
3328import { EXPORT_FORMAT_TO_FILE_FORMAT , getSplittedVersionKey } from '../utils'
34- import { OpenApiExtensionKey } from '@netcracker/qubership-apihub-api-unifier'
35- import { BUILD_TYPE } from '../consts'
29+ import { BUILD_TYPE , FILE_FORMAT_HTML , FILE_FORMAT_JSON } from '../consts'
3630import { createCommonStaticExportDocuments , createUnknownExportDocument , generateIndexHtmlPage } from '../utils/export'
3731import { createRestExportDocument } from '../apitypes/rest/rest.document'
32+ import { isRestDocument } from '../apitypes'
3833
3934export class ExportRestOperationsGroupStrategy implements BuilderStrategy {
4035 async execute ( config : ExportRestOperationsGroupBuildConfig , buildResult : BuildResult , contexts : BuildTypeContexts ) : Promise < BuildResult > {
41-
4236 switch ( config . operationsSpecTransformation ) {
4337 case TRANSFORMATION_KIND_MERGED :
4438 await exportMergedDocument ( config , buildResult , contexts )
45- return buildResult
39+ break
4640 case TRANSFORMATION_KIND_REDUCED :
4741 await exportReducedDocuments ( config , buildResult , contexts )
48- return buildResult
42+ break
43+ }
44+
45+ const { packageId, version : versionWithRevision , format = FILE_FORMAT_JSON , groupName } = config
46+ const [ version ] = getSplittedVersionKey ( versionWithRevision )
47+ if ( buildResult . exportDocuments . length > 1 ) {
48+ buildResult . exportFileName = `${ packageId } _${ version } _${ groupName } .zip`
49+ return buildResult
4950 }
51+
52+ buildResult . exportFileName = `${ packageId } _${ version } _${ groupName } .${ format } `
53+ return buildResult
5054 }
5155}
5256
53- async function exportMergedDocument ( config : ExportRestOperationsGroupBuildConfig , buildResult : BuildResult , contexts : BuildTypeContexts ) : Promise < BuildResult > {
57+ async function exportMergedDocument ( config : ExportRestOperationsGroupBuildConfig , buildResult : BuildResult , contexts : BuildTypeContexts ) : Promise < void > {
5458 const {
5559 packageId,
5660 version : versionWithRevision ,
57- groupName,
58- format = JSON_EXPORT_GROUP_FORMAT ,
61+ format = FILE_FORMAT_JSON ,
5962 allowedOasExtensions,
6063 } = config
6164 const [ version ] = getSplittedVersionKey ( versionWithRevision )
@@ -74,23 +77,16 @@ async function exportMergedDocument(config: ExportRestOperationsGroupBuildConfig
7477
7578 buildResult . exportDocuments . push ( await createRestExportDocument ( buildResult . merged . filename , JSON . stringify ( buildResult . merged ?. data ) , format , packageName , version , templateResolver , allowedOasExtensions ) )
7679
77- if ( format === HTML_EXPORT_GROUP_FORMAT ) {
78- buildResult . exportDocuments . push ( ...await createCommonStaticExportDocuments ( packageName , version , templateResolver ) )
79- buildResult . exportFileName = `${ packageId } _${ version } _${ groupName } .zip`
80- return buildResult
80+ if ( format === FILE_FORMAT_HTML ) {
81+ buildResult . exportDocuments . push ( ...await createCommonStaticExportDocuments ( packageName , version , templateResolver , buildResult . exportDocuments [ 0 ] . filename ) )
8182 }
82-
83- buildResult . exportFileName = `${ packageId } _${ version } _${ groupName } .${ format } `
84-
85- return buildResult
8683}
8784
88- async function exportReducedDocuments ( config : ExportRestOperationsGroupBuildConfig , buildResult : BuildResult , contexts : BuildTypeContexts ) : Promise < BuildResult > {
85+ async function exportReducedDocuments ( config : ExportRestOperationsGroupBuildConfig , buildResult : BuildResult , contexts : BuildTypeContexts ) : Promise < void > {
8986 const {
9087 packageId,
9188 version : versionWithRevision ,
92- groupName,
93- format = JSON_EXPORT_GROUP_FORMAT ,
89+ format = FILE_FORMAT_JSON ,
9490 allowedOasExtensions,
9591 } = config
9692 const [ version ] = getSplittedVersionKey ( versionWithRevision )
@@ -104,39 +100,19 @@ async function exportReducedDocuments(config: ExportRestOperationsGroupBuildConf
104100 } , buildResult , contexts )
105101
106102 const generatedHtmlExportDocuments : ExportDocument [ ] = [ ]
103+ const restDocuments = [ ...buildResult . documents . values ( ) ] . filter ( isRestDocument )
107104 const transformedDocuments = await Promise . all ( [ ...buildResult . documents . values ( ) ] . map ( async document => {
108- return await createTransformedDocument ( document . filename , JSON . stringify ( document . data ) , format , packageName , version , templateResolver , createRestExportDocument , allowedOasExtensions , generatedHtmlExportDocuments )
105+ return createRestExportDocument ?. ( document . filename , JSON . stringify ( document . data ) , format , packageName , version , templateResolver , allowedOasExtensions , generatedHtmlExportDocuments , restDocuments . length > 1 )
109106 } ) )
110107
111108 buildResult . exportDocuments . push ( ...transformedDocuments )
112109
113- if ( format === HTML_EXPORT_GROUP_FORMAT ) {
114- buildResult . exportDocuments . push ( ...await createCommonStaticExportDocuments ( packageName , version , templateResolver ) )
110+ if ( format === FILE_FORMAT_HTML ) {
111+ const shouldAddIndexPage = generatedHtmlExportDocuments . length > 1
112+ buildResult . exportDocuments . push ( ...await createCommonStaticExportDocuments ( packageName , version , templateResolver , shouldAddIndexPage ? 'index.html' : buildResult . exportDocuments [ 0 ] . filename ) )
115113
116- if ( generatedHtmlExportDocuments . length > 1 ) {
114+ if ( shouldAddIndexPage ) {
117115 buildResult . exportDocuments . push ( createUnknownExportDocument ( 'index.html' , await generateIndexHtmlPage ( packageName , version , generatedHtmlExportDocuments , templateResolver ) ) )
118116 }
119117 }
120-
121- if ( buildResult . exportDocuments . length > 1 ) {
122- buildResult . exportFileName = `${ packageId } _${ version } _${ groupName } .zip`
123- return buildResult
124- }
125-
126- buildResult . exportFileName = `${ packageId } _${ version } _${ groupName } .${ format } `
127- return buildResult
128- }
129-
130- async function createTransformedDocument (
131- filename : string ,
132- data : string ,
133- format : OperationsGroupExportFormat ,
134- packageName : string ,
135- version : string ,
136- templateResolver : _TemplateResolver ,
137- createExportDocument : DocumentExporter ,
138- allowedOasExtensions ?: OpenApiExtensionKey [ ] ,
139- generatedHtmlExportDocuments ?: ExportDocument [ ] ,
140- ) : Promise < ExportDocument > {
141- return createExportDocument ?.( filename , data , format , packageName , version , templateResolver , allowedOasExtensions , generatedHtmlExportDocuments )
142118}
0 commit comments