summaryrefslogtreecommitdiff
path: root/src/frontend/render/vue.ts
blob: 3ffa4ed0d47432e799b1035ec3a853702cc7d9da (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import { renderToString } from '@vue/server-renderer';
import { createSSRApp, h as createElement } from 'vue';
import { Renderer, createRenderer } from './renderer';

const Vue: Renderer = {
  renderStatic(Component) {
    return async (props, ...children) => {
      const app = createSSRApp({
        components: {
          Component,
        },
        render() {
          return createElement(Component as any, props);
        },
      });
      const html = await renderToString(app);
      return html;
    };
  },
  imports: {
    vue: ['createApp', 'h as createElement'],
  },
  render({ Component, root, props }) {
    return `const App = { render() { return createElement(${Component}, ${props} )} };
createApp(App).mount(${root});`;
  },
};

const renderer = createRenderer(Vue);

export const __vue_static = renderer.static;
export const __vue_load = renderer.load;
export const __vue_idle = renderer.idle;
export const __vue_visible = renderer.visible;