Skip to content

Commit

Permalink
fix: don't break when spreading falsy value (#249)
Browse files Browse the repository at this point in the history
  • Loading branch information
gpittarelli authored and gajus committed Mar 29, 2019
1 parent 4a47f35 commit f11d423
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 25 deletions.
43 changes: 26 additions & 17 deletions src/createSpreadMapper.js
Expand Up @@ -4,6 +4,7 @@ import {
Expression,
memberExpression,
binaryExpression,
conditionalExpression,
stringLiteral,
logicalExpression,
identifier,
Expand Down Expand Up @@ -43,25 +44,33 @@ const createSpreadMapper = (path: *, stats: *): { [destinationName: string]: Exp
result[destinationName] = binaryExpression(
'+',
result[destinationName],
binaryExpression(
'+',
stringLiteral(' '),
logicalExpression(
'||',
memberExpression(
spread.argument,
identifier(destinationName),
),
stringLiteral('')
)
),
conditionalExpression(
spread.argument,
binaryExpression(
'+',
stringLiteral(' '),
logicalExpression(
'||',
memberExpression(
spread.argument,
identifier(destinationName),
),
stringLiteral('')
)
),
stringLiteral('')
)
);
} else {
result[destinationName] = logicalExpression(
'||',
memberExpression(
spread.argument,
identifier(destinationName),
result[destinationName] = conditionalExpression(
spread.argument,
logicalExpression(
'||',
memberExpression(
spread.argument,
identifier(destinationName),
),
stringLiteral('')
),
stringLiteral('')
);
Expand Down
Expand Up @@ -5,4 +5,4 @@ require("./bar.css");
const props = {
foo: 'bar'
};
<div className={"bar__a" + (" " + (props.className || ""))} {...props}></div>;
<div className={"bar__a" + (" " + (props ? props.className || "" : ""))} {...props}></div>;
Expand Up @@ -3,17 +3,17 @@
require("./foo.css");

const rest = {};
<div {...rest} className={"b foo__a" + (" " + (rest.className || ""))}></div>;
<div {...rest} className={"foo__a" + (" " + (rest.className || ""))}></div>;
<div {...rest} activeClassName={((void 0).props.activeClassName ? (void 0).props.activeClassName + " " : "") + "foo__a" + (" " + (rest.activeClassName || ""))} className={"foo__a" + (" " + (rest.className || ""))}></div>;
<div {...rest} activeClassName={"b foo__a" + (" " + (rest.activeClassName || ""))}></div>; // Should be okay if rest is put on last
<div {...rest} className={"b foo__a" + (" " + (rest ? rest.className || "" : ""))}></div>;
<div {...rest} className={"foo__a" + (" " + (rest ? rest.className || "" : ""))}></div>;
<div {...rest} activeClassName={((void 0).props.activeClassName ? (void 0).props.activeClassName + " " : "") + "foo__a" + (" " + (rest ? rest.activeClassName || "" : ""))} className={"foo__a" + (" " + (rest ? rest.className || "" : ""))}></div>;
<div {...rest} activeClassName={"b foo__a" + (" " + (rest ? rest.activeClassName || "" : ""))}></div>; // Should be okay if rest is put on last

<div className={"foo__a" + (" " + (rest.className || ""))} {...rest}></div>;
<div className={"foo__a" + (" " + (rest ? rest.className || "" : ""))} {...rest}></div>;
const rest2 = {};
<div {...rest} {...rest2} className={"foo__a" + (" " + ((rest.className || "") + (" " + (rest2.className || ""))))}></div>; // Should not do anything
<div {...rest} {...rest2} className={"foo__a" + (" " + ((rest ? rest.className || "" : "") + (rest2 ? " " + (rest2.className || "") : "")))}></div>; // Should not do anything

<div {...rest} {...rest2}></div>;
<div {...rest} {...rest2} className="b"></div>;
<div className="foo__a">
<div {...rest} activeClassName={"foo__a" + (" " + (rest.activeClassName || ""))}></div>
<div {...rest} activeClassName={"foo__a" + (" " + (rest ? rest.activeClassName || "" : ""))}></div>
</div>;

0 comments on commit f11d423

Please sign in to comment.