@vitarx/plugin-vite 1.0.2 → 1.0.4
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.
|
@@ -111,6 +111,16 @@ function processChildExpression(expr, ctx) {
|
|
|
111
111
|
if (isLogicalExpression(expr) || isBinaryExpression(expr) || expr.type === 'CallExpression') {
|
|
112
112
|
return wrapWithExpr(expr, ctx);
|
|
113
113
|
}
|
|
114
|
+
// 包含插值表达式的模板字面量是动态的,需要用 expr 包装以启用响应式追踪
|
|
115
|
+
// 纯静态模板字符串转为 StringLiteral 直接返回
|
|
116
|
+
if (t.isTemplateLiteral(expr)) {
|
|
117
|
+
if (expr.expressions.length > 0) {
|
|
118
|
+
return wrapWithExpr(expr, ctx);
|
|
119
|
+
}
|
|
120
|
+
// 无插值的模板字面量等价于静态字符串
|
|
121
|
+
const raw = expr.quasis.map(q => q.value.cooked).join('');
|
|
122
|
+
return t.stringLiteral(raw);
|
|
123
|
+
}
|
|
114
124
|
// 其他类型的表达式直接返回,无需特殊处理
|
|
115
125
|
return expr;
|
|
116
126
|
}
|
|
@@ -11,3 +11,11 @@ import { type Node } from '@babel/types';
|
|
|
11
11
|
* @returns 是否为纯空白文本
|
|
12
12
|
*/
|
|
13
13
|
export declare function isWhitespaceJSXText(node: Node): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* 判断节点是否为 JSX 注释
|
|
16
|
+
* JSX 注释写作 {/* comment *\/},解析为 JSXExpressionContainer,
|
|
17
|
+
* 其 expression 为 JSXEmptyExpression(注释文本挂在 innerComments 上)
|
|
18
|
+
* @param node - AST 节点
|
|
19
|
+
* @returns 是否为 JSX 注释
|
|
20
|
+
*/
|
|
21
|
+
export declare function isJSXComment(node: Node): boolean;
|
package/dist/utils/ast-guards.js
CHANGED
|
@@ -17,3 +17,14 @@ export function isWhitespaceJSXText(node) {
|
|
|
17
17
|
// 使用正则表达式判断是否只包含空白字符
|
|
18
18
|
return /^\s*$/.test(node.value);
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* 判断节点是否为 JSX 注释
|
|
22
|
+
* JSX 注释写作 {/* comment *\/},解析为 JSXExpressionContainer,
|
|
23
|
+
* 其 expression 为 JSXEmptyExpression(注释文本挂在 innerComments 上)
|
|
24
|
+
* @param node - AST 节点
|
|
25
|
+
* @returns 是否为 JSX 注释
|
|
26
|
+
*/
|
|
27
|
+
export function isJSXComment(node) {
|
|
28
|
+
return (node.type === 'JSXExpressionContainer' &&
|
|
29
|
+
node.expression.type === 'JSXEmptyExpression');
|
|
30
|
+
}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { isWhitespaceJSXText } from './ast-guards.js';
|
|
1
|
+
export { isWhitespaceJSXText, isJSXComment } from './ast-guards.js';
|
|
2
2
|
export { getJSXElementName, resolveJSXElementType, isPureCompileComponent, isComponent, isNativeElement, getJSXAttributeByName, hasDirective, getDirectiveValue, isVIfChain, isVIf, isVElseIf, isVElse, removeVDirectives, removeVIfChainDirectives, removeAttribute, filterWhitespaceChildren, hasEffectiveChildren, filterEffectiveChildren, validateNoDirectMatchChild } from './jsx-helpers.js';
|
|
3
3
|
export { createUnrefCall, createAccessorCall, createExprCall, createBranchCall, createCreateViewCall, createWithDirectivesCall, createArrowFunction, createLocationObject, addPureComment, getAlias, getDevLocInfo } from './ast-builders.js';
|
|
4
4
|
export { collectPatternBindings, collectObjectPatternBindings } from './pattern-helpers.js';
|
package/dist/utils/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// 类型守卫
|
|
2
|
-
export { isWhitespaceJSXText } from './ast-guards.js';
|
|
2
|
+
export { isWhitespaceJSXText, isJSXComment } from './ast-guards.js';
|
|
3
3
|
// JSX 辅助函数
|
|
4
4
|
export { getJSXElementName, resolveJSXElementType, isPureCompileComponent, isComponent, isNativeElement, getJSXAttributeByName, hasDirective, getDirectiveValue, isVIfChain, isVIf, isVElseIf, isVElse, removeVDirectives, removeVIfChainDirectives, removeAttribute, filterWhitespaceChildren, hasEffectiveChildren, filterEffectiveChildren, validateNoDirectMatchChild } from './jsx-helpers.js';
|
|
5
5
|
// AST 构建函数
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import * as t from '@babel/types';
|
|
7
7
|
import { isJSXElement, isJSXText } from '@babel/types';
|
|
8
8
|
import { createError } from '../error.js';
|
|
9
|
-
import { isWhitespaceJSXText } from './ast-guards.js';
|
|
9
|
+
import { isJSXComment, isWhitespaceJSXText } from './ast-guards.js';
|
|
10
10
|
import { getDirectiveValue, hasDirective, isVElse, isVElseIf, isVIf, isVIfChain } from './jsx-helpers.js';
|
|
11
11
|
/**
|
|
12
12
|
* 验证 v-if 链的合法性
|
|
@@ -135,6 +135,11 @@ function collectSingleChainFromFragment(children, startIndex) {
|
|
|
135
135
|
j++;
|
|
136
136
|
continue;
|
|
137
137
|
}
|
|
138
|
+
// 跳过 JSX 注释节点(允许链元素间有注释,如 {/* comment *\/})
|
|
139
|
+
if (isJSXComment(nextChild)) {
|
|
140
|
+
j++;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
138
143
|
// 遇到非 JSXElement,链结束
|
|
139
144
|
if (!isJSXElement(nextChild))
|
|
140
145
|
break;
|