« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/data')
-rw-r--r--src/data/things/thing.js133
-rw-r--r--src/data/things/track.js336
2 files changed, 195 insertions, 274 deletions
diff --git a/src/data/things/thing.js b/src/data/things/thing.js
index d4d7c850..15ec62c3 100644
--- a/src/data/things/thing.js
+++ b/src/data/things/thing.js
@@ -1333,23 +1333,17 @@ export default class Thing extends CacheableObject {
         }),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#availability'],
-            compute: ({'#availability': availability}, continuation) =>
-              (availability
-                ? continuation()
-                : continuation.raise()),
-          },
+          dependencies: ['#availability'],
+          compute: ({'#availability': availability}, continuation) =>
+            (availability
+              ? continuation()
+              : continuation.raise()),
         },
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            mapDependencies: {dependency},
-            compute: ({dependency}, continuation) =>
-              continuation.exit(dependency),
-          },
+          mapDependencies: {dependency},
+          compute: ({dependency}, continuation) =>
+            continuation.exit(dependency),
         },
       ]);
     },
@@ -1367,22 +1361,16 @@ export default class Thing extends CacheableObject {
         }),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#availability'],
-            compute: ({'#availability': availability}, continuation) =>
-              (availability
-                ? continuation()
-                : continuation.raise()),
-          },
+          dependencies: ['#availability'],
+          compute: ({'#availability': availability}, continuation) =>
+            (availability
+              ? continuation()
+              : continuation.raise()),
         },
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            transform: (value, {}, continuation) =>
-              continuation.exit(value),
-          },
+          transform: (value, {}, continuation) =>
+            continuation.exit(value),
         },
       ]);
     },
@@ -1396,23 +1384,17 @@ export default class Thing extends CacheableObject {
     }) {
       return Thing.composite.from(`Thing.composite.earlyExitIfAvailabilityCheckFailed`, [
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            mapDependencies: {availability},
-            compute: ({availability}, continuation) =>
-              (availability
-                ? continuation.raise()
-                : continuation()),
-          },
+          mapDependencies: {availability},
+          compute: ({availability}, continuation) =>
+            (availability
+              ? continuation.raise()
+              : continuation()),
         },
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            options: {value},
-            compute: ({'#options': {value}}, continuation) =>
-              continuation.exit(value),
-          },
+          options: {value},
+          compute: ({'#options': {value}}, continuation) =>
+            continuation.exit(value),
         },
       ]);
     },
@@ -1452,24 +1434,18 @@ export default class Thing extends CacheableObject {
         Thing.composite.withResultOfAvailabilityCheck({fromDependency: dependency, mode}),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#availability'],
-            compute: ({'#availability': availability}, continuation) =>
-              (availability
-                ? continuation.raise()
-                : continuation()),
-          },
+          dependencies: ['#availability'],
+          compute: ({'#availability': availability}, continuation) =>
+            (availability
+              ? continuation.raise()
+              : continuation()),
         },
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            options: {raise},
-            mapContinuation: map,
-            compute: ({'#options': {raise}}, continuation) =>
-              continuation.raiseAbove(raise),
-          },
+          options: {raise},
+          mapContinuation: map,
+          compute: ({'#options': {raise}}, continuation) =>
+            continuation.raiseAbove(raise),
         },
       ]);
     },
@@ -1485,24 +1461,18 @@ export default class Thing extends CacheableObject {
         Thing.composite.withResultOfAvailabilityCheck({fromUpdateValue: true, mode}),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            mapDependencies: {availability},
-            compute: ({availability}, continuation) =>
-              (availability
-                ? continuation.raise()
-                : continuation()),
-          },
+          mapDependencies: {availability},
+          compute: ({availability}, continuation) =>
+            (availability
+              ? continuation.raise()
+              : continuation()),
         },
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            options: {raise},
-            mapContinuation: map,
-            compute: ({'#options': {raise}}, continuation) =>
-              continuation.raiseAbove(raise),
-          },
+          options: {raise},
+          mapContinuation: map,
+          compute: ({'#options': {raise}}, continuation) =>
+            continuation.raiseAbove(raise),
         },
       ]);
     },
@@ -1549,21 +1519,18 @@ export default class Thing extends CacheableObject {
         Thing.composite.earlyExitWithoutDependency(data),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            options: {findFunction, earlyExitIfNotFound},
-            mapDependencies: {ref, data},
-            mapContinuation: {match: to},
+          options: {findFunction, earlyExitIfNotFound},
+          mapDependencies: {ref, data},
+          mapContinuation: {match: to},
 
-            compute({ref, data, '#options': {findFunction, earlyExitIfNotFound}}, continuation) {
-              const match = findFunction(ref, data, {mode: 'quiet'});
+          compute({ref, data, '#options': {findFunction, earlyExitIfNotFound}}, continuation) {
+            const match = findFunction(ref, data, {mode: 'quiet'});
 
-              if (match === null && earlyExitIfNotFound) {
-                return continuation.exit(null);
-              }
+            if (match === null && earlyExitIfNotFound) {
+              return continuation.exit(null);
+            }
 
-              return continuation.raise({match});
-            },
+            return continuation.raise({match});
           },
         },
       ]);
diff --git a/src/data/things/track.js b/src/data/things/track.js
index 74713a00..ad001445 100644
--- a/src/data/things/track.js
+++ b/src/data/things/track.js
@@ -49,18 +49,15 @@ export class Track extends Thing {
       Track.composite.withContainingTrackSection({earlyExitIfNotFound: false}),
 
       {
-        flags: {expose: true, compose: true},
-        expose: {
-          dependencies: ['#trackSection'],
-          compute: ({'#trackSection': trackSection}, continuation) =>
-            // Album.trackSections guarantees the track section will have a
-            // color property (inheriting from the album's own color), but only
-            // if it's actually present! Color will be inherited directly from
-            // album otherwise.
-            (trackSection
-              ? trackSection.color
-              : continuation()),
-        },
+        dependencies: ['#trackSection'],
+        compute: ({'#trackSection': trackSection}, continuation) =>
+          // Album.trackSections guarantees the track section will have a
+          // color property (inheriting from the album's own color), but only
+          // if it's actually present! Color will be inherited directly from
+          // album otherwise.
+          (trackSection
+            ? trackSection.color
+            : continuation()),
       },
 
       Track.composite.withAlbumProperty('color'),
@@ -225,14 +222,11 @@ export class Track extends Thing {
       }),
 
       {
-        flags: {expose: true, compose: true},
-        expose: {
-          mapDependencies: {contribsFromTrack: '#artistContribs'},
-          compute: ({contribsFromTrack}, continuation) =>
-            (empty(contribsFromTrack)
-              ? continuation()
-              : contribsFromTrack),
-        },
+        mapDependencies: {contribsFromTrack: '#artistContribs'},
+        compute: ({contribsFromTrack}, continuation) =>
+          (empty(contribsFromTrack)
+            ? continuation()
+            : contribsFromTrack),
       },
 
       Track.composite.withAlbumProperty('artistContribs'),
@@ -259,14 +253,11 @@ export class Track extends Thing {
     // of the track.
     coverArtistContribs: Thing.composite.from(`Track.coverArtistContribs`, [
       {
-        flags: {expose: true, compose: true},
-        expose: {
-          dependencies: ['disableUniqueCoverArt'],
-          compute: ({disableUniqueCoverArt}, continuation) =>
-            (disableUniqueCoverArt
-              ? null
-              : continuation()),
-        },
+        dependencies: ['disableUniqueCoverArt'],
+        compute: ({disableUniqueCoverArt}, continuation) =>
+          (disableUniqueCoverArt
+            ? null
+            : continuation()),
       },
 
       Thing.composite.withResolvedContribs({
@@ -275,14 +266,11 @@ export class Track extends Thing {
       }),
 
       {
-        flags: {expose: true, compose: true},
-        expose: {
-          mapDependencies: {contribsFromTrack: '#coverArtistContribs'},
-          compute: ({contribsFromTrack}, continuation) =>
-            (empty(contribsFromTrack)
-              ? continuation()
-              : contribsFromTrack),
-        },
+        mapDependencies: {contribsFromTrack: '#coverArtistContribs'},
+        compute: ({contribsFromTrack}, continuation) =>
+          (empty(contribsFromTrack)
+            ? continuation()
+            : contribsFromTrack),
       },
 
       Track.composite.withAlbumProperty('trackCoverArtistContribs'),
@@ -357,21 +345,16 @@ export class Track extends Thing {
         Track.composite.withOriginalRelease(),
 
         {
-          flags: {expose: true, compose: true},
-
-          expose: {
-            dependencies: ['#originalRelease'],
+          dependencies: ['#originalRelease'],
+          compute({'#originalRelease': originalRelease}, continuation) {
+            if (!originalRelease) return continuation.raise();
 
-            compute({'#originalRelease': originalRelease}, continuation) {
-              if (!originalRelease) return continuation.raise();
+            const value = originalRelease[originalProperty];
+            if (allowOverride && value === null) return continuation.raise();
 
-              const value = originalRelease[originalProperty];
-              if (allowOverride && value === null) return continuation.raise();
-
-              return continuation.exit(value);
-            },
+            return continuation.exit(value);
           },
-        }
+        },
       ]);
     },
 
@@ -387,51 +370,43 @@ export class Track extends Thing {
         }),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#albumDataAvailability'],
-            options: {earlyExitIfNotFound},
-            mapContinuation: {to},
-            compute: ({
-              '#albumDataAvailability': albumDataAvailability,
-              '#options': {earlyExitIfNotFound},
-            }, continuation) =>
-              (albumDataAvailability
-                ? continuation()
-                : (earlyExitIfNotFound
-                    ? continuation.exit(null)
-                    : continuation.raise({to: null}))),
-          },
+          dependencies: ['#albumDataAvailability'],
+          options: {earlyExitIfNotFound},
+          mapContinuation: {to},
+
+          compute: ({
+            '#albumDataAvailability': albumDataAvailability,
+            '#options': {earlyExitIfNotFound},
+          }, continuation) =>
+            (albumDataAvailability
+              ? continuation()
+              : (earlyExitIfNotFound
+                  ? continuation.exit(null)
+                  : continuation.raise({to: null}))),
         },
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['this', 'albumData'],
-            compute: ({this: track, albumData}, continuation) =>
-              continuation({
-                '#album':
-                  albumData.find(album => album.tracks.includes(track)),
-              }),
-          },
+          dependencies: ['this', 'albumData'],
+          compute: ({this: track, albumData}, continuation) =>
+            continuation({
+              '#album':
+                albumData.find(album => album.tracks.includes(track)),
+            }),
         },
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#album'],
-            options: {earlyExitIfNotFound},
-            mapContinuation: {to},
-            compute: ({
-              '#album': album,
-              '#options': {earlyExitIfNotFound},
-            }, continuation) =>
-              (album
-                ? continuation.raise({to: album})
-                : (earlyExitIfNotFound
-                    ? continuation.exit(null)
-                    : continuation.raise({to: album}))),
-          },
+          dependencies: ['#album'],
+          options: {earlyExitIfNotFound},
+          mapContinuation: {to},
+          compute: ({
+            '#album': album,
+            '#options': {earlyExitIfNotFound},
+          }, continuation) =>
+            (album
+              ? continuation.raise({to: album})
+              : (earlyExitIfNotFound
+                  ? continuation.exit(null)
+                  : continuation.raise({to: album}))),
         },
       ]);
     },
@@ -448,20 +423,17 @@ export class Track extends Thing {
         Track.composite.withAlbum({earlyExitIfNotFound}),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#album'],
-            options: {property},
-            mapContinuation: {to},
-
-            compute: ({
-              '#album': album,
-              '#options': {property},
-            }, continuation) =>
-              (album
-                ? continuation.raise({to: album[property]})
-                : continuation.raise({to: null})),
-          },
+          dependencies: ['#album'],
+          options: {property},
+          mapContinuation: {to},
+
+          compute: ({
+            '#album': album,
+            '#options': {property},
+          }, continuation) =>
+            (album
+              ? continuation.raise({to: album[property]})
+              : continuation.raise({to: null})),
         },
       ]);
     },
@@ -479,29 +451,26 @@ export class Track extends Thing {
         Track.composite.withAlbum({earlyExitIfNotFound}),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#album'],
-            options: {properties, prefix},
-
-            compute({
-              '#album': album,
-              '#options': {properties, prefix},
-            }, continuation) {
-              const raise = {};
-
-              if (album) {
-                for (const property of properties) {
-                  raise[prefix + '.' + property] = album[property];
-                }
-              } else {
-                for (const property of properties) {
-                  raise[prefix + '.' + property] = null;
-                }
+          dependencies: ['#album'],
+          options: {properties, prefix},
+
+          compute({
+            '#album': album,
+            '#options': {properties, prefix},
+          }, continuation) {
+            const raise = {};
+
+            if (album) {
+              for (const property of properties) {
+                raise[prefix + '.' + property] = album[property];
               }
+            } else {
+              for (const property of properties) {
+                raise[prefix + '.' + property] = null;
+              }
+            }
 
-              return continuation.raise(raise);
-            },
+            return continuation.raise(raise);
           },
         },
       ]);
@@ -519,30 +488,27 @@ export class Track extends Thing {
         Track.composite.withAlbumProperty('trackSections', {earlyExitIfNotFound}),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['this', '#album.trackSections'],
-            mapContinuation: {to},
-
-            compute({
-              this: track,
-              '#album.trackSections': trackSections,
-            }, continuation) {
-              if (!trackSections) {
-                return continuation.raise({to: null});
-              }
-
-              const trackSection =
-                trackSections.find(({tracks}) => tracks.includes(track));
-
-              if (trackSection) {
-                return continuation.raise({to: trackSection});
-              } else if (earlyExitIfNotFound) {
-                return continuation.exit(null);
-              } else {
-                return continuation.raise({to: null});
-              }
-            },
+          dependencies: ['this', '#album.trackSections'],
+          mapContinuation: {to},
+
+          compute({
+            this: track,
+            '#album.trackSections': trackSections,
+          }, continuation) {
+            if (!trackSections) {
+              return continuation.raise({to: null});
+            }
+
+            const trackSection =
+              trackSections.find(({tracks}) => tracks.includes(track));
+
+            if (trackSection) {
+              return continuation.raise({to: trackSection});
+            } else if (earlyExitIfNotFound) {
+              return continuation.exit(null);
+            } else {
+              return continuation.raise({to: null});
+            }
           },
         },
       ]);
@@ -568,24 +534,21 @@ export class Track extends Thing {
         }),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['this', '#originalRelease'],
-            options: {selfIfOriginal},
-            mapContinuation: {to},
-            compute: ({
-              this: track,
-              '#originalRelease': originalRelease,
-              '#options': {selfIfOriginal},
-            }, continuation) =>
-              continuation.raise({
-                to:
-                  (originalRelease ??
-                    (selfIfOriginal
-                      ? track
-                      : null)),
-              }),
-          },
+          dependencies: ['this', '#originalRelease'],
+          options: {selfIfOriginal},
+          mapContinuation: {to},
+          compute: ({
+            this: track,
+            '#originalRelease': originalRelease,
+            '#options': {selfIfOriginal},
+          }, continuation) =>
+            continuation.raise({
+              to:
+                (originalRelease ??
+                  (selfIfOriginal
+                    ? track
+                    : null)),
+            }),
         },
       ]);
     },
@@ -597,15 +560,12 @@ export class Track extends Thing {
     } = {}) {
       return Thing.composite.from(`Track.composite.withHasUniqueCoverArt`, [
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['disableUniqueCoverArt'],
-            mapContinuation: {to},
-            compute: ({disableUniqueCoverArt}, continuation) =>
-              (disableUniqueCoverArt
-                ? continuation.raise({to: false})
-                : continuation()),
-          },
+          dependencies: ['disableUniqueCoverArt'],
+          mapContinuation: {to},
+          compute: ({disableUniqueCoverArt}, continuation) =>
+            (disableUniqueCoverArt
+              ? continuation.raise({to: false})
+              : continuation()),
         },
 
         Thing.composite.withResolvedContribs({
@@ -614,29 +574,23 @@ export class Track extends Thing {
         }),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#coverArtistContribs'],
-            mapContinuation: {to},
-            compute: ({'#coverArtistContribs': contribsFromTrack}, continuation) =>
-              (empty(contribsFromTrack)
-                ? continuation()
-                : continuation.raise({to: true})),
-          },
+          dependencies: ['#coverArtistContribs'],
+          mapContinuation: {to},
+          compute: ({'#coverArtistContribs': contribsFromTrack}, continuation) =>
+            (empty(contribsFromTrack)
+              ? continuation()
+              : continuation.raise({to: true})),
         },
 
         Track.composite.withAlbumProperty('trackCoverArtistContribs'),
 
         {
-          flags: {expose: true, compose: true},
-          expose: {
-            dependencies: ['#album.trackCoverArtistContribs'],
-            mapContinuation: {to},
-            compute: ({'#album.trackCoverArtistContribs': contribsFromAlbum}, continuation) =>
-              (empty(contribsFromAlbum)
-                ? continuation.raise({to: false})
-                : continuation.raise({to: true})),
-          },
+          dependencies: ['#album.trackCoverArtistContribs'],
+          mapContinuation: {to},
+          compute: ({'#album.trackCoverArtistContribs': contribsFromAlbum}, continuation) =>
+            (empty(contribsFromAlbum)
+              ? continuation.raise({to: false})
+              : continuation.raise({to: true})),
         },
       ]);
     },