import { compile } from '../src' describe('ssr: components', () => { test('basic', () => { expect(compile(``).code).toMatchInlineSnapshot(` "const { resolveComponent } = require(\\"vue\\") const { _ssrRenderComponent } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_foo = resolveComponent(\\"foo\\") _ssrRenderComponent(_component_foo, { id: \\"a\\", prop: _ctx.b }, null, _parent) }" `) }) test('dynamic component', () => { expect(compile(``).code) .toMatchInlineSnapshot(` "const { resolveComponent } = require(\\"vue\\") const { _ssrRenderComponent } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_foo = resolveComponent(\\"foo\\") _ssrRenderComponent(_component_foo, { prop: \\"b\\" }, null, _parent) }" `) expect(compile(``).code) .toMatchInlineSnapshot(` "const { resolveComponent } = require(\\"vue\\") const { _ssrRenderComponent } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_compoonent = resolveComponent(\\"compoonent\\") _ssrRenderComponent(_component_compoonent, { is: _ctx.foo, prop: \\"b\\" }, null, _parent) }" `) }) describe('slots', () => { test('implicit default slot', () => { expect(compile(`hello
`).code).toMatchInlineSnapshot(` "const { resolveComponent } = require(\\"vue\\") const { _ssrRenderComponent } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_foo = resolveComponent(\\"foo\\") _ssrRenderComponent(_component_foo, null, { default: (_, _push, _parent) => { _push(\`hello
\`) }, _compiled: true }, _parent) }" `) }) test('explicit default slot', () => { expect(compile(`{{ msg + outer }}`).code) .toMatchInlineSnapshot(` "const { resolveComponent } = require(\\"vue\\") const { _ssrRenderComponent, _ssrInterpolate } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_foo = resolveComponent(\\"foo\\") _ssrRenderComponent(_component_foo, null, { default: ({ msg }, _push, _parent) => { _push(\`\${_ssrInterpolate(msg + _ctx.outer)}\`) }, _compiled: true }, _parent) }" `) }) test('named slots', () => { expect( compile(` `).code ).toMatchInlineSnapshot(` "const { resolveComponent } = require(\\"vue\\") const { _ssrRenderComponent } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_foo = resolveComponent(\\"foo\\") _ssrRenderComponent(_component_foo, null, { default: (_, _push, _parent) => { _push(\`foo\`) }, named: (_, _push, _parent) => { _push(\`bar\`) }, _compiled: true }, _parent) }" `) }) test('v-if slot', () => { expect( compile(` `).code ).toMatchInlineSnapshot(` "const { resolveComponent, createSlots } = require(\\"vue\\") const { _ssrRenderComponent } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_foo = resolveComponent(\\"foo\\") _ssrRenderComponent(_component_foo, null, createSlots({ _compiled: true }, [ (_ctx.ok) ? { name: \\"named\\", fn: (_, _push, _parent) => { _push(\`foo\`) } } : undefined ]), _parent) }" `) }) test('v-for slot', () => { expect( compile(` `).code ).toMatchInlineSnapshot(` "const { resolveComponent, renderList, createSlots } = require(\\"vue\\") const { _ssrRenderComponent, _ssrInterpolate } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { const _component_foo = resolveComponent(\\"foo\\") _ssrRenderComponent(_component_foo, null, createSlots({ _compiled: true }, [ renderList(_ctx.names, (key) => { return { name: key, fn: ({ msg }, _push, _parent) => { _push(\`\${_ssrInterpolate(msg + key + _ctx.bar)}\`) } } }) ]), _parent) }" `) }) }) })