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/vite.js
CHANGED
|
@@ -1438,6 +1438,31 @@ function transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames
|
|
|
1438
1438
|
containsJsx = containsJsx || expressionProducesHtml(statement.expression);
|
|
1439
1439
|
return { code: generate2(statement.expression).code, containsJsx };
|
|
1440
1440
|
}
|
|
1441
|
+
function parseExpressionNode(expr) {
|
|
1442
|
+
try {
|
|
1443
|
+
const ast = parseModule(`(${expr})`);
|
|
1444
|
+
const statement = ast.program.body[0];
|
|
1445
|
+
return statement && t.isExpressionStatement(statement) ? statement.expression : null;
|
|
1446
|
+
} catch {
|
|
1447
|
+
return null;
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
function isDirectEventHandlerExpression(node) {
|
|
1451
|
+
return !!(node && (t.isIdentifier(node) || t.isMemberExpression(node) || t.isOptionalMemberExpression(node) || t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)));
|
|
1452
|
+
}
|
|
1453
|
+
function transformEventHandlerExpression(expr, stateNames, allSignalNames, jsxFunctionNames) {
|
|
1454
|
+
const expressionNode = parseExpressionNode(expr);
|
|
1455
|
+
const transformed = transformExpression(
|
|
1456
|
+
expr,
|
|
1457
|
+
stateNames,
|
|
1458
|
+
allSignalNames,
|
|
1459
|
+
jsxFunctionNames
|
|
1460
|
+
).code;
|
|
1461
|
+
if (isDirectEventHandlerExpression(expressionNode)) {
|
|
1462
|
+
return transformed;
|
|
1463
|
+
}
|
|
1464
|
+
return `($event) => (${transformed})`;
|
|
1465
|
+
}
|
|
1441
1466
|
function jsxToTemplateHtml(node) {
|
|
1442
1467
|
if (t.isJSXElement(node)) {
|
|
1443
1468
|
const opening = node.openingElement;
|
|
@@ -1753,12 +1778,12 @@ function transformTemplate(template, stateNames, allSignalNames, jsxFunctionName
|
|
|
1753
1778
|
eventBindings.push({
|
|
1754
1779
|
id: id2,
|
|
1755
1780
|
event,
|
|
1756
|
-
expr:
|
|
1781
|
+
expr: transformEventHandlerExpression(
|
|
1757
1782
|
expr,
|
|
1758
1783
|
stateNames,
|
|
1759
1784
|
allSignalNames,
|
|
1760
1785
|
jsxFunctionNames
|
|
1761
|
-
)
|
|
1786
|
+
)
|
|
1762
1787
|
});
|
|
1763
1788
|
output += ` data-o-on-${event}="${id2}"`;
|
|
1764
1789
|
continue;
|