« get me outta code hell

data-checks, sugar: factor out getNestedProp - 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>2024-02-16 16:11:13 -0400
committer(quasar) nebula <qznebula@protonmail.com>2024-02-17 17:09:18 -0400
commitb7debd668d03b2236cea1b0291acb8efc6f3ee0d (patch)
tree6a3825d7d489b9f9d41d1e579090c4994cd2395a
parent74ded573b9e24b120573a3f5319de7501b17a759 (diff)
data-checks, sugar: factor out getNestedProp
-rw-r--r--src/data/checks.js9
-rw-r--r--src/util/sugar.js13
2 files changed, 13 insertions, 9 deletions
diff --git a/src/data/checks.js b/src/data/checks.js
index ad86087b..96f4cd8c 100644
--- a/src/data/checks.js
+++ b/src/data/checks.js
@@ -4,7 +4,7 @@ import {inspect as nodeInspect} from 'node:util';
 import {colors, ENABLE_COLOR} from '#cli';
 
 import CacheableObject from '#cacheable-object';
-import {compareArrays, empty} from '#sugar';
+import {compareArrays, empty, getNestedProp} from '#sugar';
 import Thing from '#thing';
 import thingConstructors from '#things';
 import {commentaryRegexCaseSensitive} from '#wiki-data';
@@ -167,13 +167,6 @@ export function filterReferenceErrors(wikiData, {
     }],
   ];
 
-  function getNestedProp(obj, key) {
-    const recursive = (o, k) =>
-      k.length === 1 ? o[k[0]] : recursive(o[k[0]], k.slice(1));
-    const keys = key.split(/(?<=(?<!\\)(?:\\\\)*)\./);
-    return recursive(obj, keys);
-  }
-
   const boundFind = bindFind(wikiData, {mode: 'error'});
 
   const findArtistOrAlias = artistRef => {
diff --git a/src/util/sugar.js b/src/util/sugar.js
index 58a2c3e9..3c364ee5 100644
--- a/src/util/sugar.js
+++ b/src/util/sugar.js
@@ -263,11 +263,22 @@ export function delay(ms) {
 // Stolen from here: https://stackoverflow.com/a/3561711
 //
 // There's a proposal for a native JS function like this, 8ut it's not even
-// past stage 1 yet: https://github.com/tc39/proposal-regex-escaping
+// past stage ~~1~~ 2 yet: https://github.com/tc39/proposal-regex-escaping
 export function escapeRegex(string) {
   return string.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
 }
 
+// Follows a key path like 'foo.bar.baz' to get an item nested deeply inside
+// an object.
+export function getNestedProp(obj, key) {
+  const recursive = (o, k) =>
+    (k.length === 1
+      ? o[k[0]]
+      : recursive(o[k[0]], k.slice(1)));
+
+  return recursive(obj, key.split(/(?<=(?<!\\)(?:\\\\)*)\./));
+}
+
 // Gets the "look" of some arbitrary value. It's like typeof, but smarter.
 // Don't use this for actually validating types - it's only suitable for
 // inclusion in error messages.