diff --git a/packages/compiler-core/__tests__/transforms/vFor.spec.ts b/packages/compiler-core/__tests__/transforms/vFor.spec.ts index 7fabcbb579c..e434b8888a6 100644 --- a/packages/compiler-core/__tests__/transforms/vFor.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vFor.spec.ts @@ -202,6 +202,18 @@ describe('compiler: v-for', () => { expect(forNode.valueAlias).toBeUndefined() expect((forNode.source as SimpleExpressionNode).content).toBe('items') }) + + test('source containing string expression with spaces', () => { + const { node: forNode } = parseWithForTransform( + ``, + ) + expect(forNode.keyAlias).toBeUndefined() + expect(forNode.objectIndexAlias).toBeUndefined() + expect((forNode.valueAlias as SimpleExpressionNode).content).toBe('item') + expect((forNode.source as SimpleExpressionNode).content).toBe( + "state ['my items']", + ) + }) }) describe('errors', () => { @@ -253,6 +265,18 @@ describe('compiler: v-for', () => { ) }) + test('missing source and have multiple spaces with', () => { + const onError = vi.fn() + parseWithForTransform('', { onError }) + + expect(onError).toHaveBeenCalledTimes(1) + expect(onError).toHaveBeenCalledWith( + expect.objectContaining({ + code: ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION, + }), + ) + }) + test('missing value', () => { const onError = vi.fn() parseWithForTransform('', { onError }) diff --git a/packages/compiler-core/src/utils.ts b/packages/compiler-core/src/utils.ts index 99a2c5b61a8..aa596028440 100644 --- a/packages/compiler-core/src/utils.ts +++ b/packages/compiler-core/src/utils.ts @@ -499,4 +499,4 @@ export function getMemoedVNodeCall(node: BlockCodegenNode | MemoExpression) { } } -export const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/ +export const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+(\S[\s\S]*)/