« get me outta code hell

data: factor out getOutputName in withPropertyFrom... - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-11-25 09:07:59 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-11-25 09:07:59 -0400
commit85c80fbdb4780e5b39296ae1f3081afceb5d8741 (patch)
treeb522e8393bd15d192f57d84843212cfdee5d06e7
parentecb080f8bcb32cd3275313289f17f98086241124 (diff)
data: factor out getOutputName in withPropertyFrom...
-rw-r--r--src/data/composite/data/helpers/property-from-helpers.js10
-rw-r--r--src/data/composite/data/withLengthOfList.js30
-rw-r--r--src/data/composite/data/withPropertiesFromList.js14
-rw-r--r--src/data/composite/data/withPropertiesFromObject.js14
-rw-r--r--src/data/composite/data/withPropertyFromList.js18
-rw-r--r--src/data/composite/data/withPropertyFromObject.js35
6 files changed, 61 insertions, 60 deletions
diff --git a/src/data/composite/data/helpers/property-from-helpers.js b/src/data/composite/data/helpers/property-from-helpers.js
new file mode 100644
index 00000000..3d1e12a5
--- /dev/null
+++ b/src/data/composite/data/helpers/property-from-helpers.js
@@ -0,0 +1,10 @@
+export function getOutputName({property, from, prefix = null}) {
+  if (property && prefix) {
+    return `${prefix}.${property}`;
+  } else if (property && from) {
+    return `${from}.${property}`;
+  } else {
+    if (!property) throw new Error(`guard property outside getOutputName(), c'mon`);
+    if (!from) throw new Error(`guard from in getOutputName(), c'mon`);
+  }
+}
\ No newline at end of file
diff --git a/src/data/composite/data/withLengthOfList.js b/src/data/composite/data/withLengthOfList.js
index e67aa887..7e8fd17f 100644
--- a/src/data/composite/data/withLengthOfList.js
+++ b/src/data/composite/data/withLengthOfList.js
@@ -1,16 +1,6 @@
 import {input, templateCompositeFrom} from '#composite';
 
-function getOutputName({
-  [input.staticDependency('list')]: list,
-}) {
-  if (list && list.startsWith('#')) {
-    return `${list}.length`;
-  } else if (list) {
-    return `#${list}.length`;
-  } else {
-    return '#length';
-  }
-}
+import {getOutputName} from './helpers/property-from-helpers.js';
 
 export default templateCompositeFrom({
   annotation: `withMappedList`,
@@ -19,13 +9,25 @@ export default templateCompositeFrom({
     list: input({type: 'array'}),
   },
 
-  outputs: inputs => [getOutputName(inputs)],
+  outputs: ({
+    [input.staticDependency('list')]: list,
+  }) => [
+    (list
+      ? getOutputName({property: 'length', from: list})
+      : '#length'),
+  ],
 
   steps: () => [
     {
       dependencies: [input.staticDependency('list')],
-      compute: (continuation, inputs) =>
-        continuation({'#output': getOutputName(inputs)}),
+      compute: (continuation, {
+        [input.staticDependency('list')]: list,
+      }) => continuation({
+        '#output':
+          (list
+            ? getOutputName({property: 'length', from: list})
+            : '#length'),
+      }),
     },
 
     {
diff --git a/src/data/composite/data/withPropertiesFromList.js b/src/data/composite/data/withPropertiesFromList.js
index fb4134bc..791165b3 100644
--- a/src/data/composite/data/withPropertiesFromList.js
+++ b/src/data/composite/data/withPropertiesFromList.js
@@ -12,6 +12,8 @@
 import {input, templateCompositeFrom} from '#composite';
 import {isString, validateArrayItems} from '#validators';
 
+import {getOutputName} from './helpers/property-from-helpers.js';
+
 export default templateCompositeFrom({
   annotation: `withPropertiesFromList`,
 
@@ -32,11 +34,7 @@ export default templateCompositeFrom({
   }) =>
     (properties
       ? properties.map(property =>
-          (prefix
-            ? `${prefix}.${property}`
-         : list
-            ? `${list}.${property}`
-            : `#list.${property}`))
+          getOutputName({property, from: list || '#list', prefix}))
       : ['#lists']),
 
   steps: () => [
@@ -73,11 +71,7 @@ export default templateCompositeFrom({
           ? continuation(
               Object.fromEntries(
                 properties.map(property => [
-                  (prefix
-                    ? `${prefix}.${property}`
-                 : list
-                    ? `${list}.${property}`
-                    : `#list.${property}`),
+                  getOutputName({property, from: list || '#list', prefix}),
                   lists[property],
                 ])))
           : continuation({'#lists': lists})),
diff --git a/src/data/composite/data/withPropertiesFromObject.js b/src/data/composite/data/withPropertiesFromObject.js
index 21726b58..f600df0d 100644
--- a/src/data/composite/data/withPropertiesFromObject.js
+++ b/src/data/composite/data/withPropertiesFromObject.js
@@ -11,6 +11,8 @@
 import {input, templateCompositeFrom} from '#composite';
 import {isString, validateArrayItems} from '#validators';
 
+import {getOutputName} from './helpers/property-from-helpers.js';
+
 export default templateCompositeFrom({
   annotation: `withPropertiesFromObject`,
 
@@ -32,11 +34,7 @@ export default templateCompositeFrom({
   }) =>
     (properties
       ? properties.map(property =>
-          (prefix
-            ? `${prefix}.${property}`
-         : object
-            ? `${object}.${property}`
-            : `#object.${property}`))
+          getOutputName({property, from: object || '#object', prefix}))
       : ['#object']),
 
   steps: () => [
@@ -71,11 +69,7 @@ export default templateCompositeFrom({
           ? continuation(
               Object.fromEntries(
                 entries.map(([property, value]) => [
-                  (prefix
-                    ? `${prefix}.${property}`
-                 : object
-                    ? `${object}.${property}`
-                    : `#object.${property}`),
+                  getOutputName({property, from: object || '#object', prefix}),
                   value ?? null,
                 ])))
           : continuation({
diff --git a/src/data/composite/data/withPropertyFromList.js b/src/data/composite/data/withPropertyFromList.js
index 760095c2..485dd197 100644
--- a/src/data/composite/data/withPropertyFromList.js
+++ b/src/data/composite/data/withPropertyFromList.js
@@ -16,12 +16,7 @@
 import CacheableObject from '#cacheable-object';
 import {input, templateCompositeFrom} from '#composite';
 
-function getOutputName({list, property, prefix}) {
-  if (!property) return `#values`;
-  if (prefix) return `${prefix}.${property}`;
-  if (list) return `${list}.${property}`;
-  return `#list.${property}`;
-}
+import {getOutputName} from './helpers/property-from-helpers.js';
 
 export default templateCompositeFrom({
   annotation: `withPropertyFromList`,
@@ -37,8 +32,11 @@ export default templateCompositeFrom({
     [input.staticDependency('list')]: list,
     [input.staticValue('property')]: property,
     [input.staticValue('prefix')]: prefix,
-  }) =>
-    [getOutputName({list, property, prefix})],
+  }) => [
+    (property
+      ? getOutputName({property, from: list || '#list', prefix})
+      : '#values'),
+  ],
 
   steps: () => [
     {
@@ -78,7 +76,9 @@ export default templateCompositeFrom({
         [input.staticValue('prefix')]: prefix,
       }) => continuation({
         ['#outputName']:
-          getOutputName({list, property, prefix}),
+          (property
+            ? getOutputName({property, from: list || '#list', prefix})
+            : '#values'),
       }),
     },
 
diff --git a/src/data/composite/data/withPropertyFromObject.js b/src/data/composite/data/withPropertyFromObject.js
index 7b452b99..7f8c4449 100644
--- a/src/data/composite/data/withPropertyFromObject.js
+++ b/src/data/composite/data/withPropertyFromObject.js
@@ -13,20 +13,7 @@
 import CacheableObject from '#cacheable-object';
 import {input, templateCompositeFrom} from '#composite';
 
-function getOutputName({
-  [input.staticDependency('object')]: object,
-  [input.staticValue('property')]: property,
-}) {
-  if (object && property) {
-    if (object.startsWith('#')) {
-      return `${object}.${property}`;
-    } else {
-      return `#${object}.${property}`;
-    }
-  } else {
-    return '#value';
-  }
-}
+import {getOutputName} from './helpers/property-from-helpers.js';
 
 export default templateCompositeFrom({
   annotation: `withPropertyFromObject`,
@@ -37,7 +24,14 @@ export default templateCompositeFrom({
     internal: input({type: 'boolean', defaultValue: false}),
   },
 
-  outputs: inputs => [getOutputName(inputs)],
+  outputs: ({
+    [input.staticDependency('object')]: object,
+    [input.staticValue('property')]: property,
+  }) => [
+    (property
+      ? getOutputName({property, from: object || '#object'})
+      : '#value'),
+  ],
 
   steps: () => [
     {
@@ -46,8 +40,15 @@ export default templateCompositeFrom({
         input.staticValue('property'),
       ],
 
-      compute: (continuation, inputs) =>
-        continuation({'#output': getOutputName(inputs)}),
+      compute: (continuation, {
+        [input.staticDependency('object')]: object,
+        [input.staticValue('property')]: property,
+      }) => continuation({
+        '#output':
+          (property
+            ? getOutputName({property, from: object || '#object'})
+            : '#value'),
+      }),
     },
 
     {