Skip to content

Commit 37300f8

Browse files
Using JSON.stringify instead of toString for object types in parseValue (#111)
* Using JSON.stringify instead of toString for object types in parseValue * Running prettier Co-authored-by: Totalus <Totalus@users.noreply.github.com> Co-authored-by: Marcus Olsson <marcus.olsson@hey.com>
1 parent a19b6db commit 37300f8

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

src/parseValues.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,8 @@ test('parse nullable booleans', () => {
7070
expect(parseValues(values, FieldType.string)).toStrictEqual([null, 'true', 'false']);
7171
expect(() => parseValues(values, FieldType.time)).toThrow();
7272
});
73+
74+
test('parse objects', () => {
75+
const values = [[1, 2, 3], { '123': 123 }, null];
76+
expect(parseValues(values, FieldType.string)).toStrictEqual(['[1,2,3]', '{"123":123}', null]);
77+
});

src/parseValues.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ export const parseValues = (values: any[], type: FieldType): any[] => {
1010
// For time field, values are expected to be numbers representing a Unix
1111
// epoch in milliseconds.
1212

13-
if (values.filter((_) => _).every((value) => typeof value === 'string')) {
14-
return values.map((_) => (_ !== null ? dayjs(_).valueOf() : _));
13+
if (values.filter(_ => _).every(value => typeof value === 'string')) {
14+
return values.map(_ => (_ !== null ? dayjs(_).valueOf() : _));
1515
}
1616

17-
if (values.filter((_) => _).every((value) => typeof value === 'number')) {
17+
if (values.filter(_ => _).every(value => typeof value === 'number')) {
1818
const ms = 1_000_000_000_000;
1919

2020
// If there are no "big" numbers, assume seconds.
21-
if (values.filter((_) => _).every((_) => _ < ms)) {
22-
return values.map((_) => (_ !== null ? _ * 1000.0 : _));
21+
if (values.filter(_ => _).every(_ => _ < ms)) {
22+
return values.map(_ => (_ !== null ? _ * 1000.0 : _));
2323
}
2424

2525
// ... otherwise assume milliseconds.
@@ -28,13 +28,19 @@ export const parseValues = (values: any[], type: FieldType): any[] => {
2828

2929
throw new Error('Unsupported time property');
3030
case FieldType.string:
31-
return values.every((_) => typeof _ === 'string') ? values : values.map((_) => (_ !== null ? _.toString() : _));
31+
return values.every(_ => typeof _ === 'string')
32+
? values
33+
: values.map(_ => {
34+
if (_ === null) return _;
35+
else if (typeof _ === 'object') return JSON.stringify(_);
36+
else return _.toString();
37+
});
3238
case FieldType.number:
33-
return values.every((_) => typeof _ === 'number') ? values : values.map((_) => (_ !== null ? parseFloat(_) : _));
39+
return values.every(_ => typeof _ === 'number') ? values : values.map(_ => (_ !== null ? parseFloat(_) : _));
3440
case FieldType.boolean:
35-
return values.every((_) => typeof _ === 'boolean')
41+
return values.every(_ => typeof _ === 'boolean')
3642
? values
37-
: values.map((_) => {
43+
: values.map(_ => {
3844
if (_ === null) {
3945
return _;
4046
}

0 commit comments

Comments
 (0)