better lists in templates

This commit is contained in:
mProjectsCode 2022-05-13 11:16:22 +02:00
parent 1b31436e58
commit b3ff9d1a38
2 changed files with 60 additions and 9 deletions

View file

@ -17,29 +17,65 @@ export function replaceIllegalFileNameCharactersInString(string: string) {
}
export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string {
const resolvedTemplate = template.replace(new RegExp('{{ .*? }}', 'g'), (match: string) => replaceTag(match, mediaTypeModel));
const resolvedTemplate = template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel));
return resolvedTemplate;
}
function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
let tag = match;
tag = tag.substring(3);
tag = tag.substring(0, tag.length - 3);
tag = tag.substring(2);
tag = tag.substring(0, tag.length - 2);
tag = tag.trim();
let parts = tag.split('.');
let parts = tag.split(':');
if (parts.length === 1) {
let path = parts[0].split('.');
let obj = traverseMetaData(path, mediaTypeModel);
if (obj === undefined) {
return '{{ INVALID TEMPLATE TAG }}';
}
return obj;
} else if (parts.length === 2) {
let operator = parts[0];
let path = parts[1].split('.');
let obj = traverseMetaData(path, mediaTypeModel);
if (obj === undefined) {
return '{{ INVALID TEMPLATE TAG }}';
}
if (operator === 'LIST') {
if (!Array.isArray(obj)) {
return '{{ INVALID TEMPLATE TAG - operator LIST is only applicable on an array }}';
}
return obj.map((e: any) => `- ${e}`).join('\n');
} else if (operator === 'ENUM') {
if (!Array.isArray(obj)) {
return '{{ INVALID TEMPLATE TAG - operator ENUM is only applicable on an array }}';
}
return obj.join(', ');
}
return `{{ INVALID TEMPLATE TAG - unknown operator ${operator} }}`;
}
return '{{ INVALID TEMPLATE TAG }}';
}
function traverseMetaData(path: Array<string>, mediaTypeModel: MediaTypeModel): any {
let o: any = mediaTypeModel;
for (let part of parts) {
for (let part of path) {
if (o !== undefined) {
o = o[part];
}
}
if (o === undefined) {
o = '{{ INVALID TEMPLATE TAG }}';
}
return o;
}