Skip to content

Commit

Permalink
bugfix sci-cljs loader
Browse files Browse the repository at this point in the history
  • Loading branch information
awb99 committed Apr 22, 2024
1 parent 06492b7 commit 8983852
Show file tree
Hide file tree
Showing 19 changed files with 163 additions and 28 deletions.
5 changes: 2 additions & 3 deletions demo/deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
"target/webly"]
:deps {org.pinkgorilla/goldly {:local/root ".." :deps/manifest :deps}
org.pinkgorilla/webly {:mvn/version "0.5.683"}
org.pinkgorilla/ui-repl {:mvn/version "0.1.104"}
org.pinkgorilla/ui-repl {:mvn/version "0.1.105"}
org.pinkgorilla/ui-site {:mvn/version "0.0.30"}
org.pinkgorilla/ui-binaryclock {:mvn/version "0.2.19"}
;org.pinkgorilla/ui-input {:mvn/version "0.2.44"} ; spaces
org.pinkgorilla/ui-binaryclock {:mvn/version "0.2.20"}
org.pinkgorilla/ui-tailwind {:mvn/version "0.1.8"}
;org.pinkgorilla/devtools {:mvn/version "0.0.17"}
}
Expand Down
4 changes: 3 additions & 1 deletion demo/resources/ext/pages.edn
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
"scicompile" demo.page.sci-compile/sci-compile-page
"lazy" demo.page.lazy/lazy-page
"kernel" demo.page.kernel/kernel-page
"error" demo.page.error/error-page}
"error" demo.page.error/error-page
"sci-interpreted" demo.page.scipage/sci-page
}

:sci-cljs-ns [demo.cljs-libs.helper]}
2 changes: 1 addition & 1 deletion demo/src/demo/cljs_libs/helper.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
{:text "lazyload-test" :dispatch [:bidi/goto 'demo.page.lazy/lazy-page]}
{:text "kernel" :dispatch [:bidi/goto 'demo.page.kernel/kernel-page]}
{:text "error-test" :dispatch [:bidi/goto 'demo.page.error/error-page]}
{:text "tick" :dispatch [:bidi/goto 'demo.page.tick/tick-page]}]}])
{:text "sci-interpreted" :dispatch [:bidi/goto 'demo.page.scipage/sci-page]}]}])

(defn wrap-layout [page]
(fn [route]
Expand Down
2 changes: 1 addition & 1 deletion demo/src/demo/page/main.cljs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(ns demo.page.main
(:require
[ui.binaryclock.clock :refer [binary-clock]]
[ui.binaryclock :refer [binary-clock]]
[demo.cljs-libs.helper :refer [wrap-layout]]))

(defn main-page1 [_route]
Expand Down
13 changes: 13 additions & 0 deletions demo/src/demo/page/scipage.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
(ns demo.page.scipage
(:require
[demo.cljs-libs.helper :refer [wrap-layout]]))


(defn sci-page1 [_r]
[:div
[:p "I am interpreted by sci"]
[:p "1 + 2 = " (+ 1 2)]
])

(def sci-page
(wrap-layout sci-page1))
2 changes: 1 addition & 1 deletion goldly-sci/deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
;"11.0.671" version 11 not yet supported
; https://github.com/babashka/sci.configs/blob/main/deps.edn
funcool/promesa {:mvn/version "11.0.674"}
cljs-http/cljs-http {:mvn/version "0.1.46"} ; cljs-sci source loader
org.babashka/sci {:mvn/version "0.8.40"}
cljs-ajax/cljs-ajax {:mvn/version "0.8.4"} ; sci code loading
org.pinkgorilla/ui-dialog-keybindings {:mvn/version "0.1.10"}
org.pinkgorilla/timbre {:mvn/version "0.0.6"}}

Expand Down
20 changes: 7 additions & 13 deletions goldly-sci/src/goldly/sci/loader/cljs_source_add.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,26 @@
[sci.async :as scia]
[goldly.sci.loader.cljs-source-load :refer [load-sci-cljs-code]]))

(defn valid-code? [{:keys [code] :as result}]
(and code
(not (clojure.string/blank? code))))

(defn add-sci-cljs-source [{:keys [ctx libname ns opts]}]
(debug "add-sci-cljs-source libname:" libname " ns: " ns "opts: " opts)
(let [r (p/deferred)
code-p (load-sci-cljs-code libname)
eval-p (-> code-p
(p/then (fn [code]
(scia/eval-string+ ctx code)))
(p/catch (fn [err]
(p/reject! r {:load-error (str "no sci-code for ns: " libname " err: " err)}))))]
eval-p (-> code-p
(p/then (fn [code]
(scia/eval-string+ ctx code)))
(p/catch (fn [err]
(p/reject! r {:load-error (str "no sci-code for ns: " libname " err: " err)}))))]
(-> eval-p
(p/then (fn [res]
(if (valid-code? res)
(let [{:keys [val ns]} res]
(let [{:keys [val ns]} res]
(info "sci-cljs compile result: " res)
(when-let [as (:as opts)]
;; import class in current namespace with reference to globally
;; registed class
(warn "registering as: " as "in ns: " ns " to:" (symbol libname))
(sci/add-import! ctx ns (symbol libname) (:as opts)))
(p/resolve! r {:handled false}))
(do (error "no sci-code received for ns: " libname)
(p/reject! r {:load-error (str "no sci-code for ns: " libname)})))))
(p/resolve! r {:handled false}))))
(p/catch (fn [e]
(error "compile error for: " libname " error: " e)
(p/reject! r (str "compile error for: " libname)))))
Expand Down
23 changes: 21 additions & 2 deletions goldly-sci/src/goldly/sci/loader/cljs_source_load.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,28 @@
(:require
[taoensso.timbre :as timbre :refer-macros [debug debugf info warn error]]
[clojure.string]
[promesa.core :as p]
[ajax.core :refer [GET]]
[webly.spa.mode :refer [get-mode get-resource-path]]))

(defn wrap-promise
; see in sci-configs ajax.promise
[AJAX-TYPE url params]
(p/create
(fn [resolve reject]
(AJAX-TYPE url
(merge params
{:handler (fn [response]
(info "sci source received successfully for url: " url)
(resolve response))
:error-handler (fn [error]
(error "sci source load error url: " url " error: " error)
(reject error))})))))

(defn GET-p [url]
(wrap-promise GET url {}))


(defn ns->filename [ns]
(-> ns
(clojure.string/replace #"\." "/")
Expand All @@ -29,6 +48,6 @@

(defn load-sci-cljs-code [libname]
; libname: bongo.trott ; the ns that gets compiled
(info "load-sci-cljs-code" "libname:" libname)
(let [url (-> libname str ns->url)]
(GET url)))
(info "load-sci-cljs-code" "libname:" libname " url: " url)
(GET-p url)))
4 changes: 2 additions & 2 deletions reval-sci/deps.edn
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{:paths ["src"
"resources" ; extension
]
:deps {org.pinkgorilla/reval {:mvn/version "0.6.151"}}
:deps {org.pinkgorilla/reval {:mvn/version "0.6.156"}}
;
}
}
8 changes: 4 additions & 4 deletions sci-configs/deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
funcool/promesa {:mvn/version "11.0.674"}
; reagent/reagent {:mvn/version "1.1.0"}
; re-frame/re-frame {:mvn/version "1.3.0"}

}

cljs-ajax/cljs-ajax {:mvn/version "0.8.4"} ; needed for re-frame/http-fx
}
;
}
}
32 changes: 32 additions & 0 deletions sci-configs/resources/demo/notebook/ajax.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
(ns demo.notebook.ajax
(:require
[clojure.edn :as edn]
[promesa.core :as p]
[ajax.promise :refer [GET]]))

(defn json-get [url]
(p/let [resp (js/fetch url)
json (.json resp)]
(js->clj json :keywordize-keys true)))

(defn edn-get [url]
(p/let [resp (GET url)
edn (edn/read-string resp)]
edn))

(json-get "/r/repl/bongo.json")

(edn-get "/r/repl/bongo.edn")

(def r (edn-get "/r/repl/bongo.edn"))

(type r)
(p/promise? r)

; not in sci-configs - ticket made.
(p/pending? r)
(p/resolved? r)
(p/done? r)
(p/extract r)
(deref r)
(println @r)
7 changes: 7 additions & 0 deletions sci-configs/resources/demo/notebook/clojure_edn.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(ns demo.notebook.clojure-edn
(:require
[clojure.edn :as edn]))

(def x (pr-str {:a 1 :b true :name "harry potter"}))

(edn/read-string x)
26 changes: 26 additions & 0 deletions sci-configs/resources/ext/ajax.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{:name "cljs-ajax"
; build
:lazy false
:cljs-namespace [ajax.core
ajax.promise]
:cljs-ns-bindings {'ajax.core {'GET ajax.core/GET
'POST ajax.core/POST
'PUT ajax.core/PUT
'DELETE ajax.core/DELETE
; request/response formats
'json-request-format ajax.core/json-request-format
'json-response-format ajax.core/json-response-format
'transit-request-format ajax.core/transit-request-format
'transit-response-format ajax.core/transit-response-format
'ring-response-format ajax.core/ring-response-format
'url-request-format ajax.core/url-request-format
'text-request-format ajax.core/text-request-format
'text-response-format ajax.core/text-response-format
; There's no raw-request-format because it's handled by the DirectSubmission code
'raw-response-format ajax.core/raw-response-format}
'ajax.promise {'GET ajax.promise/GET
'POST ajax.promise/POST
'PUT ajax.promise/PUT
'DELETE ajax.promise/DELETE}

}}
6 changes: 6 additions & 0 deletions sci-configs/resources/ext/clojure-edn.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{:name "clojure.edn"
; build
:lazy false
:cljs-namespace [clojure.edn]
:cljs-ns-bindings {'clojure.edn {'read-string clojure.edn/read-string
'read clojure.edn/read}}}
2 changes: 2 additions & 0 deletions sci-configs/resources/public/repl/bongo.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{:bongo "trott"
:a 1}
3 changes: 3 additions & 0 deletions sci-configs/resources/public/repl/bongo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{"name":"John",
"age":30,
"city":"New York"}
1 change: 1 addition & 0 deletions sci-configs/resources/public/repl/bongo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
the grass is greener on the other side!
31 changes: 31 additions & 0 deletions sci-configs/src/ajax/promise.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
(ns ajax.promise
(:require
[promesa.core :as p]
[ajax.core :as ajax]))

(defn wrap-promise
[AJAX-TYPE url params]
(p/create
(fn [resolve reject]
(AJAX-TYPE url
(merge params
{:handler (fn [response]
(resolve response))
:error-handler (fn [error]
(reject error))})))))

(defn GET
([url] (GET url {}))
([url params] (wrap-promise ajax/GET url params)))

(defn POST
([url] (POST url {}))
([url params] (wrap-promise ajax/POST url params)))

(defn PUT
([url] (PUT url {}))
([url params] (wrap-promise ajax/PUT url params)))

(defn DELETE
([url] (DELETE url {}))
([url params] (wrap-promise ajax/DELETE url params)))
File renamed without changes.

0 comments on commit 8983852

Please sign in to comment.