Skip to content

Commit 6069a21

Browse files
chore: add helper method for parsing booleans
This adds a helper for parsing booleans from strings. Previously a simple `=== "true"` check was being performed, but this implies that anything that isn't that particular string is false.
1 parent 608e606 commit 6069a21

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { parseBoolean } from "./boolean";
2+
3+
describe("parseBoolean", () => {
4+
it('Returns true for "true"', () => {
5+
expect(parseBoolean("true")).toEqual(true);
6+
});
7+
8+
it('Returns false for "false"', () => {
9+
expect(parseBoolean("false")).toEqual(false);
10+
});
11+
12+
it("Throws an error on invalid input", () => {
13+
// These are valid booleans in YAML
14+
expect(() => parseBoolean("y" as any)).toThrowError();
15+
expect(() => parseBoolean("Y" as any)).toThrowError();
16+
expect(() => parseBoolean("yes" as any)).toThrowError();
17+
expect(() => parseBoolean("Yes" as any)).toThrowError();
18+
expect(() => parseBoolean("YES" as any)).toThrowError();
19+
expect(() => parseBoolean("n" as any)).toThrowError();
20+
expect(() => parseBoolean("N" as any)).toThrowError();
21+
expect(() => parseBoolean("no" as any)).toThrowError();
22+
expect(() => parseBoolean("No" as any)).toThrowError();
23+
expect(() => parseBoolean("NO" as any)).toThrowError();
24+
expect(() => parseBoolean("True" as any)).toThrowError();
25+
expect(() => parseBoolean("TRUE" as any)).toThrowError();
26+
expect(() => parseBoolean("False" as any)).toThrowError();
27+
expect(() => parseBoolean("FALSE" as any)).toThrowError();
28+
expect(() => parseBoolean("on" as any)).toThrowError();
29+
expect(() => parseBoolean("On" as any)).toThrowError();
30+
expect(() => parseBoolean("ON" as any)).toThrowError();
31+
expect(() => parseBoolean("off" as any)).toThrowError();
32+
expect(() => parseBoolean("Off" as any)).toThrowError();
33+
expect(() => parseBoolean("OFF" as any)).toThrowError();
34+
35+
// These would be resolve to false using Boolean
36+
expect(() => parseBoolean(0 as any)).toThrowError();
37+
expect(() => parseBoolean(null as any)).toThrowError();
38+
expect(() => parseBoolean("" as any)).toThrowError();
39+
expect(() => parseBoolean(false as any)).toThrowError();
40+
41+
// These would resolve to true using Boolean
42+
expect(() => parseBoolean(true as any)).toThrowError();
43+
expect(() => parseBoolean("Su Lin" as any)).toThrowError();
44+
expect(() => parseBoolean([] as any)).toThrowError();
45+
expect(() => parseBoolean({} as any)).toThrowError();
46+
});
47+
});

packages/smithy-client/src/boolean.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Give an input string, stritctly parses a boolean value.
3+
*
4+
* @param value The boolean string to parse.
5+
* @returns true for "true", false for "false", otherwise an error is thrown.
6+
*/
7+
export function parseBoolean(value: "true" | "false"): boolean {
8+
switch (value) {
9+
case "true":
10+
return true;
11+
case "false":
12+
return false;
13+
default:
14+
throw new Error(`Unable to parse boolean value "${value}"`);
15+
}
16+
}

packages/smithy-client/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from "./boolean";
12
export * from "./client";
23
export * from "./command";
34
export * from "./document-type";

0 commit comments

Comments
 (0)