olova 2.0.70 → 2.0.72

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/vite.js CHANGED
@@ -1030,14 +1030,20 @@ function collectScriptInfo(script) {
1030
1030
  return false;
1031
1031
  }
1032
1032
  let found = false;
1033
- traverse(parseModule(`(${generate2(node).code})`), {
1034
- JSXElement() {
1035
- found = true;
1036
- },
1037
- JSXFragment() {
1038
- found = true;
1039
- }
1040
- });
1033
+ try {
1034
+ const generated = generate2(node).code;
1035
+ const code = t.isBlockStatement(node) ? `(() => ${generated})` : `(${generated})`;
1036
+ traverse(parseModule(code), {
1037
+ JSXElement() {
1038
+ found = true;
1039
+ },
1040
+ JSXFragment() {
1041
+ found = true;
1042
+ }
1043
+ });
1044
+ } catch {
1045
+ found = false;
1046
+ }
1041
1047
  return found;
1042
1048
  };
1043
1049
  traverse(ast, {
@@ -1438,6 +1444,31 @@ function transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames
1438
1444
  containsJsx = containsJsx || expressionProducesHtml(statement.expression);
1439
1445
  return { code: generate2(statement.expression).code, containsJsx };
1440
1446
  }
1447
+ function parseExpressionNode(expr) {
1448
+ try {
1449
+ const ast = parseModule(`(${expr})`);
1450
+ const statement = ast.program.body[0];
1451
+ return statement && t.isExpressionStatement(statement) ? statement.expression : null;
1452
+ } catch {
1453
+ return null;
1454
+ }
1455
+ }
1456
+ function isDirectEventHandlerExpression(node) {
1457
+ return !!(node && (t.isIdentifier(node) || t.isMemberExpression(node) || t.isOptionalMemberExpression(node) || t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)));
1458
+ }
1459
+ function transformEventHandlerExpression(expr, stateNames, allSignalNames, jsxFunctionNames) {
1460
+ const expressionNode = parseExpressionNode(expr);
1461
+ const transformed = transformExpression(
1462
+ expr,
1463
+ stateNames,
1464
+ allSignalNames,
1465
+ jsxFunctionNames
1466
+ ).code;
1467
+ if (isDirectEventHandlerExpression(expressionNode)) {
1468
+ return transformed;
1469
+ }
1470
+ return `($event) => (${transformed})`;
1471
+ }
1441
1472
  function jsxToTemplateHtml(node) {
1442
1473
  if (t.isJSXElement(node)) {
1443
1474
  const opening = node.openingElement;
@@ -1753,12 +1784,12 @@ function transformTemplate(template, stateNames, allSignalNames, jsxFunctionName
1753
1784
  eventBindings.push({
1754
1785
  id: id2,
1755
1786
  event,
1756
- expr: transformExpression(
1787
+ expr: transformEventHandlerExpression(
1757
1788
  expr,
1758
1789
  stateNames,
1759
1790
  allSignalNames,
1760
1791
  jsxFunctionNames
1761
- ).code
1792
+ )
1762
1793
  });
1763
1794
  output += ` data-o-on-${event}="${id2}"`;
1764
1795
  continue;