Skip to content

Commit b84bf30

Browse files
fix: resolveOneOf should work with false value (#889)
Co-authored-by: Nathanael Demacon <ndemacon@scaleway.com>
1 parent e6b2b70 commit b84bf30

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

packages/clients/src/helpers/__tests__/marshalling.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,18 @@ describe('resolveOneOf', () => {
158158
),
159159
).toStrictEqual({})
160160
})
161+
162+
it('handles false kind values, like boolean.false', () => {
163+
expect(
164+
resolveOneOf(
165+
[
166+
{ default: undefined, param: 'my_key_1', value: false },
167+
{ default: undefined, param: 'my_key_2', value: true },
168+
],
169+
false,
170+
),
171+
).toStrictEqual({ my_key_1: false })
172+
})
161173
})
162174

163175
describe('unmarshalDate', () => {

packages/clients/src/helpers/marshalling.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,14 @@ export const resolveOneOf = <T>(
4141
}[],
4242
isRequired = false,
4343
): Record<string, T> => {
44-
const elt = list.find(obj => obj.value) || list.find(obj => obj.default)
45-
const value = elt?.value || elt?.default
46-
if (value) return { [elt.param]: value }
44+
const elt =
45+
list.find(obj => obj.value !== undefined) ??
46+
list.find(obj => obj.default !== undefined)
47+
const value = elt?.value ?? elt?.default
48+
if (elt && value !== undefined) {
49+
return { [elt.param]: value }
50+
}
51+
4752
if (isRequired) {
4853
const keyList = list.map(obj => obj.param).join(' or ')
4954
throw new TypeError(`one of ${keyList} must be indicated in the request`)

0 commit comments

Comments
 (0)