Skip to content

Commit fe052bd

Browse files
author
vvo
committed
fix: handle empty objects
1 parent 4138ecc commit fe052bd

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

index-test.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,21 @@ describe(`reactElementToJSXString(ReactElement)`, () => {
182182
).toEqual(`<div a={{b: function noRefCheck() {}}} />`);
183183
});
184184

185-
it(`reactElementToJSXString(<div a={{b: {c: {d: <div />}}}} />`, () => {
185+
it(`reactElementToJSXString(<div a={{b: {c: {d: <div />, e: null}}}} />`, () => {
186186
expect(
187-
reactElementToJSXString(<div a={{b: {c: {d: <div />}}}} />)
188-
).toEqual(`<div a={{b: {c: {d: <div />}}}} />`);
187+
reactElementToJSXString(<div a={{b: {c: {d: <div />, e: null}}}} />)
188+
).toEqual(`<div a={{b: {c: {d: <div />, e: null}}}} />`);
189+
});
190+
191+
it(`reactElementToJSXString(<div a={{b: {}}} />`, () => {
192+
expect(
193+
reactElementToJSXString(<div a={{b: {}}} />)
194+
).toEqual(`<div a={{b: {}}} />`);
195+
});
196+
197+
it(`reactElementToJSXString(<div a={{}} />`, () => {
198+
expect(
199+
reactElementToJSXString(<div a={{}} />)
200+
).toEqual(`<div a={{}} />`);
189201
});
190202
});

index.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ function formatProps(props) {
8585
return {
8686
name: propName,
8787
value: formatPropValue(props[propName])
88-
.replace(/'?<__reactElementToJSXString__ReactElement__>/g, '')
89-
.replace(/<\/__reactElementToJSXString__ReactElement__>'?/g, '')
88+
.replace(/'?<__reactElementToJSXString__Wrapper__>/g, '')
89+
.replace(/<\/__reactElementToJSXString__Wrapper__>'?/g, '')
9090
};
9191
});
9292
}
@@ -110,11 +110,13 @@ function formatValue(value) {
110110
// // <div a={{b: <div />}} />
111111
// we then remove the whole wrapping
112112
// otherwise, the element would be surrounded by quotes: <div a={{b: '<div />'}} />
113-
return '<__reactElementToJSXString__ReactElement__>' +
113+
return '<__reactElementToJSXString__Wrapper__>' +
114114
toJSXString({ReactElement: value, inline: true}) +
115-
'</__reactElementToJSXString__ReactElement__>';
115+
'</__reactElementToJSXString__Wrapper__>';
116116
} else if (isPlainObject(value)) {
117-
return stringifyObject(value);
117+
return '<__reactElementToJSXString__Wrapper__>' +
118+
stringifyObject(value) +
119+
'</__reactElementToJSXString__Wrapper__>';
118120
}
119121

120122
return value;
@@ -127,13 +129,15 @@ function recurse({lvl, inline}) {
127129
}
128130

129131
function stringifyObject(obj) {
130-
obj = traverse(obj).map(function(value) {
131-
if (isElement(value) || this.isLeaf) {
132-
this.update(formatValue(value));
133-
}
134-
});
132+
if (Object.keys(obj).length > 0) {
133+
obj = traverse(obj).map(function(value) {
134+
if (isElement(value) || this.isLeaf) {
135+
this.update(formatValue(value));
136+
}
137+
});
135138

136-
obj = sortobject(obj);
139+
obj = sortobject(obj);
140+
}
137141

138142
return collapse(stringify(obj))
139143
.replace(/{ /g, '{')

0 commit comments

Comments
 (0)