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/vite.js
CHANGED
|
@@ -1030,14 +1030,20 @@ function collectScriptInfo(script) {
|
|
|
1030
1030
|
return false;
|
|
1031
1031
|
}
|
|
1032
1032
|
let found = false;
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
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:
|
|
1787
|
+
expr: transformEventHandlerExpression(
|
|
1757
1788
|
expr,
|
|
1758
1789
|
stateNames,
|
|
1759
1790
|
allSignalNames,
|
|
1760
1791
|
jsxFunctionNames
|
|
1761
|
-
)
|
|
1792
|
+
)
|
|
1762
1793
|
});
|
|
1763
1794
|
output += ` data-o-on-${event}="${id2}"`;
|
|
1764
1795
|
continue;
|