@elliottcable/bs-cmdliner
Version:
Cmdliner — Declarative definition of command line interfaces for OCaml
919 lines (844 loc) • 25.8 kB
JavaScript
;
var List = require("bs-platform/lib/js/list.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 Printf = require("bs-platform/lib/js/printf.js");
var Caml_obj = require("bs-platform/lib/js/caml_obj.js");
var Pervasives = require("bs-platform/lib/js/pervasives.js");
var Caml_option = require("bs-platform/lib/js/caml_option.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_cline = require("./cmdliner_cline.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 rev_compare(n0, n1) {
return Caml_obj.caml_compare(n1, n0);
}
var err_not_opt = "Option argument without name";
var err_not_pos = "Positional argument with a name";
function doc_alts_enum(quoted, $$enum) {
return Cmdliner_base.alts_str(quoted, List.map((function (prim) {
return prim[0];
}), $$enum));
}
function str_of_pp(pp, v) {
Curry._2(pp, Format.str_formatter, v);
return Format.flush_str_formatter(/* () */0);
}
function conv(docv, param) {
var parse = param[0];
var parse$1 = function (s) {
var match = Curry._1(parse, s);
if (match.tag) {
return /* `Error */[
106380200,
match[0][1]
];
} else {
return /* `Ok */[
17724,
match[0]
];
}
};
return /* tuple */[
parse$1,
param[1]
];
}
function pconv(docv, conv) {
return conv;
}
function conv_parser(param, s) {
var match = Curry._1(param[0], s);
if (match[0] >= 106380200) {
return /* Error */Block.__(1, [/* `Msg */[
3854881,
match[1]
]]);
} else {
return /* Ok */Block.__(0, [match[1]]);
}
}
function conv_printer(param) {
return param[1];
}
function conv_docv(param) {
return "VALUE";
}
function err_invalid(s, kind) {
return /* `Msg */[
3854881,
Curry._2(Printf.sprintf(/* Format */[
/* String_literal */Block.__(11, [
"invalid value '",
/* String */Block.__(2, [
/* No_padding */0,
/* String_literal */Block.__(11, [
"', expected ",
/* String */Block.__(2, [
/* No_padding */0,
/* End_of_format */0
])
])
])
]),
"invalid value '%s', expected %s"
]), s, kind)
];
}
function parser_of_kind_of_string(kind, k_of_string, s) {
var match = Curry._1(k_of_string, s);
if (match !== undefined) {
return /* Ok */Block.__(0, [Caml_option.valFromOption(match)]);
} else {
return /* Error */Block.__(1, [err_invalid(s, kind)]);
}
}
function $unknown(f, x) {
return Curry._1(f, x);
}
function parse_to_list(parser, s) {
var e = Curry._1(parser, s);
if (e[0] >= 106380200) {
return e;
} else {
return /* `Ok */[
17724,
/* :: */[
e[1],
/* [] */0
]
];
}
}
function try_env(ei, a, parse, absent) {
var match = Cmdliner_info.arg_env(a);
if (match !== undefined) {
var env = Caml_option.valFromOption(match);
var $$var = Cmdliner_info.env_var(env);
var match$1 = Cmdliner_info.eval_env_var(ei, $$var);
if (match$1 !== undefined) {
var match$2 = Curry._1(parse, match$1);
if (match$2[0] >= 106380200) {
var e = Cmdliner_msg.err_env_parse(env, match$2[1]);
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
e
]]);
} else {
return /* Ok */Block.__(0, [match$2[1]]);
}
} else {
return /* Ok */Block.__(0, [absent]);
}
} else {
return /* Ok */Block.__(0, [absent]);
}
}
var arg_to_args = Cmdliner_info.Args[/* singleton */4];
function list_to_args(f, l) {
var add = function (acc, v) {
return Curry._2(Cmdliner_info.Args[/* add */3], Curry._1(f, v), acc);
};
return List.fold_left(add, Cmdliner_info.Args[/* empty */0], l);
}
function flag(a) {
if (Cmdliner_info.arg_is_pos(a)) {
return Pervasives.invalid_arg(err_not_opt);
} else {
var convert = function (ei, cl) {
var match = Cmdliner_cline.opt_arg(cl, a);
if (match) {
var match$1 = match[0];
var match$2 = match$1[2];
var f = match$1[1];
var exit = 0;
if (match$2 !== undefined) {
if (match[1]) {
exit = 1;
} else {
var e = Cmdliner_msg.err_flag_value(f, match$2);
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
e
]]);
}
} else if (match[1]) {
exit = 1;
} else {
return /* Ok */Block.__(0, [true]);
}
if (exit === 1) {
var e$1 = Cmdliner_msg.err_opt_repeated(f, match[1][0][1]);
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
e$1
]]);
}
} else {
return try_env(ei, a, Cmdliner_base.env_bool_parse, false);
}
};
return /* tuple */[
Curry._1(arg_to_args, a),
convert
];
}
}
function flag_all(a) {
if (Cmdliner_info.arg_is_pos(a)) {
return Pervasives.invalid_arg(err_not_opt);
} else {
var a$1 = Cmdliner_info.arg_make_all_opts(a);
var convert = function (ei, cl) {
var l = Cmdliner_cline.opt_arg(cl, a$1);
if (l) {
try {
var truth = function (param) {
var v = param[2];
if (v !== undefined) {
return Pervasives.failwith(Cmdliner_msg.err_flag_value(param[1], v));
} else {
return true;
}
};
return /* Ok */Block.__(0, [List.rev_map(truth, l)]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === Caml_builtin_exceptions.failure) {
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
exn[1]
]]);
} else {
throw exn;
}
}
} else {
return try_env(ei, a$1, (function (param) {
return parse_to_list(Cmdliner_base.env_bool_parse, param);
}), /* [] */0);
}
};
return /* tuple */[
Curry._1(arg_to_args, a$1),
convert
];
}
}
function vflag(v, l) {
var convert = function (param, cl) {
var aux = function (_fv, _param) {
while(true) {
var param = _param;
var fv = _fv;
if (param) {
var rest = param[1];
var match = param[0];
var match$1 = Cmdliner_cline.opt_arg(cl, match[1]);
if (match$1) {
var match$2 = match$1[0];
var match$3 = match$2[2];
var f = match$2[1];
var exit = 0;
if (match$3 !== undefined) {
if (match$1[1]) {
exit = 1;
} else {
return Pervasives.failwith(Cmdliner_msg.err_flag_value(f, match$3));
}
} else if (match$1[1]) {
exit = 1;
} else if (fv !== undefined) {
return Pervasives.failwith(Cmdliner_msg.err_opt_repeated(fv[0], f));
} else {
_param = rest;
_fv = /* tuple */[
f,
match[0]
];
continue ;
}
if (exit === 1) {
return Pervasives.failwith(Cmdliner_msg.err_opt_repeated(match$1[1][0][1], f));
}
} else {
_param = rest;
continue ;
}
} else if (fv !== undefined) {
return fv[1];
} else {
return v;
}
};
};
try {
return /* Ok */Block.__(0, [aux(undefined, l)]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === Caml_builtin_exceptions.failure) {
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
exn[1]
]]);
} else {
throw exn;
}
}
};
var flag = function (param) {
var a = param[1];
if (Cmdliner_info.arg_is_pos(a)) {
return Pervasives.invalid_arg(err_not_opt);
} else {
return a;
}
};
return /* tuple */[
list_to_args(flag, l),
convert
];
}
function vflag_all(v, l) {
var convert = function (param, cl) {
var aux = function (_acc, _param) {
while(true) {
var param = _param;
var acc = _acc;
if (param) {
var rest = param[1];
var match = param[0];
var fv = match[0];
var l = Cmdliner_cline.opt_arg(cl, match[1]);
if (l) {
var fval = (function(fv){
return function fval(param) {
var v = param[2];
if (v !== undefined) {
return Pervasives.failwith(Cmdliner_msg.err_flag_value(param[1], v));
} else {
return /* tuple */[
param[0],
fv
];
}
}
}(fv));
_param = rest;
_acc = List.rev_append(List.rev_map(fval, l), acc);
continue ;
} else {
_param = rest;
continue ;
}
} else if (acc === /* [] */0) {
return v;
} else {
return List.rev_map((function (prim) {
return prim[1];
}), List.sort(rev_compare, acc));
}
};
};
try {
return /* Ok */Block.__(0, [aux(/* [] */0, l)]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === Caml_builtin_exceptions.failure) {
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
exn[1]
]]);
} else {
throw exn;
}
}
};
var flag = function (param) {
var a = param[1];
if (Cmdliner_info.arg_is_pos(a)) {
return Pervasives.invalid_arg(err_not_opt);
} else {
return Cmdliner_info.arg_make_all_opts(a);
}
};
return /* tuple */[
list_to_args(flag, l),
convert
];
}
function parse_opt_value(parse, f, v) {
var match = Curry._1(parse, v);
if (match[0] >= 106380200) {
return Pervasives.failwith(Cmdliner_msg.err_opt_parse(f, match[1]));
} else {
return match[1];
}
}
function opt(vopt, param, v, a) {
var print = param[1];
var parse = param[0];
if (Cmdliner_info.arg_is_pos(a)) {
return Pervasives.invalid_arg(err_not_opt);
} else {
var absent = /* Val */[Block.__(246, [(function (param) {
return str_of_pp(print, v);
})])];
var kind = vopt !== undefined ? /* Opt_vopt */[str_of_pp(print, Caml_option.valFromOption(vopt))] : /* Opt */1;
var a$1 = Cmdliner_info.arg_make_opt(absent, kind, a);
var convert = function (ei, cl) {
var match = Cmdliner_cline.opt_arg(cl, a$1);
if (match) {
var match$1 = match[0];
var match$2 = match$1[2];
var f = match$1[1];
var exit = 0;
if (match$2 !== undefined) {
if (match[1]) {
exit = 1;
} else {
try {
return /* Ok */Block.__(0, [parse_opt_value(parse, f, match$2)]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === Caml_builtin_exceptions.failure) {
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
exn[1]
]]);
} else {
throw exn;
}
}
}
} else if (match[1]) {
exit = 1;
} else if (vopt !== undefined) {
return /* Ok */Block.__(0, [Caml_option.valFromOption(vopt)]);
} else {
var e = Cmdliner_msg.err_opt_value_missing(f);
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
e
]]);
}
if (exit === 1) {
var e$1 = Cmdliner_msg.err_opt_repeated(match[1][0][1], f);
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
e$1
]]);
}
} else {
return try_env(ei, a$1, parse, v);
}
};
return /* tuple */[
Curry._1(arg_to_args, a$1),
convert
];
}
}
function opt_all(vopt, param, v, a) {
var parse = param[0];
if (Cmdliner_info.arg_is_pos(a)) {
return Pervasives.invalid_arg(err_not_opt);
} else {
var kind = vopt !== undefined ? /* Opt_vopt */[str_of_pp(param[1], Caml_option.valFromOption(vopt))] : /* Opt */1;
var a$1 = Cmdliner_info.arg_make_opt_all(/* Val */[""], kind, a);
var convert = function (ei, cl) {
var l = Cmdliner_cline.opt_arg(cl, a$1);
if (l) {
var parse$1 = function (param) {
var v = param[2];
var f = param[1];
var k = param[0];
if (v !== undefined) {
return /* tuple */[
k,
parse_opt_value(parse, f, v)
];
} else if (vopt !== undefined) {
return /* tuple */[
k,
Caml_option.valFromOption(vopt)
];
} else {
return Pervasives.failwith(Cmdliner_msg.err_opt_value_missing(f));
}
};
try {
return /* Ok */Block.__(0, [List.rev_map((function (prim) {
return prim[1];
}), List.sort(rev_compare, List.rev_map(parse$1, l)))]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === Caml_builtin_exceptions.failure) {
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
exn[1]
]]);
} else {
throw exn;
}
}
} else {
return try_env(ei, a$1, (function (param) {
return parse_to_list(parse, param);
}), v);
}
};
return /* tuple */[
Curry._1(arg_to_args, a$1),
convert
];
}
}
function parse_pos_value(parse, a, v) {
var match = Curry._1(parse, v);
if (match[0] >= 106380200) {
return Pervasives.failwith(Cmdliner_msg.err_pos_parse(a, match[1]));
} else {
return match[1];
}
}
function pos($staropt$star, k, param, v, a) {
var print = param[1];
var parse = param[0];
var rev = $staropt$star !== undefined ? $staropt$star : false;
if (Cmdliner_info.arg_is_opt(a)) {
return Pervasives.invalid_arg(err_not_pos);
} else {
var absent = /* Val */[Block.__(246, [(function (param) {
return str_of_pp(print, v);
})])];
var pos$1 = Cmdliner_info.pos(rev, k, 1);
var a$1 = Cmdliner_info.arg_make_pos_abs(absent, pos$1, a);
var convert = function (ei, cl) {
var match = Cmdliner_cline.pos_arg(cl, a$1);
if (match) {
if (match[1]) {
throw [
Caml_builtin_exceptions.assert_failure,
/* tuple */[
"cmdliner_arg.ml",
227,
9
]
];
}
try {
return /* Ok */Block.__(0, [parse_pos_value(parse, a$1, match[0])]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === Caml_builtin_exceptions.failure) {
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
exn[1]
]]);
} else {
throw exn;
}
}
} else {
return try_env(ei, a$1, parse, v);
}
};
return /* tuple */[
Curry._1(arg_to_args, a$1),
convert
];
}
}
function pos_list(pos, param, v, a) {
var parse = param[0];
if (Cmdliner_info.arg_is_opt(a)) {
return Pervasives.invalid_arg(err_not_pos);
} else {
var a$1 = Cmdliner_info.arg_make_pos(pos, a);
var convert = function (ei, cl) {
var l = Cmdliner_cline.pos_arg(cl, a$1);
if (l) {
try {
return /* Ok */Block.__(0, [List.rev(List.rev_map((function (param) {
return parse_pos_value(parse, a$1, param);
}), l))]);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn[0] === Caml_builtin_exceptions.failure) {
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
exn[1]
]]);
} else {
throw exn;
}
}
} else {
return try_env(ei, a$1, (function (param) {
return parse_to_list(parse, param);
}), v);
}
};
return /* tuple */[
Curry._1(arg_to_args, a$1),
convert
];
}
}
var all = Cmdliner_info.pos(false, 0, undefined);
function pos_all(c, v, a) {
return pos_list(all, c, v, a);
}
function pos_left($staropt$star, k) {
var rev = $staropt$star !== undefined ? $staropt$star : false;
var start = rev ? k + 1 | 0 : 0;
var len = rev ? undefined : k;
var partial_arg = Cmdliner_info.pos(rev, start, len);
return (function (param, param$1, param$2) {
return pos_list(partial_arg, param, param$1, param$2);
});
}
function pos_right($staropt$star, k) {
var rev = $staropt$star !== undefined ? $staropt$star : false;
var start = rev ? 0 : k + 1 | 0;
var len = rev ? k : undefined;
var partial_arg = Cmdliner_info.pos(rev, start, len);
return (function (param, param$1, param$2) {
return pos_list(partial_arg, param, param$1, param$2);
});
}
function absent_error(args) {
var make_req = function (a, acc) {
var req_a = Cmdliner_info.arg_make_req(a);
return Curry._2(Cmdliner_info.Args[/* add */3], req_a, acc);
};
return Curry._3(Cmdliner_info.Args[/* fold */13], make_req, args, Cmdliner_info.Args[/* empty */0]);
}
function value(a) {
return a;
}
function err_arg_missing(args) {
var e = Cmdliner_msg.err_arg_missing(Curry._1(Cmdliner_info.Args[/* choose */22], args));
return /* Error */Block.__(1, [/* `Parse */[
-796721133,
e
]]);
}
function required(param) {
var convert = param[1];
var args = absent_error(param[0]);
var convert$1 = function (ei, cl) {
var e = Curry._2(convert, ei, cl);
if (e.tag) {
return e;
} else {
var match = e[0];
if (match !== undefined) {
return /* Ok */Block.__(0, [Caml_option.valFromOption(match)]);
} else {
return err_arg_missing(args);
}
}
};
return /* tuple */[
args,
convert$1
];
}
function non_empty(param) {
var convert = param[1];
var args = absent_error(param[0]);
var convert$1 = function (ei, cl) {
var e = Curry._2(convert, ei, cl);
if (e.tag) {
return e;
} else {
var l = e[0];
if (l) {
return /* Ok */Block.__(0, [l]);
} else {
return err_arg_missing(args);
}
}
};
return /* tuple */[
args,
convert$1
];
}
function last(param) {
var convert = param[1];
var args = param[0];
var convert$1 = function (ei, cl) {
var e = Curry._2(convert, ei, cl);
if (e.tag) {
return e;
} else {
var l = e[0];
if (l) {
return /* Ok */Block.__(0, [List.hd(List.rev(l))]);
} else {
return err_arg_missing(args);
}
}
};
return /* tuple */[
args,
convert$1
];
}
var man_fmts = /* :: */[
/* tuple */[
"auto",
/* Auto */726666127
],
/* :: */[
/* tuple */[
"pager",
/* Pager */-797271261
],
/* :: */[
/* tuple */[
"groff",
/* Groff */757208580
],
/* :: */[
/* tuple */[
"plain",
/* Plain */-675583510
],
/* [] */0
]
]
]
];
var man_fmt_docv = "FMT";
var man_fmts_enum = Cmdliner_base.$$enum(man_fmts);
var man_fmts_alts = doc_alts_enum(undefined, man_fmts);
function man_fmts_doc(kind) {
return Curry._2(Printf.sprintf(/* Format */[
/* String_literal */Block.__(11, [
"Show ",
/* String */Block.__(2, [
/* No_padding */0,
/* String_literal */Block.__(11, [
" in format $(docv). The value $(docv) must be ",
/* String */Block.__(2, [
/* No_padding */0,
/* String_literal */Block.__(11, [
". With `auto',\n the format is `pager` or `plain' whenever the $(b,TERM) env var is\n `dumb' or undefined.",
/* End_of_format */0
])
])
])
])
]),
"Show %s in format $(docv). The value $(docv) must be %s. With `auto',\n the format is `pager` or `plain' whenever the $(b,TERM) env var is\n `dumb' or undefined."
]), kind, man_fmts_alts);
}
var doc = man_fmts_doc("output");
var man_format = opt(undefined, man_fmts_enum, /* Pager */-797271261, Cmdliner_info.arg(undefined, man_fmt_docv, doc, undefined, /* :: */[
"man-format",
/* [] */0
]));
function stdopt_version(docs) {
return flag(Cmdliner_info.arg(docs, undefined, "Show version information.", undefined, /* :: */[
"version",
/* [] */0
]));
}
function stdopt_help(docs) {
var doc = man_fmts_doc("this help");
var partial_arg = Cmdliner_base.some(undefined, man_fmts_enum);
var partial_arg$1 = /* Auto */726666127;
return (function (param) {
return opt(partial_arg$1, partial_arg, undefined, param);
})(Cmdliner_info.arg(docs, man_fmt_docv, doc, undefined, /* :: */[
"help",
/* [] */0
]));
}
var some = Cmdliner_base.some;
var env_var = Cmdliner_info.env;
var info = Cmdliner_info.arg;
var bool = Cmdliner_base.bool;
var $$char = Cmdliner_base.$$char;
var $$int = Cmdliner_base.$$int;
var nativeint = Cmdliner_base.nativeint;
var int32 = Cmdliner_base.int32;
var int64 = Cmdliner_base.int64;
var $$float = Cmdliner_base.$$float;
var string = Cmdliner_base.string;
var $$enum = Cmdliner_base.$$enum;
var file = Cmdliner_base.file;
var dir = Cmdliner_base.dir;
var non_dir_file = Cmdliner_base.non_dir_file;
var list = Cmdliner_base.list;
var array = Cmdliner_base.array;
var pair = Cmdliner_base.pair;
var t2 = Cmdliner_base.t2;
var t3 = Cmdliner_base.t3;
var t4 = Cmdliner_base.t4;
var doc_quote = Cmdliner_base.quote;
var doc_alts = Cmdliner_base.alts_str;
exports.conv = conv;
exports.pconv = pconv;
exports.conv_parser = conv_parser;
exports.conv_printer = conv_printer;
exports.conv_docv = conv_docv;
exports.parser_of_kind_of_string = parser_of_kind_of_string;
exports.some = some;
exports.env_var = env_var;
exports.info = info;
exports.$unknown = $unknown;
exports.flag = flag;
exports.flag_all = flag_all;
exports.vflag = vflag;
exports.vflag_all = vflag_all;
exports.opt = opt;
exports.opt_all = opt_all;
exports.pos = pos;
exports.pos_all = pos_all;
exports.pos_left = pos_left;
exports.pos_right = pos_right;
exports.value = value;
exports.required = required;
exports.non_empty = non_empty;
exports.last = last;
exports.man_format = man_format;
exports.stdopt_version = stdopt_version;
exports.stdopt_help = stdopt_help;
exports.bool = bool;
exports.$$char = $$char;
exports.$$int = $$int;
exports.nativeint = nativeint;
exports.int32 = int32;
exports.int64 = int64;
exports.$$float = $$float;
exports.string = string;
exports.$$enum = $$enum;
exports.file = file;
exports.dir = dir;
exports.non_dir_file = non_dir_file;
exports.list = list;
exports.array = array;
exports.pair = pair;
exports.t2 = t2;
exports.t3 = t3;
exports.t4 = t4;
exports.doc_quote = doc_quote;
exports.doc_alts = doc_alts;
exports.doc_alts_enum = doc_alts_enum;
/* all Not a pure module */