« 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/yaml.js12
-rw-r--r--src/validators.js33
2 files changed, 42 insertions, 3 deletions
diff --git a/src/data/yaml.js b/src/data/yaml.js
index 15d7b0ba..f8591311 100644
--- a/src/data/yaml.js
+++ b/src/data/yaml.js
@@ -751,12 +751,22 @@ export function parseURLs(entries) {
 
     if (typeof item !== 'string') return item;
 
-    const match = item.match(extractAccentRegex);
+    let bypassValidation, restOfItem;
+    if (item.endsWith(' (URL OK!!)')) {
+      bypassValidation = true;
+      restOfItem = item.slice(0, -' (URL OK!!)'.length);
+    } else {
+      bypassValidation = false;
+      restOfItem = item;
+    }
+
+    const match = restOfItem.match(extractAccentRegex);
     if (!match) return item;
 
     return {
       url: match.groups.main,
       annotation: match.groups.accent,
+      bypassValidation,
     };
   });
 }
diff --git a/src/validators.js b/src/validators.js
index 28f3cef7..8f32e669 100644
--- a/src/validators.js
+++ b/src/validators.js
@@ -839,10 +839,39 @@ export const validateURLEntry = (isURL) =>
   });
 
 export const isURLEntry =
-  validateURLEntry(isURL);
+  validateProperties({
+    url: isURL,
+    annotation: optional(isStringNonEmpty),
+  });
 
 export const isCuratedURLEntry =
-  validateURLEntry(isCuratedURL);
+  (() => {
+    const commonProperties = {
+      annotation: optional(isStringNonEmpty),
+    };
+
+    const pickyValidator =
+      validateProperties({
+        url: isCuratedURL,
+        ...commonProperties,
+        bypassValidation: optional(is(false)),
+      });
+
+    const niceysValidator =
+      validateProperties({
+        url: isURL,
+        ...commonProperties,
+        bypassValidation: is(true),
+      });
+
+    return value => {
+      if (typeof value === 'object' && value.bypassValidation) {
+        return niceysValidator(value);
+      } else {
+        return pickyValidator(value);
+      }
+    };
+  })();
 
 export const isURLList =
   validateArrayItems(isURLEntry);