« 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/things/composite.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/things/composite.js')
-rw-r--r--src/data/things/composite.js26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/data/things/composite.js b/src/data/things/composite.js
index 1be60cd1..bf2d11ea 100644
--- a/src/data/things/composite.js
+++ b/src/data/things/composite.js
@@ -331,6 +331,7 @@
 // syntax as for other compositional steps, and it'll work out cleanly!
 //
 
+import find from '#find';
 import {empty, filterProperties, openAggregate} from '#sugar';
 
 import Thing from './thing.js';
@@ -1102,20 +1103,33 @@ export function raiseWithoutUpdateValue({
 // means mapping the "who" reference of each contribution to an artist
 // object, and filtering out those whose "who" doesn't match any artist.
 export function withResolvedContribs({from, to}) {
-  return {
-    annotation: `Thing.composite.withResolvedContribs`,
-    flags: {expose: true, compose: true},
+  return Thing.composite.from(`Thing.composite.withResolvedContribs`, [
+    Thing.composite.earlyExitWithoutDependency('artistData', {
+      value: [],
+    }),
 
-    expose: {
+    Thing.composite.raiseWithoutDependency(from, {
+      mode: 'empty',
+      map: {to},
+      raise: {to: []},
+    }),
+
+    {
       dependencies: ['artistData'],
       mapDependencies: {from},
       mapContinuation: {to},
       compute: ({artistData, from}, continuation) =>
         continuation({
-          to: Thing.findArtistsFromContribs(from, artistData),
+          to:
+            from
+              .map(({who, what}) => ({
+                who: find.artist(who, artistData, {mode: 'quiet'}),
+                what,
+              }))
+              .filter(({who}) => who),
         }),
     },
-  };
+  ]);
 }
 
 // Resolves a reference by using the provided find function to match it