Merge pull request #129 from kelszo/index-array-operator

Add index operator for arrays when templating
This commit is contained in:
Moritz Jung 2024-01-25 00:33:27 +01:00 committed by GitHub
commit 73a8a62332
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 6 deletions

View file

@ -65,7 +65,8 @@ export class MediaTypeManager {
} }
getFileName(mediaTypeModel: MediaTypeModel): string { getFileName(mediaTypeModel: MediaTypeModel): string {
return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel); // Ignore undefined tags since some search APIs do not return all properties in the model and produce clean file names even if errors occur
return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel, true);
} }
async getTemplate(mediaTypeModel: MediaTypeModel, app: App): Promise<string> { async getTemplate(mediaTypeModel: MediaTypeModel, app: App): Promise<string> {

View file

@ -22,11 +22,11 @@ export function replaceIllegalFileNameCharactersInString(string: string): string
return string.replace(/[\\,#%&{}/*<>$"@.?]*/g, '').replace(/:+/g, ' -'); return string.replace(/[\\,#%&{}/*<>$"@.?]*/g, '').replace(/:+/g, ' -');
} }
export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string { export function replaceTags(template: string, mediaTypeModel: MediaTypeModel, ignoreUndefined: boolean = false): string {
return template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel)); return template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel, ignoreUndefined));
} }
function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { function replaceTag(match: string, mediaTypeModel: MediaTypeModel, ignoreUndefined: boolean): string {
let tag = match; let tag = match;
tag = tag.substring(2); tag = tag.substring(2);
tag = tag.substring(0, tag.length - 2); tag = tag.substring(0, tag.length - 2);
@ -39,7 +39,7 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
const obj = traverseMetaData(path, mediaTypeModel); const obj = traverseMetaData(path, mediaTypeModel);
if (obj === undefined) { if (obj === undefined) {
return '{{ INVALID TEMPLATE TAG - object undefined }}'; return ignoreUndefined ? '' : '{{ INVALID TEMPLATE TAG - object undefined }}';
} }
return obj; return obj;
@ -51,7 +51,7 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
const obj = traverseMetaData(path, mediaTypeModel); const obj = traverseMetaData(path, mediaTypeModel);
if (obj === undefined) { if (obj === undefined) {
return '{{ INVALID TEMPLATE TAG - object undefined }}'; return ignoreUndefined ? '' : '{{ INVALID TEMPLATE TAG - object undefined }}';
} }
if (operator === 'LIST') { if (operator === 'LIST') {
@ -64,6 +64,16 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
return '{{ INVALID TEMPLATE TAG - operator ENUM is only applicable on an array }}'; return '{{ INVALID TEMPLATE TAG - operator ENUM is only applicable on an array }}';
} }
return obj.join(', '); return obj.join(', ');
} else if (operator === 'FIRST') {
if (!Array.isArray(obj)) {
return '{{ INVALID TEMPLATE TAG - operator FIRST is only applicable on an array }}';
}
return obj[0];
} else if (operator === 'LAST') {
if (!Array.isArray(obj)) {
return '{{ INVALID TEMPLATE TAG - operator LAST is only applicable on an array }}';
}
return obj[obj.length - 1];
} }
return `{{ INVALID TEMPLATE TAG - unknown operator ${operator} }}`; return `{{ INVALID TEMPLATE TAG - unknown operator ${operator} }}`;