« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/thing/structures.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/thing/structures.js')
-rw-r--r--src/thing/structures.js17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/thing/structures.js b/src/thing/structures.js
new file mode 100644
index 00000000..e6b9fd4b
--- /dev/null
+++ b/src/thing/structures.js
@@ -0,0 +1,17 @@
+// Generic structure utilities common across various Thing types.
+
+export function validateReference(type = '') {
+    return ref => {
+        if (typeof ref !== 'string')
+            throw new TypeError(`Expected a string, got ${ref}`);
+
+        if (type) {
+            if (!ref.includes(':'))
+                throw new TypeError(`Expected ref to begin with "${type}:", but no type specified (ref: ${ref})`);
+
+            const typePart = ref.split(':')[0];
+            if (typePart !== type)
+                throw new TypeError(`Expected ref to begin with "${type}:", got "${typePart}:" (ref: ${ref})`);
+        }
+    };
+}