@vitarx/plugin-vite 1.0.0-beta.4 → 1.0.0-beta.6
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/passes/jsx/processChildren.js +10 -12
- package/dist/utils/jsx-helpers.js +17 -18
- package/package.json +1 -1
|
@@ -55,16 +55,18 @@ export function processChildren(children, ctx) {
|
|
|
55
55
|
*/
|
|
56
56
|
function processChildNode(node, ctx) {
|
|
57
57
|
if (isJSXText(node)) {
|
|
58
|
-
|
|
59
|
-
if (!trimmed)
|
|
58
|
+
if (!node.value.trim())
|
|
60
59
|
return null;
|
|
61
|
-
|
|
60
|
+
const collapsed = node.value.replace(/\s+/g, ' ');
|
|
61
|
+
return t.stringLiteral(collapsed);
|
|
62
62
|
}
|
|
63
|
+
// 处理 JSX 表达式容器,递归处理容器内的表达式
|
|
63
64
|
if (isJSXExpressionContainer(node)) {
|
|
64
65
|
if (node.expression.type === 'JSXEmptyExpression')
|
|
65
66
|
return null;
|
|
66
67
|
return processChildExpression(node.expression, ctx);
|
|
67
68
|
}
|
|
69
|
+
// 处理 JSX 展开表达式,递归处理展开表达式
|
|
68
70
|
if (node.type === 'JSXSpreadChild') {
|
|
69
71
|
return processChildExpression(node.expression, ctx);
|
|
70
72
|
}
|
|
@@ -84,17 +86,13 @@ function processChildNode(node, ctx) {
|
|
|
84
86
|
* 根据表达式类型生成对应的运行时 API 调用
|
|
85
87
|
* CallExpression 在此用 expr 包装(用户函数调用需要响应式追踪)
|
|
86
88
|
*/
|
|
87
|
-
/**
|
|
88
|
-
* 处理子表达式函数
|
|
89
|
-
* @param {t.Expression} expr - 要处理的表达式节点
|
|
90
|
-
* @param {TransformContext} ctx - 转换上下文,包含转换所需的环境信息
|
|
91
|
-
* @returns {t.Expression} 处理后的表达式节点
|
|
92
|
-
*/
|
|
93
89
|
function processChildExpression(expr, ctx) {
|
|
94
|
-
//
|
|
95
|
-
if (
|
|
90
|
+
// 字符串表达式原样保留
|
|
91
|
+
if (t.isStringLiteral(expr))
|
|
92
|
+
return expr;
|
|
93
|
+
// 标识符表达式(如 variable),原样保留
|
|
94
|
+
if (isIdentifier(expr))
|
|
96
95
|
return expr;
|
|
97
|
-
}
|
|
98
96
|
// 如果是成员表达式(如 obj.property),调用专门的处理函数
|
|
99
97
|
if (isMemberExpression(expr)) {
|
|
100
98
|
return handleMemberExpression(expr, ctx);
|
|
@@ -200,21 +200,28 @@ export function removeAttribute(node, attrName) {
|
|
|
200
200
|
export function filterWhitespaceChildren(children) {
|
|
201
201
|
return children.filter(child => !isJSXText(child) || !isWhitespaceJSXText(child));
|
|
202
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* 判断子节点是否为有效子元素
|
|
205
|
+
* JSX 注释和纯空白文本视为无效
|
|
206
|
+
* @param child - 子节点
|
|
207
|
+
* @returns 是否有效
|
|
208
|
+
*/
|
|
209
|
+
function isEffectiveChild(child) {
|
|
210
|
+
if (isJSXText(child)) {
|
|
211
|
+
return child.value.trim().length > 0;
|
|
212
|
+
}
|
|
213
|
+
if (child.type === 'JSXExpressionContainer') {
|
|
214
|
+
return child.expression.type !== 'JSXEmptyExpression';
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
203
218
|
/**
|
|
204
219
|
* 检查 JSX 元素是否有有效的子元素
|
|
205
220
|
* @param node - JSX 元素节点
|
|
206
221
|
* @returns 是否有有效子元素
|
|
207
222
|
*/
|
|
208
223
|
export function hasEffectiveChildren(node) {
|
|
209
|
-
return node.children.some(
|
|
210
|
-
if (isJSXText(child)) {
|
|
211
|
-
return child.value.trim().length > 0;
|
|
212
|
-
}
|
|
213
|
-
if (child.type === 'JSXExpressionContainer') {
|
|
214
|
-
return child.expression.type !== 'JSXEmptyExpression';
|
|
215
|
-
}
|
|
216
|
-
return true;
|
|
217
|
-
});
|
|
224
|
+
return node.children.some(isEffectiveChild);
|
|
218
225
|
}
|
|
219
226
|
/**
|
|
220
227
|
* 过滤并返回有效的子元素
|
|
@@ -222,15 +229,7 @@ export function hasEffectiveChildren(node) {
|
|
|
222
229
|
* @returns 有效子元素数组
|
|
223
230
|
*/
|
|
224
231
|
export function filterEffectiveChildren(node) {
|
|
225
|
-
return node.children.filter(
|
|
226
|
-
if (isJSXText(child)) {
|
|
227
|
-
return child.value.trim().length > 0;
|
|
228
|
-
}
|
|
229
|
-
if (child.type === 'JSXExpressionContainer') {
|
|
230
|
-
return child.expression.type !== 'JSXEmptyExpression';
|
|
231
|
-
}
|
|
232
|
-
return true;
|
|
233
|
-
});
|
|
232
|
+
return node.children.filter(isEffectiveChild);
|
|
234
233
|
}
|
|
235
234
|
/**
|
|
236
235
|
* 校验子节点中不能直接包含 Match 组件
|