diff --git a/package.json b/package.json index 3fdaa95c53..4401a74045 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "emoji-mart": "^5.5.2", "fs": "0.0.1-security", "fs-extra": "^11.3.0", - "fuse.js": "6.4.6", + "fuse.js": "7.1.0", "grapheme-splitter": "1.0.4", "graphology": "0.20.0", "hnswlib-wasm": "^0.8.2", diff --git a/src/main/frontend/worker/search.cljs b/src/main/frontend/worker/search.cljs index 1f9399db7e..a261084c7d 100644 --- a/src/main/frontend/worker/search.cljs +++ b/src/main/frontend/worker/search.cljs @@ -16,7 +16,10 @@ [logseq.graph-parser.text :as text] [missionary.core :as m])) -(def fuse (aget Fuse "default")) +(def fuse + ;; Fuse 6 exposed the constructor on `default`, while Fuse 7's CJS path returns + ;; the constructor directly. + (or (aget Fuse "default") Fuse)) ;; TODO: use sqlite for fuzzy search ;; maybe https://github.com/nalgeon/sqlean/blob/main/docs/fuzzy.md? diff --git a/src/test/frontend/worker/search_test.cljs b/src/test/frontend/worker/search_test.cljs index 50fa52d22f..e2df433eac 100644 --- a/src/test/frontend/worker/search_test.cljs +++ b/src/test/frontend/worker/search_test.cljs @@ -200,3 +200,20 @@ result (#'search/search-blocks-aux (checking-db) sql "a/" "%a/%" "page-1" 10)] (is (some? result)) (is (empty? result))))) + +(deftest fuse-constructor-interop + (testing "Fuse constructor remains usable for build/search/add/remove across export shapes" + (let [ctor search/fuse + indice (ctor. (clj->js [{:id "1" :title "alpha beta"}]) + (clj->js {:keys ["title"] + :shouldSort true + :tokenize true + :distance 1024 + :threshold 0.5 + :minMatchCharLength 1}))] + (.add indice (clj->js {:id "2" :title "gamma"})) + (.remove indice (fn [page] (= "2" (aget page "id")))) + (let [result (js->clj (.search indice "alpha" (clj->js {:limit 5})) :keywordize-keys true)] + (is (some? ctor)) + (is (= 1 (count result))) + (is (= "alpha beta" (get-in result [0 :item :title]))))))) diff --git a/yarn.lock b/yarn.lock index 3d4e322788..251550dd76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4366,10 +4366,10 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -fuse.js@6.4.6: - version "6.4.6" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79" - integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw== +fuse.js@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.1.0.tgz#306228b4befeee11e05b027087c2744158527d09" + integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== gauge@^3.0.0: version "3.0.2"