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 +27 -2
- package/dist/compiler.js.map +1 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/dist/vite.js +27 -2
- package/dist/vite.js.map +1 -1
- package/package.json +1 -1
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:
|
|
1777
|
+
expr: transformEventHandlerExpression(
|
|
1753
1778
|
expr,
|
|
1754
1779
|
stateNames,
|
|
1755
1780
|
allSignalNames,
|
|
1756
1781
|
jsxFunctionNames
|
|
1757
|
-
)
|
|
1782
|
+
)
|
|
1758
1783
|
});
|
|
1759
1784
|
output += ` data-o-on-${event}="${id2}"`;
|
|
1760
1785
|
continue;
|