« get me outta code hell

content, data, validators: stub url entries - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-05-01 08:06:52 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-05-01 08:06:52 -0300
commit92d82211fdf3d653b1a5a4d2cfdad5c684e2367d (patch)
tree0822b2122963232988cbac2bd6e4689bb5cd4c32 /src/data/things
parentdba7bea5c4ef2499c3cc0aee2a3154f6a31ea5b2 (diff)
content, data, validators: stub url entries
Diffstat (limited to 'src/data/things')
-rw-r--r--src/data/things/ArtTag.js9
-rw-r--r--src/data/things/Artist.js4
-rw-r--r--src/data/things/MusicVideo.js27
-rw-r--r--src/data/things/Track.js10
-rw-r--r--src/data/things/album/Album.js3
-rw-r--r--src/data/things/flash/Flash.js3
-rw-r--r--src/data/things/group/Group.js4
7 files changed, 41 insertions, 19 deletions
diff --git a/src/data/things/ArtTag.js b/src/data/things/ArtTag.js
index 9d35f54d..1da32b0a 100644
--- a/src/data/things/ArtTag.js
+++ b/src/data/things/ArtTag.js
@@ -2,7 +2,8 @@ import {input, V} from '#composite';
 import Thing from '#thing';
 import {unique} from '#sugar';
 import {isName} from '#validators';
-import {parseAdditionalNames, parseAnnotatedReferences} from '#yaml';
+import {parseAdditionalNames, parseAnnotatedReferences, parseURLs}
+  from '#yaml';
 
 import {
   exitWithoutDependency,
@@ -170,7 +171,11 @@ export class ArtTag extends Thing {
       'Short Name': {property: 'nameShort'},
       'Directory': {property: 'directory'},
       'Description': {property: 'description'},
-      'Extra Reading URLs': {property: 'extraReadingURLs'},
+
+      'Extra Reading URLs': {
+        property: 'extraReadingURLs',
+        transform: parseURLs,
+      },
 
       'Additional Names': {
         property: 'additionalNames',
diff --git a/src/data/things/Artist.js b/src/data/things/Artist.js
index 6ce448ff..64798527 100644
--- a/src/data/things/Artist.js
+++ b/src/data/things/Artist.js
@@ -4,7 +4,7 @@ import CacheableObject from '#cacheable-object';
 import {colors} from '#cli';
 import {input, V} from '#composite';
 import Thing from '#thing';
-import {parseArtistAliases, parseArtwork} from '#yaml';
+import {parseArtistAliases, parseArtwork, parseURLs} from '#yaml';
 
 import {
   sortAlbumsTracksChronologically,
@@ -351,7 +351,7 @@ export class Artist extends Thing {
     fields: {
       'Artist': {property: 'name'},
       'Directory': {property: 'directory'},
-      'URLs': {property: 'urls'},
+      'URLs': {property: 'urls', transform: parseURLs},
       'Context Notes': {property: 'contextNotes'},
 
       // note: doesn't really work as an independent field yet
diff --git a/src/data/things/MusicVideo.js b/src/data/things/MusicVideo.js
index 77c8c619..dbb99a7f 100644
--- a/src/data/things/MusicVideo.js
+++ b/src/data/things/MusicVideo.js
@@ -4,9 +4,16 @@ import {colors} from '#cli';
 import {input, V} from '#composite';
 import {empty} from '#sugar';
 import Thing from '#thing';
-import {is, isCuratedURL, isDate, isStringNonEmpty, validateArrayItems}
-  from '#validators';
-import {parseContributors, parseDate} from '#yaml';
+import {parseContributors, parseDate, parseURLs} from '#yaml';
+
+import {
+  is,
+  isCuratedURL,
+  isCuratedURLEntry,
+  isDate,
+  isStringNonEmpty,
+  validateArrayItems,
+} from '#validators';
 
 import {constituteFrom} from '#composite/wiki-data';
 
@@ -66,6 +73,7 @@ export class MusicVideo extends Thing {
       constituteFrom('thing', V('date')),
     ],
 
+    // This is a string, not a {url, annotation} entry.
     url: {
       flags: {update: true, expose: true},
 
@@ -77,7 +85,7 @@ export class MusicVideo extends Thing {
         dependencies: ['_urls'],
         transform: (url, {'_urls': urls}) =>
           (url          ? url
-         : !empty(urls) ? urls[0]
+         : !empty(urls) ? urls[0].url
                         : null),
       },
     },
@@ -86,14 +94,14 @@ export class MusicVideo extends Thing {
       flags: {update: true, expose: true},
 
       update: {
-        validate: validateArrayItems(isCuratedURL),
+        validate: validateArrayItems(isCuratedURLEntry),
       },
 
       expose: {
         dependencies: ['_url'],
         transform: (urls, {'_url': url}) =>
-          (url && urls ? [url, ...urls]
-         : url         ? [url]
+          (url && urls ? [{url}, ...urls]
+         : url         ? [{url}]
          :        urls ? urls
                        : []),
       },
@@ -142,8 +150,9 @@ export class MusicVideo extends Thing {
       'Label': {property: 'label'},
       'Directory': {property: 'unqualifiedDirectory'},
       'Date': {property: 'date', transform: parseDate},
-      'URL': {property: 'url'},
-      'URLs': {property: 'urls'},
+
+      'URL': {property: 'url'}, // Just a string, not an object
+      'URLs': {property: 'urls', transform: parseURLs},
 
       'Cover Art File Extension': {property: 'coverArtFileExtension'},
       'Cover Art Dimensions': {property: 'coverArtDimensions'},
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index 36e3733d..cb785211 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -35,6 +35,7 @@ import {
   parseDuration,
   parseLyrics,
   parseMusicVideos,
+  parseURLs,
 } from '#yaml';
 
 import {
@@ -1004,13 +1005,18 @@ export class Track extends Thing {
         transform: parseDuration,
       },
 
-      'Color': {property: 'color'},
+      'Color': {
+        property: 'color',
+      },
 
       'Needs Lyrics': {
         property: 'needsLyrics',
       },
 
-      'URLs': {property: 'urls'},
+      'URLs': {
+        property: 'urls',
+        transform: parseURLs,
+      },
 
       // Artworks
 
diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js
index 61420e52..1ae10ab1 100644
--- a/src/data/things/album/Album.js
+++ b/src/data/things/album/Album.js
@@ -17,6 +17,7 @@ import {
   parseDimensions,
   parseMusicVideos,
   parseWallpaperParts,
+  parseURLs,
 } from '#yaml';
 
 import {withFlattenedList, withPropertyFromList} from '#composite/data';
@@ -651,7 +652,7 @@ export class Album extends Thing {
 
       'Color': {property: 'color'},
 
-      'URLs': {property: 'urls'},
+      'URLs': {property: 'urls', transform: parseURLs},
 
       // Artworks
       //  (Note - this YAML section is deliberately ordered differently
diff --git a/src/data/things/flash/Flash.js b/src/data/things/flash/Flash.js
index b06b0452..588fbae5 100644
--- a/src/data/things/flash/Flash.js
+++ b/src/data/things/flash/Flash.js
@@ -12,6 +12,7 @@ import {
   parseCreditingSources,
   parseDate,
   parseDimensions,
+  parseURLs,
 } from '#yaml';
 
 import {withPropertyFromObject} from '#composite/data';
@@ -216,7 +217,7 @@ export class Flash extends Thing {
       'Directory': {property: 'directory'},
       'Page': {property: 'page'},
       'Color': {property: 'color'},
-      'URLs': {property: 'urls'},
+      'URLs': {property: 'urls', transform: parseURLs},
 
       'Date': {
         property: 'date',
diff --git a/src/data/things/group/Group.js b/src/data/things/group/Group.js
index f8dd413e..99ad633b 100644
--- a/src/data/things/group/Group.js
+++ b/src/data/things/group/Group.js
@@ -1,7 +1,7 @@
 import {input, V} from '#composite';
 import Thing from '#thing';
 import {isBoolean} from '#validators';
-import {parseAnnotatedReferences, parseSerieses} from '#yaml';
+import {parseAnnotatedReferences, parseSerieses, parseURLs} from '#yaml';
 
 import {withPropertyFromObject} from '#composite/data';
 import {withUniqueReferencingThing} from '#composite/wiki-data';
@@ -176,7 +176,7 @@ export class Group extends Thing {
       },
 
       'Description': {property: 'description'},
-      'URLs': {property: 'urls'},
+      'URLs': {property: 'urls', transform: parseURLs},
 
       'Closely Linked Artists': {
         property: 'closelyLinkedArtists',