« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/data/things/Track.js4
-rw-r--r--src/data/things/album/Album.js7
-rw-r--r--src/data/things/album/TrackSection.js8
-rw-r--r--src/data/yaml.js12
-rw-r--r--src/validators.js2
5 files changed, 29 insertions, 4 deletions
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index f8eac729..785d0080 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -31,12 +31,13 @@ import {
   parseCommentary,
   parseContributors,
   parseCreditingSources,
-  parseReferencingSources,
+  parseExcludingURLs,
   parseDate,
   parseDimensions,
   parseDuration,
   parseLyrics,
   parseMusicVideos,
+  parseReferencingSources,
   parseURLs,
 } from '#yaml';
 
@@ -1048,6 +1049,7 @@ export class Track extends Thing {
 
       'Excluding URLs': {
         property: 'excludingURLs',
+        transform: parseExcludingURLs,
       },
 
       'URLs': {
diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js
index e212548d..f07d552c 100644
--- a/src/data/things/album/Album.js
+++ b/src/data/things/album/Album.js
@@ -22,6 +22,7 @@ import {
   parseCreditingSources,
   parseDate,
   parseDimensions,
+  parseExcludingURLs,
   parseMusicVideos,
   parseWallpaperParts,
   parseURLs,
@@ -651,7 +652,11 @@ export class Album extends Thing {
       // General configuration
 
       'Count Tracks In Artist Totals': {property: 'countTracksInArtistTotals'},
-      'Excluding Track URLs': {property: 'excludingTrackURLs'},
+
+      'Excluding Track URLs': {
+        property: 'excludingTrackURLs',
+        transform: parseExcludingURLs,
+      },
 
       'Listed on Homepage': {property: 'isListedOnHomepage'},
       'Listed in Galleries': {property: 'isListedInGalleries'},
diff --git a/src/data/things/album/TrackSection.js b/src/data/things/album/TrackSection.js
index 15688735..1e901a09 100644
--- a/src/data/things/album/TrackSection.js
+++ b/src/data/things/album/TrackSection.js
@@ -3,7 +3,7 @@ import {inspect} from 'node:util';
 import {colors} from '#cli';
 import {input, V} from '#composite';
 import Thing from '#thing';
-import {parseDate} from '#yaml';
+import {parseDate, parseExcludingURLs} from '#yaml';
 
 import {
   isBoolean,
@@ -212,7 +212,11 @@ export class TrackSection extends Thing {
       },
 
       'Count Tracks In Artist Totals': {property: 'countTracksInArtistTotals'},
-      'Excluding Track URLs': {property: 'excludingTrackURLs'},
+
+      'Excluding Track URLs': {
+        property: 'excludingTrackURLs',
+        transform: parseExcludingURLs,
+      },
 
       'Description': {property: 'description'},
     },
diff --git a/src/data/yaml.js b/src/data/yaml.js
index cce2bbf0..ba627b29 100644
--- a/src/data/yaml.js
+++ b/src/data/yaml.js
@@ -761,6 +761,18 @@ export function parseURLs(entries) {
   });
 }
 
+export function parseExcludingURLs(value) {
+  if (typeof value !== 'string') {
+    return value;
+  }
+
+  switch (value) {
+    case 'paid bonus tracks': return 'paid bonus track';
+  }
+
+  return value;
+}
+
 export function parseAdditionalFiles(entries, {subdoc, AdditionalFile}) {
   return parseArrayEntries(entries, item => {
     if (typeof item !== 'object') return item;
diff --git a/src/validators.js b/src/validators.js
index b702682e..28f3cef7 100644
--- a/src/validators.js
+++ b/src/validators.js
@@ -822,6 +822,8 @@ export function isCuratedURL(string) {
   return true;
 }
 
+// These are the only valid actual values, but parseExcludingURLs (in #yaml)
+// defines a mapping of alternative, equivalent values.
 export const isExcludingURLsReason =
   is(...[
     'quietly',