diff --git a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts index 1258398d465..33fdb7dba19 100644 --- a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts @@ -3,7 +3,8 @@ import { baseParse as parse, transform, ErrorCodes, - BindingTypes + BindingTypes, + NodeTransform } from '../../src' import { RESOLVE_COMPONENT, @@ -939,4 +940,35 @@ describe('compiler: element transform', () => { isBlock: true }) }) + + test('should process node when node has been replaced', () => { + // a NodeTransform that swaps out
with + const customNodeTransform: NodeTransform = (node, context) => { + if ( + node.type === NodeTypes.ELEMENT && + node.tag === 'div' && + node.props.some( + prop => + prop.type === NodeTypes.ATTRIBUTE && + prop.name === 'id' && + prop.value && + prop.value.content === 'foo' + ) + ) { + context.replaceNode({ + ...node, + tag: 'span' + }) + } + } + const ast = parse(`
`) + transform(ast, { + nodeTransforms: [transformElement, transformText, customNodeTransform] + }) + expect((ast as any).children[0].children[0].codegenNode).toMatchObject({ + type: NodeTypes.VNODE_CALL, + tag: '"span"', + isBlock: false + }) + }) })