import { createApp, createVNode } from 'vue'
-import { renderToString } from '../src/renderToString'
+import { renderToString } from '../src'
describe('ssr: dynamic component', () => {
test('resolved to component', async () => {
).toBe(`<div><!--[--><span>slot</span><!--]--></div>`)
})
+ test('resolved to component with v-show', async () => {
+ expect(
+ await renderToString(
+ createApp({
+ components: {
+ one: {
+ template: `<component is="div"><slot/></component>`,
+ },
+ },
+ template: `<one><one v-show="false">hi</one></one>`,
+ }),
+ ),
+ ).toBe(
+ `<div><!--[--><div style=\"display:none;\"><!--[-->hi<!--]--></div><!--]--></div>`,
+ )
+ })
+
test('resolve to element', async () => {
expect(
await renderToString(
parentComponent: ComponentInternalInstance,
slotScopeId?: string,
): void {
- const { type, shapeFlag, children } = vnode
+ const { type, shapeFlag, children, dirs, props } = vnode
+ if (dirs) {
+ vnode.props = applySSRDirectives(vnode, props, dirs)
+ }
+
switch (type) {
case Text:
push(escapeHtml(children as string))
slotScopeId?: string,
) {
const tag = vnode.type as string
- let { props, children, shapeFlag, scopeId, dirs } = vnode
+ let { props, children, shapeFlag, scopeId } = vnode
let openTag = `<${tag}`
- if (dirs) {
- props = applySSRDirectives(vnode, props, dirs)
- }
-
if (props) {
openTag += ssrRenderAttrs(props, tag)
}