@eeue56/baner
Version:
Flag parsing library in Typescript
754 lines (753 loc) • 26 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.testAllMissing = exports.testAllErrors = exports.testShortFlagWithVariableArguments = exports.testShortFlagWithMultipleArguments = exports.testShortFlagWithSingleBooleanArgument = exports.testShortFlagWithSingleNumberArgument = exports.testMultipleSingleArguments = exports.testMultipleEmptyArguments = exports.testBothFlag = exports.testLongFlagWithSingleArgument = exports.testLongFlag = exports.testShortFlagWithSingleArgument = exports.testShortFlag = void 0;
var result_1 = require("@eeue56/ts-core/build/main/lib/result");
var result_2 = require("@eeue56/ts-core/build/main/lib/result");
var assert = __importStar(require("assert"));
var baner_1 = require("./baner");
function testShortFlag() {
var emptyAParser = baner_1.parser([baner_1.shortFlag("a", "some help text", baner_1.empty())]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(emptyAParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
},
args: [],
});
var listWithSingleFlag = ["-a"];
assert.deepStrictEqual(baner_1.parse(emptyAParser, listWithSingleFlag), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["-a"],
});
var listWithMultipleFlags = ["-a", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(emptyAParser, listWithMultipleFlags), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["-a", "-b", "-c"],
});
var listWithMultiplebothFlags = [
"--yes",
"-c",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyAParser, listWithMultiplebothFlags), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["--yes", "-c", "-a", "--no", "-b"],
});
}
exports.testShortFlag = testShortFlag;
function testShortFlagWithSingleArgument() {
var singleArgParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.list([baner_1.string()])),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(singleArgParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
},
args: [],
});
var listWithSingleFlag = ["-a"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlag), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: ["-a"],
});
var listWithSingleFlagWithArgument = ["-a", "hello"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(["hello"]),
},
},
args: ["-a", "hello"],
});
var listWithMultipleFlags = ["-a", "hello", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithMultipleFlags), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(["hello"]),
},
},
args: ["-a", "hello", "-b", "-c"],
});
var listWithMultipleFlagsWithoutArgument = ["-a", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithMultipleFlagsWithoutArgument), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: ["-a", "-b", "-c"],
});
var listWithMultiplebothFlags = [
"--yes",
"-c",
"-a",
"hello",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithMultiplebothFlags), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(["hello"]),
},
},
args: ["--yes", "-c", "-a", "hello", "--no", "-b"],
});
}
exports.testShortFlagWithSingleArgument = testShortFlagWithSingleArgument;
function testLongFlag() {
var emptyYesParser = baner_1.parser([
baner_1.longFlag("yes", "some help text", baner_1.empty()),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, emptyList), {
flags: {
yes: {
isPresent: false,
arguments: result_2.Err("Long flag --yes not found"),
},
},
args: [],
});
var listWithSingleFlag = ["--yes"];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, listWithSingleFlag), {
flags: {
yes: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["--yes"],
});
var listWithMultipleFlags = ["--yes", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, listWithMultipleFlags), {
flags: {
yes: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["--yes", "-b", "-c"],
});
var listWithMultiplebothFlags = [
"-c",
"--yes",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, listWithMultiplebothFlags), {
flags: {
yes: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["-c", "--yes", "-a", "--no", "-b"],
});
}
exports.testLongFlag = testLongFlag;
function testLongFlagWithSingleArgument() {
var singleArgParser = baner_1.parser([
baner_1.longFlag("yes", "some help text", baner_1.list([baner_1.string()])),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(singleArgParser, emptyList), {
flags: {
yes: {
isPresent: false,
arguments: result_2.Err("Long flag --yes not found"),
},
},
args: [],
});
var listWithSingleFlag = ["--yes"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlag), {
flags: {
yes: {
isPresent: true,
arguments: result_2.Err("Error parsing --yes due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: ["--yes"],
});
var listWithMultipleFlags = ["--yes", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithMultipleFlags), {
flags: {
yes: {
isPresent: true,
arguments: result_2.Err("Error parsing --yes due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: ["--yes", "-b", "-c"],
});
var listWithMultiplebothFlags = [
"-c",
"--yes",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithMultiplebothFlags), {
flags: {
yes: {
isPresent: true,
arguments: result_2.Err("Error parsing --yes due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: ["-c", "--yes", "-a", "--no", "-b"],
});
var listWithMultiplebothFlagsAndAnArg = [
"-c",
"--yes",
"hello",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithMultiplebothFlagsAndAnArg), {
flags: {
yes: {
isPresent: true,
arguments: result_1.Ok(["hello"]),
},
},
args: ["-c", "--yes", "hello", "-a", "--no", "-b"],
});
}
exports.testLongFlagWithSingleArgument = testLongFlagWithSingleArgument;
function testBothFlag() {
var emptyYesParser = baner_1.parser([
baner_1.bothFlag("y", "yes", "some help text", baner_1.empty()),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, emptyList), {
flags: {
"y/yes": {
isPresent: false,
arguments: result_2.Err("Mixed flag -y/--yes not found"),
},
},
args: [],
});
var listWithSingleFlag = ["--yes"];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, listWithSingleFlag), {
flags: {
"y/yes": {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["--yes"],
});
var listWithMultipleFlags = ["--yes", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, listWithMultipleFlags), {
flags: {
"y/yes": {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["--yes", "-b", "-c"],
});
var listWithMultiplebothFlags = [
"-c",
"--yes",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, listWithMultiplebothFlags), {
flags: {
"y/yes": {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["-c", "--yes", "-a", "--no", "-b"],
});
var listWithMultiplebothFlagsAndShortFlag = [
"-c",
"-y",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyYesParser, listWithMultiplebothFlagsAndShortFlag), {
flags: {
"y/yes": {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: listWithMultiplebothFlagsAndShortFlag,
});
}
exports.testBothFlag = testBothFlag;
function testMultipleEmptyArguments() {
var emptyAOrYesParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.empty()),
baner_1.longFlag("yes", "some help text", baner_1.empty()),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
yes: {
isPresent: false,
arguments: result_2.Err("Long flag --yes not found"),
},
},
args: [],
});
var listWithSingleFlag = ["--yes"];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithSingleFlag), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
yes: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: ["--yes"],
});
var listWithMultipleFlags = ["--yes", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithMultipleFlags), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
yes: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: listWithMultipleFlags,
});
var listWithMultiplebothFlags = [
"-c",
"--yes",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithMultiplebothFlags), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(null),
},
yes: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: listWithMultiplebothFlags,
});
var listWithMultiplebothFlagsInDifferentOrder = [
"-c",
"-a",
"--no",
"--yes",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithMultiplebothFlagsInDifferentOrder), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(null),
},
yes: {
isPresent: true,
arguments: result_1.Ok(null),
},
},
args: listWithMultiplebothFlagsInDifferentOrder,
});
}
exports.testMultipleEmptyArguments = testMultipleEmptyArguments;
function testMultipleSingleArguments() {
var emptyAOrYesParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.list([baner_1.string()])),
baner_1.longFlag("yes", "some help text", baner_1.list([baner_1.string()])),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
yes: {
isPresent: false,
arguments: result_2.Err("Long flag --yes not found"),
},
},
args: [],
});
var listWithSingleFlag = ["--yes"];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithSingleFlag), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
yes: {
isPresent: true,
arguments: result_2.Err("Error parsing --yes due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: ["--yes"],
});
var listWithMultipleFlags = ["--yes", "-b", "-c"];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithMultipleFlags), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
yes: {
isPresent: true,
arguments: result_2.Err("Error parsing --yes due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: listWithMultipleFlags,
});
var listWithMultiplebothFlags = [
"-c",
"--yes",
"-a",
"--no",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithMultiplebothFlags), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not enough arguments. Expected a string. at index 0"),
},
yes: {
isPresent: true,
arguments: result_2.Err("Error parsing --yes due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: listWithMultiplebothFlags,
});
var listWithMultiplebothFlagsInDifferentOrder = [
"-c",
"-a",
"--no",
"--yes",
"-b",
];
assert.deepStrictEqual(baner_1.parse(emptyAOrYesParser, listWithMultiplebothFlagsInDifferentOrder), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not enough arguments. Expected a string. at index 0"),
},
yes: {
isPresent: true,
arguments: result_2.Err("Error parsing --yes due to: Not enough arguments. Expected a string. at index 0"),
},
},
args: listWithMultiplebothFlagsInDifferentOrder,
});
}
exports.testMultipleSingleArguments = testMultipleSingleArguments;
function testShortFlagWithSingleNumberArgument() {
var singleArgParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.list([baner_1.number()])),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(singleArgParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
},
args: [],
});
var listWithSingleFlag = ["-a"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlag), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not enough arguments. Expected a number. at index 0"),
},
},
args: ["-a"],
});
var listWithSingleFlagWithArgument = ["-a", "hello"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithArgument), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not a number argument"),
},
},
args: listWithSingleFlagWithArgument,
});
var listWithSingleFlagWithNumberArgument = ["-a", "5.5"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithNumberArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([5.5]),
},
},
args: listWithSingleFlagWithNumberArgument,
});
var listWithSingleFlagWithIntArgument = ["-a", "5"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithIntArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([5]),
},
},
args: listWithSingleFlagWithIntArgument,
});
var listWithSingleFlagWithZeroArgument = ["-a", "0"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithZeroArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([0]),
},
},
args: listWithSingleFlagWithZeroArgument,
});
var listWithSingleFlagWithNegativeArgument = ["-a", "-5.5"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithNegativeArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([-5.5]),
},
},
args: listWithSingleFlagWithNegativeArgument,
});
}
exports.testShortFlagWithSingleNumberArgument = testShortFlagWithSingleNumberArgument;
function testShortFlagWithSingleBooleanArgument() {
var singleArgParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.list([baner_1.boolean()])),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(singleArgParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
},
args: [],
});
var listWithSingleFlag = ["-a"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlag), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not enough arguments. Expected a boolean. at index 0"),
},
},
args: ["-a"],
});
var listWithSingleFlagWithArgument = ["-a", "hello"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithArgument), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not a boolean argument"),
},
},
args: listWithSingleFlagWithArgument,
});
var listWithSingleFlagWithTrueArgument = ["-a", "true"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithTrueArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([true]),
},
},
args: listWithSingleFlagWithTrueArgument,
});
var listWithSingleFlagWithFalseArgument = ["-a", "false"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithFalseArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([false]),
},
},
args: listWithSingleFlagWithFalseArgument,
});
}
exports.testShortFlagWithSingleBooleanArgument = testShortFlagWithSingleBooleanArgument;
function testShortFlagWithMultipleArguments() {
var singleArgParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.list([baner_1.boolean(), baner_1.string()])),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(singleArgParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
},
args: [],
});
var listWithSingleFlag = ["-a"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlag), {
flags: {
a: {
isPresent: true,
arguments: result_2.Err("Error parsing -a due to: Not enough arguments. Expected a boolean. at index 0"),
},
},
args: ["-a"],
});
var listWithSingleFlagWithArgument = ["-a", "true", "hello"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([true, "hello"]),
},
},
args: listWithSingleFlagWithArgument,
});
}
exports.testShortFlagWithMultipleArguments = testShortFlagWithMultipleArguments;
function testShortFlagWithVariableArguments() {
var singleArgParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.variableList(baner_1.string())),
]);
var emptyList = [];
assert.deepStrictEqual(baner_1.parse(singleArgParser, emptyList), {
flags: {
a: {
isPresent: false,
arguments: result_2.Err("Short flag -a not found"),
},
},
args: [],
});
var listWithSingleFlag = ["-a"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlag), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok([]),
},
},
args: ["-a"],
});
var listWithSingleFlagWithArgument = ["-a", "true", "hello"];
assert.deepStrictEqual(baner_1.parse(singleArgParser, listWithSingleFlagWithArgument), {
flags: {
a: {
isPresent: true,
arguments: result_1.Ok(["true", "hello"]),
},
},
args: listWithSingleFlagWithArgument,
});
}
exports.testShortFlagWithVariableArguments = testShortFlagWithVariableArguments;
function testAllErrors() {
var someParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.list([baner_1.number()])),
baner_1.shortFlag("b", "B", baner_1.number()),
baner_1.shortFlag("c", "C", baner_1.oneOf(["ban", "can"])),
]);
var parsed = baner_1.parse(someParser, ["-a", "-b", "-c"]);
assert.deepStrictEqual(baner_1.allErrors(parsed), [
"Error parsing -a due to: Not enough arguments. Expected a number. at index 0",
"Error parsing -b due to: Not enough arguments. Expected a number.",
"Error parsing -c due to: Not enough arguments. Expected one of: ban | can.",
]);
parsed = baner_1.parse(someParser, ["-a", "1", "-b", "-c"]);
assert.deepStrictEqual(baner_1.allErrors(parsed), [
"Error parsing -b due to: Not enough arguments. Expected a number.",
"Error parsing -c due to: Not enough arguments. Expected one of: ban | can.",
]);
}
exports.testAllErrors = testAllErrors;
function testAllMissing() {
var someParser = baner_1.parser([
baner_1.shortFlag("a", "some help text", baner_1.list([baner_1.number()])),
baner_1.shortFlag("b", "B", baner_1.number()),
baner_1.shortFlag("c", "C", baner_1.oneOf(["ban", "can"])),
]);
var parsed = baner_1.parse(someParser, []);
assert.deepStrictEqual(baner_1.allMissing(parsed, []), ["a", "b", "c"]);
parsed = baner_1.parse(someParser, ["-a", "1", "-c"]);
assert.deepStrictEqual(baner_1.allMissing(parsed, []), ["b"]);
parsed = baner_1.parse(someParser, ["-a", "1"]);
assert.deepStrictEqual(baner_1.allMissing(parsed, ["c"]), ["b"]);
}
exports.testAllMissing = testAllMissing;