server.js 1001 B

123456789101112131415161718192021222324252627282930313233
  1. import { h, createSSRApp } from 'vue';
  2. import { renderToString } from 'vue/server-renderer';
  3. import { setup } from 'virtual:@astrojs/vue/app';
  4. import StaticHtml from './static-html.js';
  5. function check(Component) {
  6. return !!Component['ssrRender'] || !!Component['__ssrInlineRender'];
  7. }
  8. async function renderToStaticMarkup(Component, inputProps, slotted, metadata) {
  9. const slots = {};
  10. const props = { ...inputProps };
  11. delete props.slot;
  12. for (const [key, value] of Object.entries(slotted)) {
  13. slots[key] = () =>
  14. h(StaticHtml, {
  15. value,
  16. name: key === 'default' ? undefined : key,
  17. // Adjust how this is hydrated only when the version of Astro supports `astroStaticSlot`
  18. hydrate: metadata.astroStaticSlot ? !!metadata.hydrate : true,
  19. });
  20. }
  21. const app = createSSRApp({ render: () => h(Component, props, slots) });
  22. await setup(app);
  23. const html = await renderToString(app);
  24. return { html };
  25. }
  26. export default {
  27. check,
  28. renderToStaticMarkup,
  29. supportsAstroStaticSlot: true,
  30. };