« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/data/checks.js3
-rw-r--r--src/data/things/Track.js28
-rw-r--r--src/find.js40
3 files changed, 34 insertions, 37 deletions
diff --git a/src/data/checks.js b/src/data/checks.js
index 6909f011..f8a04178 100644
--- a/src/data/checks.js
+++ b/src/data/checks.js
@@ -4,6 +4,7 @@ import {inspect as nodeInspect} from 'node:util';
 import {colors, ENABLE_COLOR} from '#cli';
 
 import CacheableObject from '#cacheable-object';
+import {nativeGetMatchableDirectories} from '#find';
 import {replacerSpec, parseContentNodes} from '#replacer';
 import {compareArrays, cut, cutStart, empty, getNestedProp, iterateMultiline}
   from '#sugar';
@@ -56,7 +57,7 @@ export function reportDirectoryErrors(wikiData, {
 
       const directories =
         (findSpec.getMatchableDirectories
-          ? findSpec.getMatchableDirectories(thing)
+          ? findSpec.getMatchableDirectories(thing, nativeGetMatchableDirectories)
           : [thing.directory]);
 
       for (const directory of directories) {
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index 6fc38e5d..a368a15b 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -1273,13 +1273,7 @@ export class Track extends Thing {
   static [Thing.findSpecs] = {
     track: {
       referenceTypes: ['track'],
-
       bindTo: 'trackData',
-
-      getMatchableNames: track =>
-        (track.nameForReferencingAcrossWiki
-          ? [track.nameForReferencingAcrossWiki]
-          : []),
     },
 
     trackMainReleasesOnly: {
@@ -1288,11 +1282,6 @@ export class Track extends Thing {
 
       include: track =>
         !CacheableObject.getUpdateValue(track, 'mainRelease'),
-
-      getMatchableNames: track =>
-        (track.nameForReferencingAcrossWiki
-          ? [track.nameForReferencingAcrossWiki]
-          : []),
     },
 
     trackReference: {
@@ -1350,12 +1339,6 @@ export class Track extends Thing {
 
       include: track =>
         track.hasUniqueCoverArt,
-
-      // This is an acontextual reference.
-      getMatchableNames: track =>
-        (track.referenceByDirectory === 'normally'
-          ? [track.name]
-          : []),
     },
 
     trackPrimaryArtwork: {
@@ -1374,14 +1357,11 @@ export class Track extends Thing {
         artwork.thing.isTrack &&
         artwork === artwork.thing.trackArtworks[0],
 
-      // This is an acontextual reference.
-      getMatchableNames: ({thing: track}) =>
-        (track.referenceByDirectory === 'normally'
-          ? [track.name]
-          : []),
+      getMatchableNames: (artwork, nativeGetMatchableNames) =>
+        nativeGetMatchableNames(artwork.thing),
 
-      getMatchableDirectories: ({thing: track}) =>
-        [track.directory],
+      getMatchableDirectories: (artwork, nativeGetMatchableDirectory) =>
+        nativeGetMatchableDirectory(artwork.thing),
     },
   };
 
diff --git a/src/find.js b/src/find.js
index ddd6ae05..6436532a 100644
--- a/src/find.js
+++ b/src/find.js
@@ -58,13 +58,25 @@ export function fuzzName(name, fuzz = {}) {
   return name;
 }
 
+export function nativeGetMatchableNames(thing, _nativeGetMatchableNames) {
+  if (thing.nameForReferencingAcrossWiki === null) {
+    return [];
+  }
+
+  if (thing.nameForReferencingAcrossWiki) {
+    return [thing.nameForReferencingAcrossWiki];
+  }
+
+  if (thing.name) {
+    return [thing.name];
+  }
+
+  return [];
+}
+
 export function processAvailableMatchesByName(data, fuzz, {
   include = _thing => true,
-
-  getMatchableNames = thing =>
-    (thing.constructor.hasPropertyDescriptor('name')
-      ? [thing.name]
-      : []),
+  getMatchableNames = nativeGetMatchableNames,
 
   results = Object.create(null),
   multipleNameMatches = Object.create(null),
@@ -72,7 +84,7 @@ export function processAvailableMatchesByName(data, fuzz, {
   for (const thing of data) {
     if (!include(thing)) continue;
 
-    for (const name of getMatchableNames(thing)) {
+    for (const name of getMatchableNames(thing, nativeGetMatchableNames)) {
       if (typeof name !== 'string') {
         logWarn`Unexpected ${typeAppearance(name)} returned in names for ${inspect(thing)}`;
         continue;
@@ -99,20 +111,24 @@ export function processAvailableMatchesByName(data, fuzz, {
   return {results, multipleNameMatches};
 }
 
+export function nativeGetMatchableDirectories(thing, _nativeGetMatchableDirectories) {
+  if (thing.directory) {
+    return [thing.directory];
+  } else {
+    return [];
+  }
+}
+
 export function processAvailableMatchesByDirectory(data, {
   include = _thing => true,
-
-  getMatchableDirectories = thing =>
-    (thing.constructor.hasPropertyDescriptor('directory')
-      ? [thing.directory]
-      : [null]),
+  getMatchableDirectories = nativeGetMatchableDirectories,
 
   results = Object.create(null),
 }) {
   for (const thing of data) {
     if (!include(thing, thingConstructors)) continue;
 
-    for (const directory of getMatchableDirectories(thing)) {
+    for (const directory of getMatchableDirectories(thing, nativeGetMatchableDirectories)) {
       if (typeof directory !== 'string') {
         logWarn`Unexpected ${typeAppearance(directory)} returned in directories for ${inspect(thing)}`;
         continue;