diff --git a/ts/packages/dispatcher/dispatcher/src/command/parameters.ts b/ts/packages/dispatcher/dispatcher/src/command/parameters.ts index 8b96acab9..261d52b49 100644 --- a/ts/packages/dispatcher/dispatcher/src/command/parameters.ts +++ b/ts/packages/dispatcher/dispatcher/src/command/parameters.ts @@ -85,8 +85,8 @@ function invalidValueToken(valueToken: string) { if ( valueToken.length === 2 && valueToken[0] === "-" && - valueToken.charCodeAt(1) < 48 /* "0" */ && - valueToken.charCodeAt(1) > 57 /* "9" */ + (valueToken.charCodeAt(1) < 48 /* "0" */ || + valueToken.charCodeAt(1) > 57) /* "9" */ ) { return true; } diff --git a/ts/packages/dispatcher/dispatcher/test/flags.spec.ts b/ts/packages/dispatcher/dispatcher/test/flags.spec.ts index 509536b1c..cf92be231 100644 --- a/ts/packages/dispatcher/dispatcher/test/flags.spec.ts +++ b/ts/packages/dispatcher/dispatcher/test/flags.spec.ts @@ -13,6 +13,20 @@ describe("Flag parsing", () => { obj: { description: "testing", type: "json" }, }, } as const; + const shortFlags = { + flags: { + output: { + description: "output", + type: "string", + char: "o", + }, + verbose: { + description: "verbose", + type: "boolean", + char: "v", + }, + }, + } as const; const o1 = { hello: "str", num: 11, bool: true }; const o2 = { ...o1, obj: o1, arr: [o1, o1] }; it("type", () => { @@ -257,6 +271,20 @@ describe("Flag parsing", () => { } }); + it("does not consume a following short flag as a string value", () => { + expect(() => parseParams("-o -v", shortFlags)).toThrow( + "Missing value for flag '-o'", + ); + }); + + it("accepts a negative numeric-looking string as a short flag value", () => { + expect(parseParams("-o -1", shortFlags).flags.output).toBe("-1"); + }); + + it("accepts a quoted short-flag-looking string as a short flag value", () => { + expect(parseParams("-o '-v'", shortFlags).flags.output).toBe("-v"); + }); + it("Duplicate flags", () => { try { parseParams("--num 10 --num 11", typeFlags);