« get me outta code hell

data: Track, Album: concise-retouch toplevel property descriptors - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-11-27 21:09:29 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-11-27 21:09:29 -0400
commitf2161a3fe8ff9b574f53156d08ca7853427be8e4 (patch)
treed79e117ddf638729c20c4e4deb847ae5a50d92ca /src/data/composite
parent861810685da73fa9fd6d4a1cb965155c61c99d11 (diff)
data: Track, Album: concise-retouch toplevel property descriptors
notably chopped exitWithoutArtwork and contribsPresent,
replaced with new hasArtwork and more exitWithoutDependency
Diffstat (limited to 'src/data/composite')
-rw-r--r--src/data/composite/wiki-data/exitWithoutArtwork.js45
-rw-r--r--src/data/composite/wiki-data/index.js2
-rw-r--r--src/data/composite/wiki-properties/contribsPresent.js30
-rw-r--r--src/data/composite/wiki-properties/hasArtwork.js (renamed from src/data/composite/wiki-data/withHasArtwork.js)43
-rw-r--r--src/data/composite/wiki-properties/index.js2
5 files changed, 19 insertions, 103 deletions
diff --git a/src/data/composite/wiki-data/exitWithoutArtwork.js b/src/data/composite/wiki-data/exitWithoutArtwork.js
deleted file mode 100644
index 8e799fda..00000000
--- a/src/data/composite/wiki-data/exitWithoutArtwork.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import {input, templateCompositeFrom} from '#composite';
-import {isContributionList, isThing, strictArrayOf} from '#validators';
-
-import {exitWithoutDependency} from '#composite/control-flow';
-
-import withHasArtwork from './withHasArtwork.js';
-
-export default templateCompositeFrom({
-  annotation: `exitWithoutArtwork`,
-
-  inputs: {
-    contribs: input({
-      validate: isContributionList,
-      defaultValue: null,
-    }),
-
-    artwork: input({
-      validate: isThing,
-      defaultValue: null,
-    }),
-
-    artworks: input({
-      validate: strictArrayOf(isThing),
-      defaultValue: null,
-    }),
-
-    value: input({
-      defaultValue: null,
-    }),
-  },
-
-  steps: () => [
-    withHasArtwork({
-      contribs: input('contribs'),
-      artwork: input('artwork'),
-      artworks: input('artworks'),
-    }),
-
-    exitWithoutDependency({
-      dependency: '#hasArtwork',
-      mode: input.value('falsy'),
-      value: input('value'),
-    }),
-  ],
-});
diff --git a/src/data/composite/wiki-data/index.js b/src/data/composite/wiki-data/index.js
index beb6f3b8..41f34d21 100644
--- a/src/data/composite/wiki-data/index.js
+++ b/src/data/composite/wiki-data/index.js
@@ -7,7 +7,6 @@
 export {default as constituteFrom} from './constituteFrom.js';
 export {default as constituteOrContinue} from './constituteOrContinue.js';
 export {default as exitWithoutContribs} from './exitWithoutContribs.js';
-export {default as exitWithoutArtwork} from './exitWithoutArtwork.js';
 export {default as gobbleSoupyFind} from './gobbleSoupyFind.js';
 export {default as gobbleSoupyReverse} from './gobbleSoupyReverse.js';
 export {default as inputFindOptions} from './inputFindOptions.js';
@@ -21,7 +20,6 @@ export {default as withConstitutedArtwork} from './withConstitutedArtwork.js';
 export {default as withContentNodes} from './withContentNodes.js';
 export {default as withContributionListSums} from './withContributionListSums.js';
 export {default as withDirectory} from './withDirectory.js';
-export {default as withHasArtwork} from './withHasArtwork.js';
 export {default as withRecontextualizedContributionList} from './withRecontextualizedContributionList.js';
 export {default as withRedatedContributionList} from './withRedatedContributionList.js';
 export {default as withResolvedAnnotatedReferenceList} from './withResolvedAnnotatedReferenceList.js';
diff --git a/src/data/composite/wiki-properties/contribsPresent.js b/src/data/composite/wiki-properties/contribsPresent.js
deleted file mode 100644
index 24f302a5..00000000
--- a/src/data/composite/wiki-properties/contribsPresent.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Nice 'n simple shorthand for an exposed-only flag which is true when any
-// contributions are present in the specified property.
-
-import {input, templateCompositeFrom} from '#composite';
-import {isContributionList} from '#validators';
-
-import {exposeDependency, withResultOfAvailabilityCheck}
-  from '#composite/control-flow';
-
-export default templateCompositeFrom({
-  annotation: `contribsPresent`,
-
-  compose: false,
-
-  inputs: {
-    contribs: input.staticDependency({
-      validate: isContributionList,
-      acceptsNull: true,
-    }),
-  },
-
-  steps: () => [
-    withResultOfAvailabilityCheck({
-      from: input('contribs'),
-      mode: input.value('empty'),
-    }),
-
-    exposeDependency({dependency: '#availability'}),
-  ],
-});
diff --git a/src/data/composite/wiki-data/withHasArtwork.js b/src/data/composite/wiki-properties/hasArtwork.js
index 9c22f439..e403a7e2 100644
--- a/src/data/composite/wiki-data/withHasArtwork.js
+++ b/src/data/composite/wiki-properties/hasArtwork.js
@@ -1,13 +1,17 @@
-import {input, templateCompositeFrom} from '#composite';
+import {input, templateCompositeFrom, V} from '#composite';
 import {isContributionList, isThing, strictArrayOf} from '#validators';
 
-import {raiseOutputWithoutDependency, withResultOfAvailabilityCheck}
-  from '#composite/control-flow';
 import {fillMissingListItems, withFlattenedList, withPropertyFromList}
   from '#composite/data';
 
+import {
+  exitWithoutDependency,
+  exposeWhetherDependencyAvailable,
+  withResultOfAvailabilityCheck,
+} from '#composite/control-flow';
+
 export default templateCompositeFrom({
-  annotation: 'withHasArtwork',
+  annotation: 'hasArtwork',
 
   inputs: {
     contribs: input({
@@ -26,7 +30,7 @@ export default templateCompositeFrom({
     }),
   },
 
-  outputs: ['#hasArtwork'],
+  compose: false,
 
   steps: () => [
     withResultOfAvailabilityCheck({
@@ -40,9 +44,7 @@ export default templateCompositeFrom({
         ['#availability']: availability,
       }) =>
         (availability
-          ? continuation.raiseOutput({
-              ['#hasArtwork']: true,
-            })
+          ? true
           : continuation()),
     },
 
@@ -64,34 +66,25 @@ export default templateCompositeFrom({
         }),
     },
 
-    raiseOutputWithoutDependency({
-      dependency: '#artworks',
+    exitWithoutDependency('#artworks', {
+      value: input.value(false),
       mode: input.value('empty'),
-      output: input.value({'#hasArtwork': false}),
     }),
 
-    withPropertyFromList({
-      list: '#artworks',
+    withPropertyFromList('#artworks', {
       property: input.value('artistContribs'),
       internal: input.value(true),
     }),
 
     // Since we're getting the update value for each artwork's artistContribs,
     // it may not be set at all, and in that case won't be exposing as [].
-    fillMissingListItems({
-      list: '#artworks.artistContribs',
-      fill: input.value([]),
-    }),
+    fillMissingListItems('#artworks.artistContribs', V([])),
 
-    withFlattenedList({
-      list: '#artworks.artistContribs',
-    }),
+    withFlattenedList('#artworks.artistContribs'),
 
-    withResultOfAvailabilityCheck({
-      from: '#flattenedList',
+    exposeWhetherDependencyAvailable({
+      dependency: '#flattenedList',
       mode: input.value('empty'),
-    }).outputs({
-      '#availability': '#hasArtwork',
     }),
   ],
-});
+});
\ No newline at end of file
diff --git a/src/data/composite/wiki-properties/index.js b/src/data/composite/wiki-properties/index.js
index 57a2b8f2..9ef7ccc4 100644
--- a/src/data/composite/wiki-properties/index.js
+++ b/src/data/composite/wiki-properties/index.js
@@ -10,7 +10,6 @@ export {default as commentatorArtists} from './commentatorArtists.js';
 export {default as constitutibleArtwork} from './constitutibleArtwork.js';
 export {default as constitutibleArtworkList} from './constitutibleArtworkList.js';
 export {default as contentString} from './contentString.js';
-export {default as contribsPresent} from './contribsPresent.js';
 export {default as contributionList} from './contributionList.js';
 export {default as dimensions} from './dimensions.js';
 export {default as directory} from './directory.js';
@@ -18,6 +17,7 @@ export {default as duration} from './duration.js';
 export {default as externalFunction} from './externalFunction.js';
 export {default as fileExtension} from './fileExtension.js';
 export {default as flag} from './flag.js';
+export {default as hasArtwork} from './hasArtwork.js';
 export {default as name} from './name.js';
 export {default as referenceList} from './referenceList.js';
 export {default as referencedArtworkList} from './referencedArtworkList.js';