« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/data/things/validators.js19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/data/things/validators.js b/src/data/things/validators.js
index f240c6ba..75358833 100644
--- a/src/data/things/validators.js
+++ b/src/data/things/validators.js
@@ -651,6 +651,10 @@ export function oneOf(...validators) {
   const validConstructors = new Set();
   const validTypes = new Set();
 
+  const constantValidators = [];
+  const constructorValidators = [];
+  const typeValidators = [];
+
   const leftoverValidators = [];
 
   for (const validator of validators) {
@@ -662,14 +666,18 @@ export function oneOf(...validators) {
         for (const value of creatorMeta.values) {
           validConstants.add(value);
         }
+
+        constantValidators.push(validator);
         break;
 
       case validateInstanceOf:
         validConstructors.add(creatorMeta.constructor);
+        constructorValidators.push(validator);
         break;
 
       case validateType:
         validTypes.add(creatorMeta.type);
+        typeValidators.push(validator);
         break;
 
       default:
@@ -725,7 +733,7 @@ export function oneOf(...validators) {
       const gotPart = `, got ${value}`;
 
       prefaceErrorInfo.push([
-        null,
+        constantValidators,
         offset++,
         new TypeError(
           `Expected one of ${constants.join(' ')}` + gotPart),
@@ -740,7 +748,7 @@ export function oneOf(...validators) {
       const gotPart = `, got ${gotType}`;
 
       prefaceErrorInfo.push([
-        null,
+        typeValidators,
         offset++,
         new TypeError(
           `Expected one of ${types.join(', ')}` + gotPart),
@@ -756,7 +764,7 @@ export function oneOf(...validators) {
       const gotPart = (gotName ? `, got ${gotName}` : ``);
 
       prefaceErrorInfo.push([
-        null,
+        constructorValidators,
         offset++,
         new TypeError(
           `Expected one of ${names.join(', ')}` + gotPart),
@@ -773,7 +781,10 @@ export function oneOf(...validators) {
           ? `(#${i + 1} "${validator.name}") ${error.message}`
           : `(#${i + 1}) ${error.message}`);
 
-      error.check = validator;
+      error.check =
+        (Array.isArray(validator) && validator.length === 1
+          ? validator[0]
+          : validator);
 
       errors.push(error);
     }