better lists in templates
This commit is contained in:
parent
1b31436e58
commit
b3ff9d1a38
2 changed files with 60 additions and 9 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue