(ns computersandblues.lodestone.match (:require [applied-science.js-interop :as j])) (defn- ->regex "Does its best to compila a stirng into a regular expression; will fall back to return a RegExp that matches verbatim." [s] (try (js/RegExp. s "i") (catch js/Error _ (js/RegExp. (js/RegExp.escape s) "i")))) (defn query->tokens [query] (->> (re-seq #"\"([^\"]+)\"|([^\s]+)" query) (mapv (fn [[_ a b]] (or a b))))) (defn query->matching-fn [query] (let [match? (if query (partial re-find (->regex query)) (constantly true))] (fn [post] (or (match? (j/get post :content)) (match? (j/get-in post [:account :acct])) ; search for url + username of poster (some #(match? (j/get % :username)) (j/get post :mentions))))))