« get me outta code hell

search, client: write indexes to individual files - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/static/js/search-worker.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-05-13 12:09:14 -0300
committer(quasar) nebula <qznebula@protonmail.com>2024-05-31 12:11:53 -0300
commit782a498333782d5230ad29390690a94ebc333b13 (patch)
tree66f633ff80488325c26f155f7cb56de78e9f67b2 /src/static/js/search-worker.js
parentdb2ebb010aada0739773769cbaf3c34a9763c1fd (diff)
search, client: write indexes to individual files
Diffstat (limited to 'src/static/js/search-worker.js')
-rw-r--r--src/static/js/search-worker.js26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/static/js/search-worker.js b/src/static/js/search-worker.js
index a6ecd3ab..c3975380 100644
--- a/src/static/js/search-worker.js
+++ b/src/static/js/search-worker.js
@@ -6,7 +6,6 @@ import FlexSearch from '../lib/flexsearch/flexsearch.bundle.module.min.js';
 
 let status = null;
 let indexes = null;
-let searchData = null;
 
 onmessage = handleWindowMessage;
 postStatus('alive');
@@ -20,6 +19,10 @@ main().then(
     postStatus('setup-error');
   });
 
+function rebase(path) {
+  return `/search-data/` + path;
+}
+
 async function main() {
   indexes =
     withEntries(searchSpec, entries => entries
@@ -28,16 +31,25 @@ async function main() {
         makeSearchIndex(descriptor, {FlexSearch}),
       ]));
 
-  searchData =
-    await fetch('/search-data/index.json')
+  const indexData =
+    await fetch(rebase('index.json'))
       .then(resp => resp.json());
 
+  await Promise.all(
+    Object.entries(indexData)
+      .map(([key, _info]) =>
+        fetch(rebase(key + '.json'))
+          .then(res => res.json())
+          .then(data => {
+            importIndex(key, data);
+          })));
+}
+
+function importIndex(indexKey, indexData) {
   // If this fails, it's because an outdated index was cached.
   // TODO: If this fails, try again once with a cache busting url.
-  for (const [indexName, indexData] of Object.entries(searchData)) {
-    for (const [key, value] of Object.entries(indexData)) {
-      indexes[indexName].import(key, value);
-    }
+  for (const [key, value] of Object.entries(indexData)) {
+    indexes[indexKey].import(key, JSON.stringify(value));
   }
 }