// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+exports[`compiler: v-show transform > on component 1`] = `
+"import { resolveComponent as _resolveComponent, createComponentWithFallback as _createComponentWithFallback, applyVShow as _applyVShow } from 'vue';
+
+export function render(_ctx) {
+ const _component_Comp = _resolveComponent("Comp")
+ const n0 = _createComponentWithFallback(_component_Comp, null, null, true)
+ _applyVShow(n0, () => (_ctx.foo))
+ return n0
+}"
+`;
+
exports[`compiler: v-show transform > simple expression 1`] = `
"import { applyVShow as _applyVShow, template as _template } from 'vue';
const t0 = _template("<div></div>", true)
}),
)
})
+
+ test('on component', () => {
+ const { code } = compileWithVShow(`<Comp v-show="foo"/>`)
+ expect(code).toMatchSnapshot()
+ })
})
isStaticExpression(e, this.root.options.bindingMetadata),
)
) {
- return this.registerOperation(...operations)
+ return operations.forEach(op => this.registerOperation(op))
}
this.block.expressions.push(...expressions)
}
}
- registerOperation(...node: OperationNode[]): void {
- this.block.operation.push(...node)
- }
-
- registerOperationAt(node: OperationNode, index: number): void {
- this.block.operation.splice(index, 0, node)
+ registerOperation(node: OperationNode, index?: number): void {
+ if (index !== undefined) {
+ this.block.operation.splice(index, 0, node)
+ } else {
+ this.block.operation.push(node)
+ }
}
create<T extends TemplateChildNode>(
type IRProps,
type IRPropsDynamicAttribute,
type IRPropsStatic,
- type OperationNode,
type VaporDirectiveNode,
} from '../ir'
import { EMPTY_EXPRESSION } from './utils'
}
context.dynamic.flags |= DynamicFlag.NON_TEMPLATE | DynamicFlag.INSERT
- const op: OperationNode = {
- type: IRNodeTypes.CREATE_COMPONENT_NODE,
- id: context.reference(),
- tag,
- props: propsResult[0] ? propsResult[1] : [propsResult[1]],
- asset,
- root: singleRoot,
- slots: [...context.slots],
- once: context.inVOnce,
- dynamic: dynamicComponent,
- }
- const hasVShow = findDir(node, 'show')
- if (hasVShow) {
- const showOperationIndex = context.block.operation.findIndex(
+
+ // ensure v-show is handled after the component is created
+ let showOperationIndex
+ if (findDir(node, 'show')) {
+ showOperationIndex = context.block.operation.findIndex(
op => op.type === IRNodeTypes.DIRECTIVE && op.name === 'show',
)
- context.registerOperationAt(op, showOperationIndex)
- } else {
- context.registerOperation(op)
}
+ context.registerOperation(
+ {
+ type: IRNodeTypes.CREATE_COMPONENT_NODE,
+ id: context.reference(),
+ tag,
+ props: propsResult[0] ? propsResult[1] : [propsResult[1]],
+ asset,
+ root: singleRoot,
+ slots: [...context.slots],
+ once: context.inVOnce,
+ dynamic: dynamicComponent,
+ },
+ showOperationIndex,
+ )
context.slots = []
}