Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Commit 567594e

Browse files
committed
fix(core): handle member with undefined value in valueOf
1 parent afe6ace commit 567594e

File tree

4 files changed

+21
-1
lines changed

4 files changed

+21
-1
lines changed

packages/api-elements/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# API Elements (JavaScript) CHANGELOG
22

3+
## 0.2.5 (2020-06-13)
4+
5+
### Bug Fixes
6+
7+
- Prevent `valueOf` from throwing an error while handling an object element
8+
which contains a member element which does not include a value.
9+
310
## 0.2.4 (2020-04-20)
411

512
### Enhancements

packages/api-elements/lib/define-value-of.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ function trivialValue(e) {
108108
}
109109

110110
function mapValue(e, options, f, elements) {
111+
if (e === undefined) {
112+
return e;
113+
}
114+
111115
const opts = updateTypeAttributes(e, options);
112116
if (e.content && (!isPlural(e) || !e.isEmpty)) {
113117
const result = f(e, opts, elements, 'content');

packages/api-elements/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "api-elements",
3-
"version": "0.2.4",
3+
"version": "0.2.5",
44
"description": "API Elements JavaScript",
55
"author": "Apiary.io <[email protected]>",
66
"license": "MIT",

packages/api-elements/test/value-of-test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const namespace = new Namespace();
66
const { Element } = namespace;
77
const ArrayElement = namespace.elements.Array;
88
const ObjectElement = namespace.elements.Object;
9+
const MemberElement = namespace.elements.Member;
910
const BooleanElement = namespace.elements.Boolean;
1011
const EnumElement = namespace.elements.Enum;
1112
const NullElement = namespace.elements.Null;
@@ -845,6 +846,14 @@ describe('valueOf ObjectElement', () => {
845846
expect(value).to.deep.equal(undefined);
846847
});
847848

849+
it('skips property without value', () => {
850+
const element = new ObjectElement({ company: 'Oracle' });
851+
element.push(new MemberElement('name'));
852+
const value = element.valueOf();
853+
854+
expect(value).to.deep.equal({ company: 'Oracle' });
855+
});
856+
848857
it('returns undefined when fixed and with item without value', () => {
849858
const element = new ObjectElement({
850859
a: 8, b: 4, c: new EnumElement(), d: 42,

0 commit comments

Comments
 (0)