@@ -10,7 +10,7 @@ const Arborist = require('@npmcli/arborist');
1010const Config = require ( '@npmcli/config' ) ;
1111const requireg = require ( 'requireg' ) ;
1212const npmPath = requireg . resolve ( 'npm' ) . replace ( 'index.js' , '' ) ;
13-
13+ const Ajv = require ( 'ajv' ) ;
1414const { isAsyncAPIDocument } = require ( '@asyncapi/parser/cjs/document' ) ;
1515
1616const { configureReact, renderReact, saveRenderedReactContent } = require ( './renderer/react' ) ;
@@ -620,7 +620,7 @@ class Generator {
620620 path : packagePath ,
621621 } ;
622622 } catch ( err ) {
623- throw new Error ( ` Installation failed: ${ err . message } ` ) ;
623+ throw new Error ( ' Installation failed' , err ) ;
624624 }
625625 }
626626
@@ -865,37 +865,41 @@ class Generator {
865865 * @return {Promise }
866866 */
867867 async generateFile ( asyncapiDocument , fileName , baseDir ) {
868+
868869 const sourceFile = path . resolve ( baseDir , fileName ) ;
869870 const relativeSourceFile = path . relative ( this . templateContentDir , sourceFile ) ;
871+
870872 const targetFile = path . resolve ( this . targetDir , this . maybeRenameSourceFile ( relativeSourceFile ) ) ;
871873 const relativeTargetFile = path . relative ( this . targetDir , targetFile ) ;
872-
874+
873875 if ( shouldIgnoreFile ( relativeSourceFile ) ) return ;
874-
875876 const shouldOverwriteFile = await this . shouldOverwriteFile ( relativeTargetFile ) ;
876877 if ( ! shouldOverwriteFile ) return ;
877878
878- if ( this . templateConfig . conditionalFiles ?. [ relativeSourceFile ] ) {
879- const server = this . templateParams . server && asyncapiDocument . servers ( ) . get ( this . templateParams . server ) ;
880- const source = jmespath . search ( {
881- ...asyncapiDocument . json ( ) ,
882- ...{
883- server : server ? server . json ( ) : undefined ,
884- } ,
885- } , this . templateConfig . conditionalFiles [ relativeSourceFile ] . subject ) ;
886-
887- if ( ! source ) return log . debug ( logMessage . relativeSourceFileNotGenerated ( relativeSourceFile , this . templateConfig . conditionalFiles [ relativeSourceFile ] . subject ) ) ;
888-
889- if ( source ) {
890- const validate = this . templateConfig . conditionalFiles [ relativeSourceFile ] . validate ;
891- const valid = validate ( source ) ;
892- if ( ! valid ) return log . debug ( logMessage . conditionalFilesMatched ( relativeSourceFile ) ) ;
879+ if ( this . templateConfig . conditionalGeneration ?. [ relativeSourceFile ] ) {
880+ const parameter = this . templateConfig . conditionalGeneration [ relativeSourceFile ] . subject ;
881+ const value = await this . getParameterValue ( asyncapiDocument , parameter )
882+
883+ if ( value !== undefined ) {
884+
885+ const schema = this . templateConfig . conditionalGeneration [ relativeSourceFile ] . validation ;
886+ const ajv = new Ajv ( ) ;
887+ const validate = ajv . compile ( schema ) ;
888+ const isValid = validate ( value ) ;
889+
890+ if ( ! isValid ) return log . debug ( logMessage . conditionalFilesMatched ( relativeSourceFile ) ) ;
893891 }
892+
893+ if ( this . isNonRenderableFile ( relativeSourceFile ) ) {
894+ return await copyFile ( sourceFile , targetFile ) ;
894895 }
896+
897+ await this . renderAndWriteToFile ( asyncapiDocument , sourceFile , targetFile ) ;
895898
896899 if ( this . isNonRenderableFile ( relativeSourceFile ) ) return await copyFile ( sourceFile , targetFile ) ;
897900 await this . renderAndWriteToFile ( asyncapiDocument , sourceFile , targetFile ) ;
898901 }
902+ }
899903
900904 /**
901905 * It may rename the source file name in cases where special names are not supported, like .gitignore or .npmignore.
@@ -1084,4 +1088,6 @@ class Generator {
10841088Generator . DEFAULT_TEMPLATES_DIR = DEFAULT_TEMPLATES_DIR ;
10851089Generator . TRANSPILED_TEMPLATE_LOCATION = TRANSPILED_TEMPLATE_LOCATION ;
10861090
1087- module . exports = Generator ;
1091+ module . exports = Generator ;
1092+
1093+
0 commit comments