Skip to content

Commit ef9ed2c

Browse files
feat: change conditionalFile to conditionalGeneration and change its parameter
1 parent aeacff4 commit ef9ed2c

5 files changed

Lines changed: 41 additions & 43 deletions

File tree

apps/generator/lib/generator.js

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -876,30 +876,22 @@ class Generator {
876876
if (!shouldOverwriteFile) return;
877877

878878
if (this.templateConfig.conditionalFiles?.[relativeSourceFile]) {
879-
const parameter = this.templateConfig.conditionalFiles[relativeSourceFile].subject;
880-
const value = await this.getParameterValue(asyncapiDocument, parameter)
881-
if (value !== undefined) {
882-
const validation = this.templateConfig.conditionalFiles[relativeSourceFile].validation;
883-
// Handle "const"
884-
if (validation?.const !== undefined) {
885-
const isValid = value === validation.const;
886-
console.log(isValid)
887-
if (!isValid) {
888-
return log.debug(logMessage.conditionalFilesMatched(relativeSourceFile));
889-
}
890-
}
891-
892-
// Handle "not"
893-
if (validation?.not !== undefined) {
894-
const isNotValid = value === validation.not;
895-
if (isNotValid) {
896-
return log.debug(logMessage.conditionalFilesMatched(relativeSourceFile));
897-
}
898-
}
899-
900-
// You can keep adding more types like "enum", "pattern", etc.
901-
}
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));
902893
}
894+
}
903895

904896
if (this.isNonRenderableFile(relativeSourceFile)) return await copyFile(sourceFile, targetFile);
905897
await this.renderAndWriteToFile(asyncapiDocument, sourceFile, targetFile);
@@ -1092,4 +1084,4 @@ class Generator {
10921084
Generator.DEFAULT_TEMPLATES_DIR = DEFAULT_TEMPLATES_DIR;
10931085
Generator.TRANSPILED_TEMPLATE_LOCATION = TRANSPILED_TEMPLATE_LOCATION;
10941086

1095-
module.exports = Generator;
1087+
module.exports = Generator;

apps/generator/lib/templateConfigValidator.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ const supportedParserAPIMajorVersions = [
2424
* @return {Boolean}
2525
*/
2626
module.exports.validateTemplateConfig = (templateConfig, templateParams, asyncapiDocument) => {
27-
const { parameters, supportedProtocols, conditionalFiles, generator, apiVersion } = templateConfig;
27+
const { parameters, supportedProtocols, conditionalGeneration, generator, apiVersion } = templateConfig;
2828

29-
validateConditionalFiles(conditionalFiles);
29+
validateconditionalGeneration(conditionalGeneration);
3030
isTemplateCompatible(generator, apiVersion);
3131
isRequiredParamProvided(parameters, templateParams);
3232
isProvidedTemplateRendererSupported(templateConfig);
@@ -151,17 +151,17 @@ function isServerProvidedInDocument(server, paramsServerName) {
151151
/**
152152
* Checks if conditional files are specified properly in the template
153153
* @private
154-
* @param {Object} conditionalFiles conditions specified in the template config
154+
* @param {Object} conditionalGeneration conditions specified in the template config
155155
*/
156-
function validateConditionalFiles(conditionalFiles) {
157-
if (typeof conditionalFiles === 'object') {
158-
const fileNames = Object.keys(conditionalFiles);
156+
function validateconditionalGeneration(conditionalGeneration) {
157+
if (typeof conditionalGeneration === 'object') {
158+
const fileNames = Object.keys(conditionalGeneration);
159159

160160
fileNames.forEach(fileName => {
161-
const def = conditionalFiles[fileName];
162-
if (typeof def.subject !== 'string') throw new Error(`Invalid conditional file subject for ${fileName}: ${def.subject}.`);
161+
const def = conditionalGeneration[fileName];
162+
if (typeof def.parameter !== 'string') throw new Error(`Invalid conditional file parameter for ${fileName}: ${def.parameter}.`);
163163
if (typeof def.validation !== 'object') throw new Error(`Invalid conditional file validation object for ${fileName}: ${def.validation}.`);
164-
conditionalFiles[fileName].validate = ajv.compile(conditionalFiles[fileName].validation);
164+
conditionalGeneration[fileName].validate = ajv.compile(conditionalGeneration[fileName].validation);
165165
});
166166
}
167167
}

apps/generator/test/templateConfigValidator.test.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,28 +113,28 @@ describe('Template Configuration Validator', () => {
113113

114114
expect(() => validateTemplateConfig(templateConfig, templateParams, asyncapiDocument)).toThrow('This template doesn\'t have any params.');
115115
});
116-
it('Validation throw error if subject in condition files is not string', () => {
116+
it('Validation throw error if parameter in condition files is not string', () => {
117117
const templateParams = {};
118118
const templateConfig = {
119-
conditionalFiles: {
119+
conditionalGeneration: {
120120
'my/path/to/file.js': {
121-
subject: ['server.protocol'],
121+
parameter: ['server.protocol'],
122122
validation: {
123123
const: 'myprotocol'
124124
}
125125
}
126126
}
127127
};
128128

129-
expect(() => validateTemplateConfig(templateConfig, templateParams)).toThrow('Invalid conditional file subject for my/path/to/file.js: server.protocol.');
129+
expect(() => validateTemplateConfig(templateConfig, templateParams)).toThrow('Invalid conditional file parameter for my/path/to/file.js: server.protocol.');
130130
});
131131

132132
it('Validation throw error if validation in condition files is not object', () => {
133133
const templateParams = {};
134134
const templateConfig = {
135-
conditionalFiles: {
135+
conditionalGeneration: {
136136
'my/path/to/file.js': {
137-
subject: 'server.url',
137+
parameter: 'server.url',
138138
validation: 'http://example.com'
139139
}
140140
}
@@ -146,9 +146,9 @@ describe('Template Configuration Validator', () => {
146146
it('Validation enrich conditional files object with validate object', () => {
147147
const templateParams = {};
148148
const templateConfig = {
149-
conditionalFiles: {
149+
conditionalGeneration: {
150150
'my/path/to/file.js': {
151-
subject: 'server.protocol',
151+
parameter: 'server.protocol',
152152
validation: {
153153
const: 'myprotocol'
154154
}
@@ -157,7 +157,7 @@ describe('Template Configuration Validator', () => {
157157
};
158158
validateTemplateConfig(templateConfig, templateParams);
159159

160-
expect(templateConfig.conditionalFiles['my/path/to/file.js']).toBeDefined();
160+
expect(templateConfig.conditionalGeneration['my/path/to/file.js']).toBeDefined();
161161
});
162162

163163
it('Validation throw error if specified server is not in asyncapi document', () => {

package-lock.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,8 @@
4343
"workspaces": [
4444
"apps/*",
4545
"packages/**"
46-
]
46+
],
47+
"dependencies": {
48+
"ajv": "^8.17.1"
49+
}
4750
}

0 commit comments

Comments
 (0)