UNPKG

@eeue56/baner

Version:

Flag parsing library in Typescript

754 lines (753 loc) 26 kB
"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;