-
Notifications
You must be signed in to change notification settings - Fork 6
/
api.cljs
32 lines (29 loc) · 1.26 KB
/
api.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
(ns axel-f.api
(:require [axel-f.excel :as excel]))
(defn ^:export compile [formula-str]
(try
(let [f (excel/compile formula-str)]
(fn [ctx]
(try
(clj->js (f (js->clj ctx)))
(catch ExceptionInfo e
(throw (js/Error. (js/JSON.stringify (clj->js
{:message (.-message e)
:data (ex-data e)}))))))))
(catch ExceptionInfo e
(throw (js/Error. (js/JSON.stringify (clj->js
{:message (.-message e)
:data (ex-data e)})))))))
(defn ^:export context [formula]
(try
(let [{:keys [free-variables]} (meta (if (fn? formula)
formula
(excel/compile formula)))]
(clj->js free-variables))
(catch ExceptionInfo e
(throw (js/Error. (js/JSON.stringify (clj->js
{:message (.-message e)
:data (ex-data e)})))))))
(defn ^:export autocomplete [incomplete-formula context]
(let [context (js->clj context)]
(clj->js (excel/suggestions incomplete-formula context))))