(defn
compile-str
"Compile ClojureScript source into JavaScript. The parameters:\n\n state (atom)\n the compiler state\n\n source (string)\n the ClojureScript source\n\n name (symbol or string)\n optional, the name of the source\n\n opts (map)\n compilation options.\n\n :eval - eval function to invoke, see *eval-fn*\n :load - library resolution function, see *load-fn*\n :source-map - set to true to generate inline source map information\n :def-emits-var - sets whether def (and derived) forms return either a Var\n (if set to true) or the def init value (if false). Default\n is false.\n :checked-arrays - if :warn or :error, checks inferred types and values passed\n to aget/aset. Logs for incorrect values if :warn, throws if\n :error. Defaults to false.\n :static-fns - employ static dispatch to specific function arities in\n emitted JavaScript, as opposed to making use of the\n `call` construct. Defaults to false.\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\n unknown functions, but instead direct invokes via\n `f(a0,a1...)`. Defaults to `false`.\n :target - use `:nodejs` if targeting Node.js. Takes no other options\n at the moment.\n :ns - optional, the namespace in which to evaluate the source.\n :verbose - optional, emit details from compiler activity. Defaults to\n false.\n :context - optional, sets the context for the source. Possible values\n are `:expr`, `:statement` and `:return`. Defaults to\n `:expr`.\n\n cb (function)\n callback, will be invoked with a map. If successful the map will contain\n a key :value with the compilation result (string). If unsuccessful the map\n will contain a key :error with an ex-info instance describing the cause\n of failure."
([state source cb] (compile-str state source nil cb))
([state source name cb] (compile-str state source name nil cb))
([state source name opts cb]
{:pre
[(atom? state)
(string? source)
(valid-name? name)
(valid-opts? opts)
(fn? cb)]}
(compile-str*
{:*compiler* state,
:*data-readers* tags/*cljs-data-readers*,
:*cljs-dep-set* ana/*cljs-dep-set*,
:*analyze-deps* (:analyze-deps opts true),
:*load-macros* (:load-macros opts true),
:*load-fn* (or (:load opts) *load-fn*),
:*eval-fn* (or (:eval opts) *eval-fn*),
:*sm-data* (when (:source-map opts) (sm-data))}
source
name
opts
cb)))