Skip to content

Commit f41bb72

Browse files
Change generateFile logic to handle file generation and folder seperatly
1 parent ec1d43d commit f41bb72

1 file changed

Lines changed: 26 additions & 20 deletions

File tree

apps/generator/lib/generator.js

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const Arborist = require('@npmcli/arborist');
1010
const Config = require('@npmcli/config');
1111
const requireg = require('requireg');
1212
const npmPath = requireg.resolve('npm').replace('index.js','');
13-
13+
const Ajv = require('ajv');
1414
const { isAsyncAPIDocument } = require('@asyncapi/parser/cjs/document');
1515

1616
const { 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 {
10841088
Generator.DEFAULT_TEMPLATES_DIR = DEFAULT_TEMPLATES_DIR;
10851089
Generator.TRANSPILED_TEMPLATE_LOCATION = TRANSPILED_TEMPLATE_LOCATION;
10861090

1087-
module.exports = Generator;
1091+
module.exports = Generator;
1092+
1093+

0 commit comments

Comments
 (0)