fix(validator): fix the bug that property reference is wrong in complex expression

This commit is contained in:
Bowen Tan 2022-07-28 11:24:42 +08:00
parent 30d335040e
commit 8f53cd83c1
2 changed files with 18 additions and 3 deletions

View File

@ -35,6 +35,14 @@ describe('Field test', () => {
]);
});
it('stop member expression when meeting other expression ast node', () => {
const field = new FieldModel('{{ Array.from([]).fill() }}');
expect(field.isDynamic).toEqual(true);
expect(field.refComponentInfos['Array' as ComponentId].refProperties).toEqual([
'from',
]);
});
it('parse inline variable in expression', () => {
const field = new FieldModel('{{ [].length }}');
expect(field.isDynamic).toEqual(true);

View File

@ -196,11 +196,18 @@ export class FieldModel implements IFieldModel {
break;
case 'MemberExpression':
this.refComponentInfos[lastIdentifier]?.refProperties.push(
this.genPathFromMemberExpressionNode(expressionNode as ExpressionNode)
);
if (lastIdentifier) {
this.refComponentInfos[lastIdentifier]?.refProperties.push(
this.genPathFromMemberExpressionNode(expressionNode as ExpressionNode)
);
}
break;
case 'Literal':
// do nothing, just stop it from going to default
break;
default:
// clear lastIdentifier when meet other astNode to break the MemberExpression chain
lastIdentifier = '' as ComponentId;
}
},
VariableDeclarator: declarator => {