diff options
Diffstat (limited to 'src/data/yaml.js')
| -rw-r--r-- | src/data/yaml.js | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/data/yaml.js b/src/data/yaml.js index 46cb4eda..13dfd24d 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -982,6 +982,30 @@ export function parseLyrics(value, {subdoc, LyricsEntry}) { return parseContentEntries(LyricsEntry, value, {subdoc}); } +export function parseArtistAliases(value, {subdoc, Artist}) { + return parseArrayEntries(value, item => { + const config = { + bindInto: 'aliasedArtist', + provide: {isAlias: true}, + }; + + if (typeof item === 'string') { + return subdoc(Artist, {'Artist': item}, config); + } else if (typeof item === 'object' && !Array.isArray(item)) { + if (item['Name']) { + const clone = {...item}; + clone['Artist'] = item['Name']; + delete clone['Name']; + return subdoc(Artist, clone, config); + } else { + return subdoc(Artist, item, config); + } + } else { + return item; + } + }); +} + // documentModes: Symbols indicating sets of behavior for loading and processing // data files. export const documentModes = { |