Export manually

This commit is contained in:
Michiel Borkent 2021-05-25 12:45:03 +02:00
parent 4f0bfa0d4c
commit 781d978384
3 changed files with 13 additions and 43 deletions

View file

@ -1,7 +1,6 @@
(ns sci.script-tag
(:refer-clojure :exclude [defn time])
(:require [clojure.core :as c]
[clojure.string :as str]
[goog.object :as gobject]
[goog.string]
[sci.core :as sci]))
@ -16,31 +15,11 @@
" msecs"))
ret#))
(c/defn export [k f]
(let [k (munge k)
parts (str/split k #"\.")]
(loop [parts parts
prev js/window]
(when-first [fpart parts]
(cond (= "user" fpart)
(recur (rest parts) prev)
(= 1 (count parts))
(gobject/set prev fpart f)
:else
(if-let [obj (gobject/get prev fpart)]
(recur (rest parts) obj)
(let [obj #js {}]
(gobject/set prev fpart obj)
(recur (rest parts)
obj))))))))
(def stns (sci/create-ns 'sci.script-tag nil))
(def cljns (sci/create-ns 'clojure.core nil))
(def namespaces
{'sci.script-tag
{'export (sci/copy-var export stns)}
'clojure.core
{'clojure.core
{'println (sci/copy-var println cljns)
'prn (sci/copy-var prn cljns)
'system-time (sci/copy-var system-time cljns)
@ -51,9 +30,7 @@
:allow :all}})))
(c/defn eval-string [s]
(sci/eval-string* @ctx
(str "(require '[sci.script-tag :refer :all])"
s)))
(sci/eval-string* @ctx s))
(c/defn register-plugin! [plug-in-name sci-opts]
plug-in-name ;; unused for now
@ -64,7 +41,7 @@
(disj 'user)))
(c/defn- load-contents [script-tags]
(if-let [tag (first script-tags)]
(when-let [tag (first script-tags)]
(if-let [text (not-empty (gobject/get tag "textContent"))]
(do (eval-string text)
(load-contents (rest script-tags)))
@ -76,17 +53,7 @@
(let [response (gobject/get this "response")]
(eval-string response))
(load-contents (rest script-tags)))))]
(.send req)))
(eval-string (str/replace"
(run! (fn [ns]
(let [nsn (ns-name ns)]
(when-not (contains? '%s nsn)
(run! (fn [var]
(let [m (meta var)]
(when (:export m)
(sci.script-tag/export (str nsn \".\" (:name m)) @var))))
(vals (ns-publics ns))))))
(all-ns))" "%s" built-in))))
(.send req)))))
(js/document.addEventListener
"DOMContentLoaded"