1352
const expr = exprPath as NodePath<t.JSXElement>;
1353
const opening = expr.get("openingElement");
1354
const tag = lowerJsxElementName(builder, opening.get("name"));
1355
- const children = expr
1355
+ const children: Array<Place> = expr
1356
.get("children")
1357
- .map((child) => lowerJsxElement(builder, child));
1357
+ .map((child) => lowerJsxElement(builder, child))
1358
+ .filter(notNull);
1359
const props: Array<JsxAttribute> = [];
1360
for (const attribute of opening.get("attributes")) {
1361
if (attribute.isJSXSpreadAttribute()) {
1427
}
1428
case "JSXFragment": {
1429
const expr = exprPath as NodePath<t.JSXFragment>;
1429
- const children = expr
1430
+ const children: Array<Place> = expr
1431
.get("children")
1431
- .map((child) => lowerJsxElement(builder, child));
1432
+ .map((child) => lowerJsxElement(builder, child))
1433
+ .filter(notNull);
1434
return {
1435
kind: "JsxFragment",
1436
children,
1952
| t.JSXElement
1953
| t.JSXFragment
1954
>
1953
-): Place {
1955
+): Place | null {
1956
const exprNode = exprPath.node;
1957
const exprLoc = exprNode.loc ?? GeneratedSource;
1958
if (exprPath.isJSXElement() || exprPath.isJSXFragment()) {
1959
return lowerExpressionToTemporary(builder, exprPath);
1960
} else if (exprPath.isJSXExpressionContainer()) {
1961
const expression = exprPath.get("expression");
1960
- if (!expression.isExpression()) {
1961
- builder.errors.push({
1962
- reason: `(BuildHIR::lowerJsxElement) Handle ${expression.type} expressions`,
1963
- severity: ErrorSeverity.Todo,
1964
- nodePath: expression,
1965
- });
1966
- const place = lowerValueToTemporary(builder, {
1967
- kind: "UnsupportedNode",
1968
- node: exprNode,
1969
- loc: exprLoc,
1970
- });
1971
- return { ...place };
1962
+ if (expression.isJSXEmptyExpression()) {
1963
+ return null;
1964
+ } else {
1965
+ invariant(
1966
+ expression.isExpression(),
1967
+ `(BuildHIR::lowerJsxElement) Expected Expression but found ${expression.type}!`
1968
+ );
1969
+ return lowerExpressionToTemporary(builder, expression);
1970
}
1973
- return lowerExpressionToTemporary(builder, expression);
1971
} else if (exprPath.isJSXText()) {
1972
const place = lowerValueToTemporary(builder, {
1973
kind: "JSXText",
2462
2463
return { identifiers: [...capturedIds], refs: [...capturedRefs] };
2464
}
2465
+
2466
+function notNull<T>(value: T | null): value is T {
2467
+ return value !== null;
2468
+}