« get me outta code hell

data, infra: auto-inherit yaml document specs - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things/index.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-11-20 11:55:28 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-11-25 07:06:48 -0400
commit03142771e556f9e115709832a98d81942528f10a (patch)
tree03fa9e4be249310f855476c7c48664dc8fe36f10 /src/data/things/index.js
parentf2b4a2df290394af1c079aab2f818aa34edcfe7d (diff)
data, infra: auto-inherit yaml document specs
Diffstat (limited to 'src/data/things/index.js')
-rw-r--r--src/data/things/index.js36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/data/things/index.js b/src/data/things/index.js
index 33fc933d..893684de 100644
--- a/src/data/things/index.js
+++ b/src/data/things/index.js
@@ -216,6 +216,27 @@ function evaluateSerializeDescriptors() {
   });
 }
 
+function finalizeYamlDocumentSpecs() {
+  return descriptorAggregateHelper({
+    message: `Errors finalizing Thing YAML document specs`,
+
+    op(constructor) {
+      const superclass = Object.getPrototypeOf(constructor);
+      if (
+        constructor[Thing.yamlDocumentSpec] &&
+        superclass[Thing.yamlDocumentSpec]
+      ) {
+        constructor[Thing.yamlDocumentSpec] =
+          Thing.extendDocumentSpec(superclass, constructor[Thing.yamlDocumentSpec]);
+      }
+    },
+
+    showFailedClasses(failedClasses) {
+      logError`Failed to finalize YAML document specs for classes: ${failedClasses.join(', ')}`;
+    },
+  });
+}
+
 function finalizeCacheableObjectPrototypes() {
   return descriptorAggregateHelper({
     message: `Errors finalizing Thing class prototypes`,
@@ -230,19 +251,14 @@ function finalizeCacheableObjectPrototypes() {
   });
 }
 
-if (!errorDuplicateClassNames())
-  process.exit(1);
+if (!errorDuplicateClassNames()) process.exit(1);
 
 flattenClassLists();
 
-if (!evaluatePropertyDescriptors())
-  process.exit(1);
-
-if (!evaluateSerializeDescriptors())
-  process.exit(1);
-
-if (!finalizeCacheableObjectPrototypes())
-  process.exit(1);
+if (!evaluatePropertyDescriptors()) process.exit(1);
+if (!evaluateSerializeDescriptors()) process.exit(1);
+if (!finalizeYamlDocumentSpecs()) process.exit(1);
+if (!finalizeCacheableObjectPrototypes()) process.exit(1);
 
 Object.assign(allClasses, {Thing});