(ns foo
(:require [npm-lib$SubLib :as sub-lib :refer [...]]))
06 April 2021
ClojureScript Team
We’re happy to announce a new release of ClojureScript. If you’re an existing user of ClojureScript please read over the following release notes carefully.
Closure Compiler has been updated to v20210302
Closure Library has been updated to 0.0-20201211-3e6c510d
Note that the latest Closure Library release includes breaking changes that may impact your code:
goog.debug.Logger.Level has been renamed to goog.Logger.Level and the
goog.log.Level/getLogger function now takes an additional argument.
The following JavaScript type checking predicates have been removed:
goog/isString, goog/isArray, goog/isFunction, goog/isNumber, and
goog/isBoolean.
Closure namespace loading logic has been revised, necessitating updates to some REPLs.
When consuming a JavaScript library which is exposed as a JavaScript
object, you can now specify a property of this object to be used as a
first-class namespace in ClojureScript. To do this, you use the $ delimiter.
For example, the SubLib property of a library object provided by npm-lib
can be treated as a namespace like so:
(ns foo
(:require [npm-lib$SubLib :as sub-lib :refer [...]]))
If needed, you can also employ string-based requires:
(ns foo
(:require ["@npm/lib$SubLib" :as sub-lib :refer [...]]))
This feature can also be used to access default exports:
(ns foo
(:require [npm-lib$default :as npm-lib :refer [...]]))
The $ delimiter is only needed to access the top-level object property;
any nested properties are accessed via . as in the following example:
(ns foo
(:require [react-native$NativeModules.SomeBridge :as woz]))
cljs.testInstead of inaccurately inferring file name and line numbers from the call stack
in do-report, they are now captured during macro-expansion based on metadata.
sort and sort-by retain metaThis simple change makes sort and sort-by consistent with Clojure. For example,
the following evaluates to {:a true}:
(meta (sort (with-meta (range 10) {:a true})))
The code generated to implement map destructuring was optimized by introducing a shared helper to handle kw-args, reducing a portion of the Closure-optimized output from 35 bytes down to 5, a nice savings since map destructuring is frequently employed in code.
For a complete list of updates in ClojureScript 1.10.844 see Changes.