82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
import { defineComponent, h, createSSRApp } from 'vue';
|
|
import { renderToString } from 'vue/server-renderer';
|
|
|
|
const setup = () => {};
|
|
|
|
const contexts = /* @__PURE__ */ new WeakMap();
|
|
const ID_PREFIX = "s";
|
|
function getContext(rendererContextResult) {
|
|
if (contexts.has(rendererContextResult)) {
|
|
return contexts.get(rendererContextResult);
|
|
}
|
|
const ctx = {
|
|
currentIndex: 0,
|
|
get id() {
|
|
return ID_PREFIX + this.currentIndex.toString();
|
|
}
|
|
};
|
|
contexts.set(rendererContextResult, ctx);
|
|
return ctx;
|
|
}
|
|
function incrementId(rendererContextResult) {
|
|
const ctx = getContext(rendererContextResult);
|
|
const id = ctx.id;
|
|
ctx.currentIndex++;
|
|
return id;
|
|
}
|
|
|
|
const StaticHtml = defineComponent({
|
|
props: {
|
|
value: String,
|
|
name: String,
|
|
hydrate: {
|
|
type: Boolean,
|
|
default: true
|
|
}
|
|
},
|
|
setup({ name, value, hydrate }) {
|
|
if (!value) return () => null;
|
|
let tagName = hydrate ? "astro-slot" : "astro-static-slot";
|
|
return () => h(tagName, { name, innerHTML: value });
|
|
}
|
|
});
|
|
var static_html_default = StaticHtml;
|
|
|
|
async function check(Component) {
|
|
return !!Component["ssrRender"] || !!Component["__ssrInlineRender"];
|
|
}
|
|
async function renderToStaticMarkup(Component, inputProps, slotted, metadata) {
|
|
let prefix;
|
|
if (this && this.result) {
|
|
prefix = incrementId(this.result);
|
|
}
|
|
const attrs = { prefix };
|
|
const slots = {};
|
|
const props = { ...inputProps };
|
|
delete props.slot;
|
|
for (const [key, value] of Object.entries(slotted)) {
|
|
slots[key] = () => h(static_html_default, {
|
|
value,
|
|
name: key === "default" ? void 0 : key,
|
|
// Adjust how this is hydrated only when the version of Astro supports `astroStaticSlot`
|
|
hydrate: metadata?.astroStaticSlot ? !!metadata.hydrate : true
|
|
});
|
|
}
|
|
const app = createSSRApp({ render: () => h(Component, props, slots) });
|
|
app.config.idPrefix = prefix;
|
|
await setup();
|
|
const html = await renderToString(app);
|
|
return { html, attrs };
|
|
}
|
|
const renderer = {
|
|
name: "@astrojs/vue",
|
|
check,
|
|
renderToStaticMarkup,
|
|
supportsAstroStaticSlot: true
|
|
};
|
|
var server_default = renderer;
|
|
|
|
const renderers = [Object.assign({"name":"@astrojs/vue","clientEntrypoint":"@astrojs/vue/client.js","serverEntrypoint":"@astrojs/vue/server.js"}, { ssr: server_default }),];
|
|
|
|
export { renderers };
|