« get me outta code hell

data: more syntax WIP - 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:
author(quasar) nebula <qznebula@protonmail.com>2023-09-12 14:34:20 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-09-12 14:34:20 -0300
commit9dd9d5c328da8ad1d90cd33d4a13efac92104398 (patch)
tree058787a19f42f5118c0516d6bee869b774fdb94a /src/data/things/composite.js
parentf346edce634eff3d38aabc69c40ddf3bf4b70aac (diff)
data: more syntax WIP
Diffstat (limited to 'src/data/things/composite.js')
-rw-r--r--src/data/things/composite.js65
1 files changed, 35 insertions, 30 deletions
diff --git a/src/data/things/composite.js b/src/data/things/composite.js
index 26124b5..32a6103 100644
--- a/src/data/things/composite.js
+++ b/src/data/things/composite.js
@@ -344,7 +344,9 @@ import {
 
 const globalCompositeCache = {};
 
-export function compositeFrom(firstArg, secondArg) {
+export function compositeFrom(description) {
+  const {annotation, steps: composition} = description;
+
   const debug = fn => {
     if (compositeFrom.debug === true) {
       const label =
@@ -363,13 +365,6 @@ export function compositeFrom(firstArg, secondArg) {
     }
   };
 
-  let annotation, composition;
-  if (typeof firstArg === 'string') {
-    [annotation, composition] = [firstArg, secondArg];
-  } else {
-    [annotation, composition] = [null, firstArg];
-  }
-
   const base = composition.at(-1);
   const steps = composition.slice();
 
@@ -974,6 +969,7 @@ export function exposeConstant({
 export function withResultOfAvailabilityCheck({
   fromUpdateValue,
   fromDependency,
+  modeDependency,
   mode = 'null',
   into = '#availability',
 }) {
@@ -1026,31 +1022,40 @@ export function withResultOfAvailabilityCheck({
 
 // Exposes a dependency as it is, or continues if it's unavailable.
 // See withResultOfAvailabilityCheck for {mode} options!
-export function exposeDependencyOrContinue({
-  dependency,
-  mode = 'null',
-}) {
-  return compositeFrom(`exposeDependencyOrContinue`, [
-    withResultOfAvailabilityCheck({
-      fromDependency: dependency,
-      mode,
-    }),
+export const exposeDependencyOrContinue =
+  templateCompositeFrom({
+    annotation: `exposeDependencyOrContinue`,
 
-    {
-      dependencies: ['#availability'],
-      compute: ({'#availability': availability}, continuation) =>
-        (availability
-          ? continuation()
-          : continuation.raise()),
+    inputs: {
+      dependency: input(),
+      mode: input.default('null'),
     },
 
-    {
-      mapDependencies: {dependency},
-      compute: ({dependency}, continuation) =>
-        continuation.exit(dependency),
-    },
-  ]);
-}
+    steps: () => [
+      withResultOfAvailabilityCheck({
+        from: input('dependency'),
+        mode: input('mode'),
+      }),
+
+      {
+        dependencies: ['#availability'],
+        compute: (continuation, {
+          ['#availability']: availability,
+        }) =>
+          (availability
+            ? continuation()
+            : continuation.raise()),
+      },
+
+      {
+        dependencies: [input('#dependency')],
+        compute: (continuation, {
+          [input('#dependency')]: dependency,
+        }) =>
+          continuation.exit(dependency),
+      },
+    ],
+  });
 
 // Exposes the update value of an {update: true} property as it is,
 // or continues if it's unavailable. See withResultOfAvailabilityCheck