babashka.cliauto-coerce- Auto-coercessto datacoerce- Coerce stringsusingfdispatch- Subcommand dispatcher.format-optsformat-tablemerge-opts- Merges babashka CLI options.number-char?opts->tablepadpad-cellsparse-args- Same asparse-optsbut separates parsed opts into:optsand addsparse-cmds- Parses sub-commands (arguments not starting with an option prefix) and returns aparse-keyword- Parse keyword fromsparse-opts- Parse the command line argumentsargs, a seq of strings.rowsspec->opts- Converts spec into opts format
babashka.cli.exec
(auto-coerce s)Auto-coerces s to data. Does not coerce when s is not a string.
If s:
- is
trueorfalse, it is coerced as boolean - starts with number, it is coerced as a number (through
edn/read-string) - starts with
:, it is coerced as a keyword (throughparse-keyword)
source
(coerce s f)Coerce string s using f. Does not coerce when s is not a string.
f may be a keyword (:boolean, :int, :double, :symbol,
:keyword) or a function. When f return nil, this is
interpreted as a parse failure and throws.
source
(dispatch table args)
(dispatch table args opts)Subcommand dispatcher.
Dispatches on longest matching command entry in table by matching
subcommands to the :cmds vector and invoking the correspondig :fn.
Table is in the form:
[{:cmds ["sub_1" .. "sub_n"] :fn f :args->opts [:lib]}
...
{:cmds [] :fn f}]When a match is found, :fn called with the return value of
parse-args applied to args enhanced with:
:dispatch- the matching commands:args- concatenation of unparsed commands and args:rest-cmds: DEPRECATED, this will be removed in a future version
Use an empty :cmds vector to always match or to provide global options.
Provide an :error-fn to deal with non-matches.
Each entry in the table may have additional parse-args options.
For more information and examples, see README.md.
source
(format-opts {:as cfg, :keys [indent], :or {indent 2}})(format-table {:keys [rows indent], :or {indent 2}})(merge-opts m & ms)Merges babashka CLI options.
source
(number-char? c)(opts->table {:keys [spec order]})(pad len s)(pad-cells rows)(parse-args args)
(parse-args args opts)Same as parse-opts but separates parsed opts into :opts and adds
:cmds and :rest-args on the top level instead of metadata.
source
(parse-cmds args)
(parse-cmds args {:keys [no-keyword-opts]})Parses sub-commands (arguments not starting with an option prefix) and returns a map with:
:cmds- The parsed subcommands:args- The remaining (unparsed) arguments
source
(parse-keyword s)Parse keyword from s. Ignores leading :.
source
(parse-opts args)
(parse-opts args opts)Parse the command line arguments args, a seq of strings.
Instead of a leading : either -- or - may be used as well.
Return value: a map with parsed opts.
Additional data such as arguments (not corresponding to any options)
are available under the :org.babashka/cli key in the metadata.
Supported options:
:coerce- a map of option (keyword) names to type keywords (optionally wrapped in a collection.):alias- a map of short names to long names.:spec- a spec of options. See spec.:restrict-trueor coll of keys. Throw on first parsed option not in set of keys or keys of:specand:coercecombined.:require- a coll of options that are required. See require.:validate- a map of validator functions. See validate.:exec-args- a map of default args. Will be overridden by args specified inargs.:no-keyword-opts-true. Support only--foo-style opts (i.e.:foowill not work).:repeated-opts-true. Forces writing the option name for every value, e.g.--foo a --foo b, rather than--foo a b:args->opts- consume unparsed commands and args as options:collect- a map of collection fns. See custom collection handling.
Examples:
(parse-opts ["foo" ":bar" "1"])
;; => {:bar "1", :org.babashka/cli {:cmds ["foo"]}}
(parse-opts [":b" "1"] {:aliases {:b :bar} :coerce {:bar parse-long}})
;; => {:bar 1}
(parse-opts ["--baz" "--qux"] {:spec {:baz {:desc "Baz"}} :restrict true})
;; => throws 'Unknown option --qux' exception b/c there is no :qux key in the spec(spec->opts spec)
(spec->opts spec {:keys [exec-args]})Converts spec into opts format. Pass existing opts as optional second argument.
source
(-main & args)Main entrypoint for command line usage. Expects a namespace and var name followed by zero or more key value pair arguments that will be parsed and passed to the var. If the first argument is map-shaped, it is read as an EDN map containing parse instructions.
Example when used as a clojure CLI alias:
clojure -M:exec clojure.core prn :a 1 :b 2
;;=> {:a "1" :b "2"}(main & args)