import type { ComponentRenderer } from '../../@types/renderer'; import type { Component as VueComponent } from 'vue'; import { renderToString } from '@vue/server-renderer'; import { defineComponent, createSSRApp, h as createElement } from 'vue'; import { createRenderer } from './renderer'; /** * Users might attempt to use :vueAttribute syntax to pass primitive values. * If so, try to JSON.parse them to get the primitives */ function cleanPropsForVue(obj: Record) { let cleaned = {} as any; for (let [key, value] of Object.entries(obj)) { if (key.startsWith(':')) { key = key.slice(1); if (typeof value === 'string') { try { value = JSON.parse(value); } catch (e) {} } } cleaned[key] = value; } return cleaned; } const Vue: ComponentRenderer = { jsxPragma: createElement, jsxPragmaName: 'createElement', renderStatic(Component) { return async (props, ...children) => { const App = defineComponent({ components: { Component, }, data() { return { props }; }, template: `${children.join('\n')}`, }); const app = createSSRApp(App); const html = await renderToString(app); return html; }; }, imports: { vue: ['createApp', 'h: createElement'], }, render({ Component, root, props, children }) { const vueProps = cleanPropsForVue(JSON.parse(props)); return `const App = { render: () => createElement(${Component}, ${JSON.stringify(vueProps)}, { default: () => ${children} }) }; 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;
AgeCommit message (Expand)AuthorFilesLines
2025-02-26New bridge for the latest Shadertoy submissions (#4456)Gravatar Tobias Alexander Franke 1-0/+100
2025-02-24Fix data-lot-id not being correctly set so use href instead (#4453)Gravatar André Andersson 1-1/+1
2025-02-14fix(github): semi-repair (#4449)Gravatar Dag 1-12/+15
2025-02-14fix(vk): semi-disable broken bridge (#4448)Gravatar Dag 1-8/+15
2025-02-08fix nn.de description and paywall filter (#4444)Gravatar Christian Schabesberger 1-2/+2
2025-02-05fix CarThrottleBridge (#4442)Gravatar Tostiman 1-3/+3