olova 2.0.70 → 2.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/compiler.js CHANGED
@@ -1434,6 +1434,31 @@ function transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames
1434
1434
  containsJsx = containsJsx || expressionProducesHtml(statement.expression);
1435
1435
  return { code: generate2(statement.expression).code, containsJsx };
1436
1436
  }
1437
+ function parseExpressionNode(expr) {
1438
+ try {
1439
+ const ast = parseModule(`(${expr})`);
1440
+ const statement = ast.program.body[0];
1441
+ return statement && t.isExpressionStatement(statement) ? statement.expression : null;
1442
+ } catch {
1443
+ return null;
1444
+ }
1445
+ }
1446
+ function isDirectEventHandlerExpression(node) {
1447
+ return !!(node && (t.isIdentifier(node) || t.isMemberExpression(node) || t.isOptionalMemberExpression(node) || t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)));
1448
+ }
1449
+ function transformEventHandlerExpression(expr, stateNames, allSignalNames, jsxFunctionNames) {
1450
+ const expressionNode = parseExpressionNode(expr);
1451
+ const transformed = transformExpression(
1452
+ expr,
1453
+ stateNames,
1454
+ allSignalNames,
1455
+ jsxFunctionNames
1456
+ ).code;
1457
+ if (isDirectEventHandlerExpression(expressionNode)) {
1458
+ return transformed;
1459
+ }
1460
+ return `($event) => (${transformed})`;
1461
+ }
1437
1462
  function jsxToTemplateHtml(node) {
1438
1463
  if (t.isJSXElement(node)) {
1439
1464
  const opening = node.openingElement;
@@ -1749,12 +1774,12 @@ function transformTemplate(template, stateNames, allSignalNames, jsxFunctionName
1749
1774
  eventBindings.push({
1750
1775
  id: id2,
1751
1776
  event,
1752
- expr: transformExpression(
1777
+ expr: transformEventHandlerExpression(
1753
1778
  expr,
1754
1779
  stateNames,
1755
1780
  allSignalNames,
1756
1781
  jsxFunctionNames
1757
- ).code
1782
+ )
1758
1783
  });
1759
1784
  output += ` data-o-on-${event}="${id2}"`;
1760
1785
  continue;