Squint: Light-weight ClojureScript dialect
- #592: fix
clj->js
to not process custom classes
- #585: fix
clj->js
to realize lazy seqs into arrays
- #586: support extending protocol to
nil
- Fix #572: prevent vite page reload
- Fix watcher and compiler not overriding
squint.edn
configurations with command line options, take 2
- Fix watcher and compiler not overriding
squint.edn
configurations with command line options.
- Fix watcher not being called
- Allow passing
--extension
and--paths
via CLI
- Fix #563: prioritize refer over core built-in
- Update
chokidar
to v4 which reduces the number of dependencies
- BREAKING: Dynamic CSS in
#html
must now be explicitly passed as map literal:(let [m {:color :green}] #html [:div {:style {:& m}}])
. Fixes issue when usinglit-html
in combination withclassMap
. See demo
- #556: fix referring to var in other namespace via global object in REPL mode
- Pass
--repl
opts towatch
subcommand in CLI
- #552: fix REPL output with hyphen in ns name
- #542: fix
run
on Windows
- #536: HTML is not escaped in dynamic expression
- #537: Fix
not
: wrap argument in parens - Return interop expression in function body
- Prefer value from props map over explicit value
#html
improvements, support:&
for spreading props
- #517: Preserve state over REPL evals
- #513: Fix
shuffle
core function random distribution and performances - #517: Fix re-definition of class with
defclass
in REPL - #522: fix
nil
#html
rendering issue
- #509: Optimization: use arrow fn for implicit IIFE when possible
- Optimization: emit
const
in let expressions, which esbuild optimizes better
- Don't wrap arrow function in parens, see this issue
- Fix #499: add support for emitting arrow functions with
^:=>
metadata
- Fix #505: Support
:rename
in:require
- Fix #490: render css maps in html mode
- Fix #502: allow method names in
defclass
to override squint built-ins
- Fix #496: don't wrap strings in another set of quotes
- Fix rendering of attribute expressions in HTML (should be wrapped in quotes)
- Compile destructured function args to JS destructuring when annotated with
^:js
. This benefits working with vitest and playwright.
- #481: BREAKING, squint no longer automatically copies all non-compiled files to the
:output-dir
. This behavior is now explicit with:copy-resources
, see docs.
- Add new
#html
reader for producing HTML literals using hiccup. See docs and playground example. - #483: Fix operator precedence problem
- Add
simple-benchmark
- #468: Keywords in JSX should render with hyphens
- #466: Fix
doseq
expression withset!
in function return position
- #458: don't emit
null
in statement position
- #455: don't export non-public vars
- Fix infix operator in return position
- Allow playground to use JSX in non-REPL mode
- Add transducer arity to all existing core functions
- Support
^:gen
+js-yield
+js-yield*
to write JS generator functions. See playground - Add
update-keys
andupdate-vals
- Add
=
as reified function
- #449: fix issue with
:refer
- Add
memoize
,filter
transducer arity,peek
,pop
- Export classes defined with
defclass
- Support
^:async
Object method indefclass
- Better support for pragmas and JSDoc via
js*
+//
and/* */
- Add
rem
,nnext
,str/end-with?
,str/index-of
andstr/last-index-of
- Fix alias with hypen in REPL mode
- Keep top level strings and comments (via
js*
) before imports (for JSDoc, Next.js"use client"
, etc)
- Fix
compileString
in JS API
- Optimization: sort largest set first for
set/union
, and smallest first forset/intersection
- Add
sorted-set
,long
,abs
,keep-indexed
transducer arity
- The
children
function intree-seq
may returnnil
- Add
clojure.set/join
- Add
tree-seq
,flatten
,seq?
andsequential?
- Add
clojure.set
functionsselect
,rename-keys
,rename
,project
, andmap-invert
(@PEZ) - Fix
reduce-kv
withjs/Map
input
- Add more
clojure.set
functions:difference
,union
,subset?
, andsuperset?
(@PEZ)
- Let any object that has
Symbol.iterable
be destructureable even if it is notinstance of Object
- Initial version of
clojure.set
- #418: Add
reductions
- Add
bit-shift-left
and morebit-
related macros - Fix
not
with respect to truthiness - Fix
reduce
without initial value + empty coll, it should callf()
- Add serve-playground bb task
- Update playground with button for creating a blank AOC playground
- #407: fix conditional rendering
- Add
not-empty
- Fix
into
+ set + xform
- More helpful error from JS when using unresolved symbol in REPL mode
- Allow
>
,<
etc to be used as HOFs - Fix
str/split
with respect to trailing empty split elements
- Fix vararg functions in REPL mode
- #394: add
int
- #393:
Math
can be used withoutjs/
prefix - Expose compiler state via
compileStringEx
for playground, preserves namespace transitions
- Restore backward compatibility with code that is compiled with older versions of squint
- Optimize various outputs for smaller size
- Add
js-in
- Support
into
+xform
- Support
sort
on strings
- #386: allow expression in value position in map literal
- Improvements with respect to laziness in
mapcat
andconcat
- Do not array mutate argument in
reverse
- Escape JSX attribute vector value (and more)
map
+transduce
support- Fix
for
in REPL mode - Throw when object is not iterable in
for
- Make next lazy when input is lazy
- Fix playground shim (fixes issue in older versions of Safari)
- Add
js-mod
andquot
- #380: Don't emit space in between
#jsx
tags - Add
re-find
- Add
condp
macro
- Use
compare
as default compare function insort
(which fixes numerical sorting)
- Allow
assoc!
to be called on arbitrary classes (regression)
- Improve
get
to callget
method when present.
- False alarm, I was playing the pinball game in low power mode on my mobile 🤦
- Revert truthiness checks via funcall, negative impact on performance with pinball game on mobile
- Allow keywords and collections to be used as functions in HOFs
- Make filter, etc aware of truthiness
- Reduce code size for truthiness checks
- Add
str/split-lines
- Add
partition-by
- Add
parse-long
- Add
sort-by
- Fix top level await
- Support multiple dimensions in
aset
- Add
coercive-=
as alias for==
- Add
js-delete
- Fix
min-key
andmax-key
and improve tests
- Add
min-key
andmax-key
- Fix
defonce
in REPL-mode
- Fix
doseq
andfor
when binding name clashes with core var
- No-op release to hopefully fix caching issue with jspm
- Several REPL improvements
- Improve https://squint-cljs.github.io/squint/
- Allow alias name to be used as object in REPL mode
- Copy resources when using
squint compile
orsquint watch
- Return map when
select-keys
is called withnil
- nREPL server: print values through
cljs.pprint
(@PEZ)
- Initial (incomplete!) nREPL server on Node.js:
npx squint nrepl-server :port 1888
- Update/refactor threejs example
- #360:
assoc-in!
should not mutate objects in the middle if they already exist - Evaluate
lazy-seq
body just once - Avoid stackoverflow with
min
andmax
- #360: fix assoc-in! with immutable objects in the middle
- Add
mod
,object?
- Optimize
get
- Add threejs example
- #357: fix version in help text
- Fix iterating over objects
- Add
clojure.string
'striml
,trimr
,replace
- Fix
examples/vite-react
by addingpublic/index.html
- Add
find
,bounded-count
,boolean?
,merge-with
,meta
,with-meta
,int?
,ex-message
,ex-cause
,ex-info
- Fix munging of reserved symbols in function arguments
- #347: Add
:pre
and:post
support infn
- Add
number?
- Support
docstring
indef
- Handle multipe source
:paths
in a more robust fashion
- #344: macros can't be used via aliases
- Add
squint.edn
support, see docs - Add
watch
subcommand to watch:paths
fromsquint.edn
- Make generated
let
variable names in JS more deterministic, which helps hot reloading in React - Added a vite + react example project.
- Resolve symbolic namespaces
(:require [foo.bar])
from:paths
- Add
bit-and
andbit-or
- Include
lib/squint.core.umd.js
which defines a globalsquint.core
object (easy to use in browsers, see docs)
- Add
subs
,fn?
,re-seq
- Add
squint.edn
with:paths
to resolve macros from (via:require-macros
)
- Fix
and
andor
with respect to CLJS truthiness
- Respect CLJS truth semantics: only
null
,undefined
andfalse
are non-truthy,0
and""
are truthy. - Fix
dotimes
squint repl
improvements
- Do not resolve binding in
catch
to core var - Fix reading
.cljc
files - Allow passing JS object as opts in JavaScript API's
compileString
- Fix
instance?
in return position to-array
,str/starts-with?
- Support next on non-arrays
- Add
compare
- Fix
into-array
- Add
into-array
,some-fn
,keep-indexed
- Fix for
lazy-seq
when body returnsnil
- Add
max
,min
,every-pred
- Add
reduce-kv
- #320: fix overriding core vars
- Add
rand-nth
,aclone
,add-watch
,remove-watch
- #288: support
defclass
. See doc/defclass.md. - #312: implement doall and dorun
- Drop cherry core from NPM package (cruft from porting cherry to squint)
- Fix compilation of empty list
- Fix
and
andor
without arguments - #308:
doseq
in return position emits invalid code
- Add
js-obj
- Add
for
anddoseq
(@lilactown)
- #289: support
:as
alias with hyphen in namespace require libspec
- #286: make dissoc work with multiple keys
- #284: fix undefined keys/values when passing objects and maps to conj
- #274: fix logic precedence by wrapping in parens
Add preliminary Node.js API in node.js
- Support
{:& more :foo :bar}
syntax in JSX to spread the more map into the props, inspired by helix
- Add
zero?
pos?
andneg?
core functions
- Fix
boolean
core function export
- Escape boolean in JSX attribute
- Add
boolean
core function
- Fix
+
symbol import by bumping shadow-cljs - Move
@babel/preset-react
dependency to dev dependency
- Fix async/await + variadiac arguments
- Fix namespaced component in JSX
- Change default extension back to
.mjs
. Use--extension js
to change this to.js
.
- Fix rendering of number attributes in JSX
- Support
--extension
option to set extension for JS files - Change default extension from
.mjs
to.js