UNPKG

@elliottcable/bs-cmdliner

Version:

Cmdliner — Declarative definition of command line interfaces for OCaml

674 lines (633 loc) 20 kB
'use strict'; var Sys = require("bs-platform/lib/js/sys.js"); var List = require("bs-platform/lib/js/list.js"); var $$Array = require("bs-platform/lib/js/array.js"); var Block = require("bs-platform/lib/js/block.js"); var Curry = require("bs-platform/lib/js/curry.js"); var Format = require("bs-platform/lib/js/format.js"); var Caml_obj = require("bs-platform/lib/js/caml_obj.js"); var Caml_sys = require("bs-platform/lib/js/caml_sys.js"); var Printexc = require("bs-platform/lib/js/printexc.js"); var Pervasives = require("bs-platform/lib/js/pervasives.js"); var Caml_option = require("bs-platform/lib/js/caml_option.js"); var Caml_string = require("bs-platform/lib/js/caml_string.js"); var Cmdliner_arg = require("./cmdliner_arg.bs.js"); var Cmdliner_msg = require("./cmdliner_msg.bs.js"); var Cmdliner_base = require("./cmdliner_base.bs.js"); var Cmdliner_info = require("./cmdliner_info.bs.js"); var Cmdliner_term = require("./cmdliner_term.bs.js"); var Cmdliner_trie = require("./cmdliner_trie.bs.js"); var Cmdliner_cline = require("./cmdliner_cline.bs.js"); var Cmdliner_docgen = require("./cmdliner_docgen.bs.js"); var Cmdliner_manpage = require("./cmdliner_manpage.bs.js"); var Cmdliner_suggest = require("./cmdliner_suggest.bs.js"); var Caml_js_exceptions = require("bs-platform/lib/js/caml_js_exceptions.js"); var Caml_builtin_exceptions = require("bs-platform/lib/js/caml_builtin_exceptions.js"); function ret(param) { var v = param[1]; return /* tuple */[ param[0], (function (ei, cl) { var e = Curry._2(v, ei, cl); if (e.tag) { return e; } else { var err = e[0]; if (err[0] >= 106380200) { return /* Error */Block.__(1, [err]); } else { return /* Ok */Block.__(0, [err[1]]); } } }) ]; } function term_result($staropt$star, param) { var v = param[1]; var usage = $staropt$star !== undefined ? $staropt$star : false; return /* tuple */[ param[0], (function (ei, cl) { var e = Curry._2(v, ei, cl); if (e.tag) { return e; } else { var ok = e[0]; if (ok.tag) { return /* Error */Block.__(1, [/* `Error */[ 106380200, /* tuple */[ usage, ok[0][1] ] ]]); } else { return ok; } } }) ]; } function cli_parse_result(param) { var v = param[1]; return /* tuple */[ param[0], (function (ei, cl) { var e = Curry._2(v, ei, cl); if (e.tag) { return e; } else { var ok = e[0]; if (ok.tag) { return /* Error */Block.__(1, [/* `Parse */[ -796721133, ok[0][1] ]]); } else { return ok; } } }) ]; } var main_name_000 = Cmdliner_info.Args[/* empty */0]; function main_name_001(ei, param) { return /* Ok */Block.__(0, [Cmdliner_info.term_name(Cmdliner_info.eval_main(ei))]); } var main_name = /* tuple */[ main_name_000, main_name_001 ]; var choice_name = Cmdliner_info.term_name; var choice_names_000 = Cmdliner_info.Args[/* empty */0]; function choice_names_001(ei, param) { return /* Ok */Block.__(0, [List.rev_map(choice_name, Cmdliner_info.eval_choices(ei))]); } var choice_names = /* tuple */[ choice_names_000, choice_names_001 ]; var default_error_exits_000 = Cmdliner_info.exit(undefined, "on command line parsing errors.", undefined, 124); var default_error_exits_001 = /* :: */[ Cmdliner_info.exit(undefined, "on unexpected internal errors (bugs).", undefined, 125), /* [] */0 ]; var default_error_exits = /* :: */[ default_error_exits_000, default_error_exits_001 ]; var default_exits_000 = Cmdliner_info.exit(undefined, "on success.", undefined, 0); var default_exits = /* :: */[ default_exits_000, default_error_exits ]; var partial_arg = Caml_option.some(Cmdliner_info.Args[/* empty */0]); function info(param, param$1, param$2, param$3, param$4, param$5, param$6, param$7, param$8) { return Cmdliner_info.term(partial_arg, param, param$1, param$2, param$3, param$4, param$5, param$6, param$7, param$8); } var name = Cmdliner_info.term_name; function err_multi_cmd_def(name, param, param$1) { return Cmdliner_base.err_multi_def("command", name, Cmdliner_info.term_doc, param[0], param$1[0]); } function add_stdopts(ei) { var docs = Cmdliner_info.term_stdopts_docs(Cmdliner_info.eval_term(ei)); var match = Cmdliner_info.term_version(Cmdliner_info.eval_main(ei)); var match$1; if (match !== undefined) { var vers = Cmdliner_arg.stdopt_version(docs); match$1 = /* tuple */[ vers[0], vers ]; } else { match$1 = /* tuple */[ Cmdliner_info.Args[/* empty */0], undefined ]; } var help = Cmdliner_arg.stdopt_help(docs); var args = Curry._2(Cmdliner_info.Args[/* union */6], match$1[0], help[0]); var term = Cmdliner_info.term_add_args(Cmdliner_info.eval_term(ei), args); return /* tuple */[ help, match$1[1], Cmdliner_info.eval_with_term(ei, term) ]; } function run($$catch, ei, cl, f) { try { return Curry._2(f, ei, cl); } catch (raw_exn){ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); if ($$catch) { var bt = Printexc.get_raw_backtrace(/* () */0); return /* Error */Block.__(1, [/* `Exn */[ 3458171, /* tuple */[ exn, bt ] ]]); } else { throw exn; } } } function try_eval_stdopts($$catch, ei, cl, help, version) { var err = run($$catch, ei, cl, help[1]); if (err.tag) { return err; } else { var match = err[0]; if (match !== undefined) { return /* Error */Block.__(1, [/* `Std_help */[ -689884355, match ]]); } else if (version !== undefined) { var err$1 = run($$catch, ei, cl, version[1]); if (err$1.tag) { return err$1; } else if (err$1[0]) { return /* Error */Block.__(1, [/* Std_version */114449436]); } else { return undefined; } } else { return undefined; } } } function term_eval($$catch, ei, f, args) { var match = add_stdopts(ei); var ei$1 = match[2]; var version = match[1]; var help = match[0]; var term_args = Cmdliner_info.term_args(Cmdliner_info.eval_term(ei$1)); var match$1 = Cmdliner_cline.create(undefined, term_args, args); var res; if (match$1.tag) { var match$2 = match$1[0]; var match$3 = try_eval_stdopts($$catch, ei$1, match$2[1], help, version); res = match$3 !== undefined ? match$3 : /* Error */Block.__(1, [/* `Error */[ 106380200, /* tuple */[ true, match$2[0] ] ]]); } else { var cl = match$1[0]; var match$4 = try_eval_stdopts($$catch, ei$1, cl, help, version); res = match$4 !== undefined ? match$4 : run($$catch, ei$1, cl, f); } return /* tuple */[ ei$1, res ]; } function do_help(help_ppf, err_ppf, ei, fmt, cmd) { var ei$1; if (cmd !== undefined) { var cmd$1 = cmd; try { var is_cmd = function (t) { return Cmdliner_info.term_name(t) === cmd$1; }; var cmd$2 = List.find(is_cmd, Cmdliner_info.eval_choices(ei)); ei$1 = Cmdliner_info.eval_with_term(ei, cmd$2); } catch (exn){ if (exn === Caml_builtin_exceptions.not_found) { ei$1 = Pervasives.invalid_arg("Term error, help requested for unknown command " + cmd$1); } else { throw exn; } } } else { ei$1 = Cmdliner_info.eval_with_term(ei, Cmdliner_info.eval_main(ei)); } var match = add_stdopts(ei$1); return Cmdliner_docgen.pp_man(err_ppf, fmt, help_ppf, match[2]); } function do_result(help_ppf, err_ppf, ei, param) { if (param.tag) { var res = param[0]; if (typeof res === "number") { Cmdliner_msg.pp_version(help_ppf, ei); return /* Version */-901574920; } else { var variant = res[0]; if (variant !== -689884355) { if (variant >= 106380200) { if (variant >= 803495649) { var match = res[1]; do_help(help_ppf, err_ppf, ei, match[0], match[1]); return /* Help */803495649; } else { var match$1 = res[1]; var err = match$1[1]; if (match$1[0]) { Cmdliner_msg.pp_err_usage(err_ppf, ei, err); } else { Cmdliner_msg.pp_err(err_ppf, ei, err); } return /* `Error */[ 106380200, /* Term */936571788 ]; } } else if (variant >= 3458171) { var match$2 = res[1]; Cmdliner_msg.pp_backtrace(err_ppf, ei, match$2[0], match$2[1]); return /* `Error */[ 106380200, /* Exn */3458171 ]; } else { Cmdliner_msg.pp_err_usage(err_ppf, ei, res[1]); return /* `Error */[ 106380200, /* Parse */-796721133 ]; } } else { Cmdliner_docgen.pp_man(err_ppf, res[1], help_ppf, ei); return /* Help */803495649; } } } else { return /* `Ok */[ 17724, param[0] ]; } } function env_default(v) { try { return Caml_sys.caml_sys_getenv(v); } catch (exn){ if (exn === Caml_builtin_exceptions.not_found) { return undefined; } else { throw exn; } } } function remove_exec(argv) { try { return List.tl($$Array.to_list(argv)); } catch (raw_exn){ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); if (exn[0] === Caml_builtin_exceptions.failure) { return Pervasives.invalid_arg("argv array must have at least one element"); } else { throw exn; } } } function $$eval($staropt$star, $staropt$star$1, $staropt$star$2, $staropt$star$3, $staropt$star$4, param) { var match = param[0]; var help_ppf = $staropt$star !== undefined ? Caml_option.valFromOption($staropt$star) : Format.std_formatter; var err_ppf = $staropt$star$1 !== undefined ? Caml_option.valFromOption($staropt$star$1) : Format.err_formatter; var $$catch = $staropt$star$2 !== undefined ? $staropt$star$2 : true; var env = $staropt$star$3 !== undefined ? $staropt$star$3 : env_default; var argv = $staropt$star$4 !== undefined ? $staropt$star$4 : Sys.argv; var term = Cmdliner_info.term_add_args(param[1], match[0]); var ei = Cmdliner_info.$$eval(term, term, /* [] */0, env); var args = remove_exec(argv); var match$1 = term_eval($$catch, ei, match[1], args); return do_result(help_ppf, err_ppf, match$1[0], match$1[1]); } function choose_term(main, choices, args) { if (args) { var maybe = args[0]; if (maybe.length > 1 && Caml_string.get(maybe, 0) === /* "-" */45) { return /* Ok */Block.__(0, [/* tuple */[ main, args ]]); } else { var add = function (acc, c) { var name = Cmdliner_info.term_name(c[0]); var match = Cmdliner_trie.add(acc, name, c); if (match[0] >= 3901504) { return match[1]; } else { return Pervasives.invalid_arg(err_multi_cmd_def(name, c, match[1][0])); } }; var index = List.fold_left(add, Cmdliner_trie.empty, choices); var match = Cmdliner_trie.find(index, maybe); if (typeof match === "number") { if (match >= -328798100) { var ambs = Cmdliner_trie.ambiguities(index, maybe); var ambs$1 = List.sort(Caml_obj.caml_compare, ambs); return /* Error */Block.__(1, [Cmdliner_base.err_ambiguous("command", maybe, ambs$1)]); } else { var all = Cmdliner_trie.ambiguities(index, ""); var hints = Cmdliner_suggest.value(maybe, all); return /* Error */Block.__(1, [Cmdliner_base.err_unknown(hints, "command", maybe)]); } } else { return /* Ok */Block.__(0, [/* tuple */[ match[1], args[1] ]]); } } } else { return /* Ok */Block.__(0, [/* tuple */[ main, /* [] */0 ]]); } } function eval_choice($staropt$star, $staropt$star$1, $staropt$star$2, $staropt$star$3, $staropt$star$4, main, choices) { var help_ppf = $staropt$star !== undefined ? Caml_option.valFromOption($staropt$star) : Format.std_formatter; var err_ppf = $staropt$star$1 !== undefined ? Caml_option.valFromOption($staropt$star$1) : Format.err_formatter; var $$catch = $staropt$star$2 !== undefined ? $staropt$star$2 : true; var env = $staropt$star$3 !== undefined ? $staropt$star$3 : env_default; var argv = $staropt$star$4 !== undefined ? $staropt$star$4 : Sys.argv; var to_term_f = function (param) { var match = param[0]; return /* tuple */[ Cmdliner_info.term_add_args(param[1], match[0]), match[1] ]; }; var choices_f = List.rev_map(to_term_f, choices); var main_f = to_term_f(main); var choices$1 = List.rev_map((function (prim) { return prim[0]; }), choices_f); var main$1 = main_f[0]; var match = choose_term(main_f, choices_f, remove_exec(argv)); if (match.tag) { var ei = Cmdliner_info.$$eval(main$1, main$1, choices$1, env); Cmdliner_msg.pp_err_usage(err_ppf, ei, match[0]); return /* `Error */[ 106380200, /* Parse */-796721133 ]; } else { var match$1 = match[0]; var match$2 = match$1[0]; var ei$1 = Cmdliner_info.$$eval(match$2[0], main$1, choices$1, env); var match$3 = term_eval($$catch, ei$1, match$2[1], match$1[1]); return do_result(help_ppf, err_ppf, match$3[0], match$3[1]); } } function eval_peek_opts($staropt$star, $staropt$star$1, $staropt$star$2, param) { var version_opt = $staropt$star !== undefined ? $staropt$star : false; var env = $staropt$star$1 !== undefined ? $staropt$star$1 : env_default; var argv = $staropt$star$2 !== undefined ? $staropt$star$2 : Sys.argv; var version = version_opt ? "dummy" : undefined; var term = Cmdliner_info.term(Caml_option.some(param[0]), undefined, undefined, undefined, undefined, undefined, undefined, undefined, version, "dummy"); var ei = Cmdliner_info.$$eval(term, term, /* [] */0, env); var ei$1 = ei; var f = param[1]; var args = remove_exec(argv); var match = add_stdopts(ei$1); var ei$2 = match[2]; var version$1 = match[1]; var help = match[0]; var term_args = Cmdliner_info.term_args(Cmdliner_info.eval_term(ei$2)); var match$1 = Cmdliner_cline.create(true, term_args, args); var match$2; if (match$1.tag) { var match$3 = match$1[0]; var match$4 = try_eval_stdopts(true, ei$2, match$3[1], help, version$1); match$2 = match$4 !== undefined ? /* tuple */[ undefined, match$4 ] : /* tuple */[ undefined, /* Error */Block.__(1, [/* `Error */[ 106380200, /* tuple */[ true, match$3[0] ] ]]) ]; } else { var cl = match$1[0]; var ret = run(true, ei$2, cl, f); var v; v = ret.tag ? undefined : Caml_option.some(ret[0]); var match$5 = try_eval_stdopts(true, ei$2, cl, help, version$1); match$2 = match$5 !== undefined ? /* tuple */[ v, match$5 ] : /* tuple */[ v, ret ]; } var ret$1 = match$2[1]; var ret$2; if (ret$1.tag) { var match$6 = ret$1[0]; if (typeof match$6 === "number") { ret$2 = /* Version */-901574920; } else { var variant = match$6[0]; ret$2 = variant !== 3458171 ? ( variant !== 106380200 ? ( variant >= -796721132 ? /* Help */803495649 : /* `Error */[ 106380200, /* Parse */-796721133 ] ) : /* `Error */[ 106380200, /* Term */936571788 ] ) : /* `Error */[ 106380200, /* Exn */3458171 ]; } } else { ret$2 = /* `Ok */[ 17724, ret$1[0] ]; } return /* tuple */[ match$2[0], ret$2 ]; } function exit_status_of_result($staropt$star, param) { var term_err = $staropt$star !== undefined ? $staropt$star : 1; if (typeof param === "number" || param[0] < 106380200) { return 0; } else { var match = param[1]; if (match !== 3458171) { if (match >= 936571788) { return term_err; } else { return 124; } } else { return 125; } } } function exit_status_of_status_result(term_err, r) { if (typeof r === "number" || r[0] !== 17724) { return exit_status_of_result(term_err, r); } else { return r[1]; } } function exit(term_err, r) { return Pervasives.exit(exit_status_of_result(term_err, r)); } function exit_status(term_err, r) { return Pervasives.exit(exit_status_of_status_result(term_err, r)); } var Manpage = [ Cmdliner_manpage.$$escape, Cmdliner_manpage.s_name, Cmdliner_manpage.s_synopsis, Cmdliner_manpage.s_description, Cmdliner_manpage.s_commands, Cmdliner_manpage.s_arguments, Cmdliner_manpage.s_options, Cmdliner_manpage.s_common_options, Cmdliner_manpage.s_exit_status, Cmdliner_manpage.s_environment, Cmdliner_manpage.s_environment_intro, Cmdliner_manpage.s_files, Cmdliner_manpage.s_bugs, Cmdliner_manpage.s_examples, Cmdliner_manpage.s_authors, Cmdliner_manpage.s_see_also, Cmdliner_manpage.print ]; var Term = [ Cmdliner_term.$$const, Cmdliner_term.$$const, Cmdliner_arg.man_format, Cmdliner_term.app, Cmdliner_term.app, ret, term_result, cli_parse_result, main_name, choice_names, Cmdliner_info.exit, default_exits, default_error_exits, Cmdliner_info.env, info, name, $$eval, eval_choice, eval_peek_opts, 0, 124, 125, exit_status_of_result, exit_status_of_status_result, exit, exit_status ]; var Arg = [ Cmdliner_arg.conv, Cmdliner_arg.pconv, Cmdliner_arg.conv_parser, Cmdliner_arg.conv_printer, Cmdliner_arg.conv_docv, Cmdliner_arg.parser_of_kind_of_string, Cmdliner_arg.some, Cmdliner_arg.env_var, Cmdliner_arg.info, Cmdliner_arg.$unknown, Cmdliner_arg.flag, Cmdliner_arg.flag_all, Cmdliner_arg.vflag, Cmdliner_arg.vflag_all, Cmdliner_arg.opt, Cmdliner_arg.opt_all, Cmdliner_arg.pos, Cmdliner_arg.pos_all, Cmdliner_arg.pos_left, Cmdliner_arg.pos_right, Cmdliner_arg.value, Cmdliner_arg.required, Cmdliner_arg.non_empty, Cmdliner_arg.last, Cmdliner_arg.man_format, Cmdliner_arg.bool, Cmdliner_arg.$$char, Cmdliner_arg.$$int, Cmdliner_arg.nativeint, Cmdliner_arg.int32, Cmdliner_arg.int64, Cmdliner_arg.$$float, Cmdliner_arg.string, Cmdliner_arg.$$enum, Cmdliner_arg.file, Cmdliner_arg.dir, Cmdliner_arg.non_dir_file, Cmdliner_arg.list, Cmdliner_arg.array, Cmdliner_arg.pair, Cmdliner_arg.t2, Cmdliner_arg.t3, Cmdliner_arg.t4, Cmdliner_arg.doc_quote, Cmdliner_arg.doc_alts, Cmdliner_arg.doc_alts_enum ]; exports.Manpage = Manpage; exports.Term = Term; exports.Arg = Arg; /* default_error_exits Not a pure module */