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