Compare commits

...

6 commits

Author SHA1 Message Date
FrankS
f72c1c163a
Expose cljs.core/Cons in SCI config (#142)
This allows (instance? cljs.core/Cons x) to work in Scittle code.

The Cons type exists in the compiled ClojureScript runtime but was not
exposed by name in SCI's symbol table. Libraries like Trove need this
for type checking in their const-form? function.
2025-12-09 22:11:25 +01:00
Peter Strömberg
93cb7874bf
Enable customizing the nrepl websocket port (#141)
* Enable customizing the nrepl websocket port

* Fixes #140

* Update changelog
2025-12-05 23:07:09 +01:00
Kyle Passarelli
c449f55a9b
Fix attribution in README (#139) 2025-11-18 17:35:19 +01:00
Michiel Borkent
a9b58a3c82 scittle name by Alessandra 2025-11-15 08:59:18 -05:00
Jeroen van Dijk
5b3a3acb54
Enable source maps (#138)
* Enable source maps

* Update changelog
2025-10-08 15:18:10 +02:00
Michiel Borkent
4ec8026b51 links 2025-09-13 20:17:08 +02:00
15 changed files with 68 additions and 47 deletions

View file

@ -9,6 +9,9 @@
<!-- - Create Github release with updated links from `doc/links.md` --> <!-- - Create Github release with updated links from `doc/links.md` -->
<!-- - `bb gh-pages` --> <!-- - `bb gh-pages` -->
- [#114](https://github.com/babashka/scittle/issues/114): Enable source maps ([@jeroenvandijk](https://github.com/jeroenvandijk))
- [#140](https://github.com/babashka/scittle/issues/140): Enable customizing the nrepl websocket port ([@PEZ](https://github.com/PEZ))
## v0.7.28 (2025-09-13) ## v0.7.28 (2025-09-13)
- [#137](https://github.com/babashka/scittle/issues/137): fix JS interop with reserved JS keyword (incorrectly munged) by bumping SCI - [#137](https://github.com/babashka/scittle/issues/137): fix JS interop with reserved JS keyword (incorrectly munged) by bumping SCI

View file

@ -50,6 +50,7 @@ release Updates Github pages with new release build.
## Credits ## Credits
Idea by Arne Brasseur a.k.a [plexus](https://github.com/plexus). Idea by Arne Brasseur a.k.a [plexus](https://github.com/plexus).
Name by Alessandra Sierra (the name occurs first in [this](https://stuartsierra.com/2019/12/21/clojure-start-time-in-2019/) blog post).
## License ## License

View file

@ -90,20 +90,20 @@ To create a new NPM release:
- Prepare version `package.json`, except patch (if anything should change here) - Prepare version `package.json`, except patch (if anything should change here)
- Run `bb npm-publish`: this will compile, bump patch version, create tag and and push to npm and Github - Run `bb npm-publish`: this will compile, bump patch version, create tag and and push to npm and Github
- `bb replace-version 0.6.16 0.7.27` - `bb replace-version 0.6.16 0.7.28`
- Create Github release with updated links from `doc/links.md` - Create Github release with updated links from `doc/links.md`
- `bb gh-pages` - `bb gh-pages`
<!-- To upgrade examples: --> <!-- To upgrade examples: -->
<!-- ``` --> <!-- ``` -->
<!-- rg '0.0.1' --files-with-matches | xargs sed -i '' 's/0.0.7.27.1.0/g' --> <!-- rg '0.0.1' --files-with-matches | xargs sed -i '' 's/0.0.7.28.1.0/g' -->
<!-- bb release --> <!-- bb release -->
<!-- cd gh-pages --> <!-- cd gh-pages -->
<!-- git checkout -b v0.7.27 --> <!-- git checkout -b v0.7.28 -->
<!-- git push --set-upstream origin v0.7.27 --> <!-- git push --set-upstream origin v0.7.28 -->
<!-- git checkout gh-pages --> <!-- git checkout gh-pages -->
<!-- cd .. --> <!-- cd .. -->
<!-- ``` --> <!-- ``` -->
<!-- Then make a new release on Github with the `v0.7.27` tag. --> <!-- Then make a new release on Github with the `v0.7.28` tag. -->

View file

@ -1,6 +1,6 @@
# Loading JS libraries # Loading JS libraries
Since `v0.7.27` scittle allows to load libraries from the global enviroment. Since `v0.7.28` scittle allows to load libraries from the global enviroment.
This means you can load a library in a `<script>` tag and use it via `:require` in scittle. This means you can load a library in a `<script>` tag and use it via `:require` in scittle.
An example: An example:
@ -8,7 +8,7 @@ An example:
``` html ``` html
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script src="https://cdn.jsdelivr.net/npm/js-confetti@latest/dist/js-confetti.browser.js"></script> <script src="https://cdn.jsdelivr.net/npm/js-confetti@latest/dist/js-confetti.browser.js"></script>
<script type="application/x-scittle"> <script type="application/x-scittle">
(require '["JSConfetti" :as confetti]) (require '["JSConfetti" :as confetti])
@ -31,7 +31,7 @@ can then load ES modules, attach them to the global object and manually invoke
``` html ``` html
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script>scittle.core.disable_auto_eval()</script> <script>scittle.core.disable_auto_eval()</script>
<script type="module"> <script type="module">
import confetti from "https://esm.sh/canvas-confetti@1.6.0" import confetti from "https://esm.sh/canvas-confetti@1.6.0"

View file

@ -1,20 +1,20 @@
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js-interop.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js-interop.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.cljs-ajax.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.cljs-ajax.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.reagent.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.reagent.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.re-frame.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.re-frame.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.replicant.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.replicant.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.promesa.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.promesa.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.pprint.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.pprint.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.nrepl.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.nrepl.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.js-interop.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.js-interop.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.cljs-ajax.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.cljs-ajax.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.reagent.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.reagent.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.re-frame.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.re-frame.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.replicant.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.replicant.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.promesa.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.promesa.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.pprint.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.pprint.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.nrepl.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.nrepl.js
https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/dev/scittle.cljs-devtools.js https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.cljs-devtools.js

View file

@ -21,7 +21,7 @@ the normal routine:
``` html ``` html
<script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script> <script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.nrepl.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.nrepl.js" type="application/javascript"></script>
``` ```
Also include the CLJS file that you want to evaluate with nREPL: Also include the CLJS file that you want to evaluate with nREPL:
@ -42,6 +42,16 @@ you should be able evaluate expressions in `playground.cljs`. See a demo
Note that the nREPL server connection stays alive even after the browser window Note that the nREPL server connection stays alive even after the browser window
refreshes. refreshes.
### Custom host address
By default, the browser will connect to a websocket on the same host as it is loaded
from, using `window.location.hostname`. If you need something else you can specify
that setting the window variable `SCITTLE_NREPL_WEBSOCKET_HOST` like so:
``` html
<script>var SCITTLE_NREPL_WEBSOCKET_HOST = 'localhost';</script>
```
### CIDER ### CIDER
Choose `cider-connect-cljs`, select port `1339`, followed by the `nbb` REPL Choose `cider-connect-cljs`, select port `1339`, followed by the `nbb` REPL

View file

@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script> <script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.nrepl.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.nrepl.js" type="application/javascript"></script>
<script type="application/x-scittle" src="playground.cljs"></script> <script type="application/x-scittle" src="playground.cljs"></script>
</head> </head>
<body> <body>

View file

@ -1,13 +1,13 @@
<html> <html>
<head> <head>
<script async src="https://ga.jspm.io/npm:es-module-shims@1.6.1/dist/es-module-shims.js"></script> <script async src="https://ga.jspm.io/npm:es-module-shims@1.6.1/dist/es-module-shims.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js"></script>
<script>scittle.core.disable_auto_eval();</script> <script>scittle.core.disable_auto_eval();</script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.reagent.js"> </script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.reagent.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.re-frame.js"> </script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.re-frame.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.promesa.js"> </script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.promesa.js"> </script>
<script type="importmap"> <script type="importmap">
{ {

View file

@ -1,7 +1,7 @@
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.cljs-ajax.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.cljs-ajax.js" type="application/javascript"></script>
<script type="application/x-scittle"> <script type="application/x-scittle">
(require '[ajax.core :refer [GET]]) (require '[ajax.core :refer [GET]])

View file

@ -1,6 +1,6 @@
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script type="application/x-scittle"> <script type="application/x-scittle">
(defn my-alert [] (defn my-alert []
(js/alert "You clicked!")) (js/alert "You clicked!"))

View file

@ -1,9 +1,9 @@
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.27/dist/scittle.reagent.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.reagent.js" type="application/javascript"></script>
<script type="application/x-scittle"> <script type="application/x-scittle">
(require '[reagent.core :as r] (require '[reagent.core :as r]
'[reagent.dom :as rdom]) '[reagent.dom :as rdom])

View file

@ -87,7 +87,7 @@
To embed scittle in your website, it is recommended to use the links To embed scittle in your website, it is recommended to use the links
published to published to
the <a href="https://github.com/babashka/scittle/releases/tag/v0.7.27">releases the <a href="https://github.com/babashka/scittle/releases/tag/v0.7.28">releases
page</a>. page</a>.
Include <tt>scittle.js</tt> and write a <tt>script</tt> tag Include <tt>scittle.js</tt> and write a <tt>script</tt> tag

View file

@ -6,10 +6,13 @@
:builds :builds
{:main {:main
{;; for dev build {;:compiler-options {:source-map true}
#_#_:compiler-options {:optimizations :simple ;; for dev build
:pretty-print true #_#_
:pseudo-names true} :compiler-options {:optimizations :simple
:pretty-print true
:pseudo-names true
:source-map true}
:target :browser :target :browser
:js-options :js-options
{:resolve {"react" {:target :global {:resolve {"react" {:target :global
@ -37,4 +40,5 @@
:depends-on #{:scittle}}} :depends-on #{:scittle}}}
:build-hooks [(shadow.cljs.build-report/hook)] :build-hooks [(shadow.cljs.build-report/hook)]
:output-dir "resources/public/js" ;; + "/dev" for dev build :output-dir "resources/public/js" ;; + "/dev" for dev build
:devtools {:repl-pprint true}}}} :devtools {:repl-pprint true}
}}}

View file

@ -44,7 +44,8 @@
'NaN? (sci/copy-var NaN? cljns) 'NaN? (sci/copy-var NaN? cljns)
'infinite? (sci/copy-var infinite? cljns) 'infinite? (sci/copy-var infinite? cljns)
'iteration (sci/copy-var iteration cljns) 'iteration (sci/copy-var iteration cljns)
'abs (sci/copy-var abs cljns)} 'abs (sci/copy-var abs cljns)
'Cons cljs.core/Cons}
'goog.object {'set gobject/set 'goog.object {'set gobject/set
'get gobject/get} 'get gobject/get}
'goog.string {'format gstring/format 'goog.string {'format gstring/format

View file

@ -8,7 +8,9 @@
(when-let [ws-port (.-SCITTLE_NREPL_WEBSOCKET_PORT js/window)] (when-let [ws-port (.-SCITTLE_NREPL_WEBSOCKET_PORT js/window)]
(set! (.-ws_nrepl js/window) (set! (.-ws_nrepl js/window)
(new js/WebSocket (ws-url (.-hostname (.-location js/window)) ws-port "_nrepl")))) (new js/WebSocket (ws-url (or (.-SCITTLE_NREPL_WEBSOCKET_HOST js/window)
(.-hostname (.-location js/window)))
ws-port "_nrepl"))))
(when-let [ws (nrepl-server/nrepl-websocket)] (when-let [ws (nrepl-server/nrepl-websocket)]
(set! (.-onmessage ws) (set! (.-onmessage ws)