summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/@types/renderer.ts12
-rw-r--r--src/frontend/render/preact.ts4
-rw-r--r--src/frontend/render/react.ts4
-rw-r--r--src/frontend/render/renderer.ts4
-rw-r--r--src/frontend/render/svelte.ts3
-rw-r--r--src/frontend/render/vue.ts3
6 files changed, 20 insertions, 10 deletions
diff --git a/src/@types/renderer.ts b/src/@types/renderer.ts
index 488a91130..39998ba24 100644
--- a/src/@types/renderer.ts
+++ b/src/@types/renderer.ts
@@ -1,11 +1,16 @@
+import type { Component as VueComponent } from 'vue';
+import type { ComponentType as PreactComponent } from 'preact';
+import type { ComponentType as ReactComponent } from 'react';
+import type { SvelteComponent } from 'svelte';
+
export interface DynamicRenderContext {
componentUrl: string;
componentExport: string;
frameworkUrls: string;
}
-export interface ComponentRenderer {
- renderStatic: StaticRendererGenerator;
+export interface ComponentRenderer<T> {
+ renderStatic: StaticRendererGenerator<T>;
render(context: { root: string; Component: string; props: string; [key: string]: string }): string;
imports?: Record<string, string[]>;
}
@@ -15,6 +20,9 @@ export interface ComponentContext {
root: string;
}
+export type SupportedComponentRenderer = ComponentRenderer<VueComponent> |
+ ComponentRenderer<PreactComponent> | ComponentRenderer<ReactComponent> |
+ ComponentRenderer<SvelteComponent>;
export type StaticRenderer = (props: Record<string, any>, ...children: any[]) => Promise<string>;
export type StaticRendererGenerator<T = any> = (Component: T) => StaticRenderer;
export type DynamicRenderer = (props: Record<string, any>, ...children: any[]) => Promise<string>;
diff --git a/src/frontend/render/preact.ts b/src/frontend/render/preact.ts
index 3bc266735..5f5c03f56 100644
--- a/src/frontend/render/preact.ts
+++ b/src/frontend/render/preact.ts
@@ -1,4 +1,4 @@
-import { h, render } from 'preact';
+import { h, render, ComponentType } from 'preact';
import { renderToString } from 'preact-render-to-string';
import type { ComponentRenderer } from '../../@types/renderer';
import { createRenderer } from './renderer';
@@ -6,7 +6,7 @@ import { createRenderer } from './renderer';
// This prevents tree-shaking of render.
Function.prototype(render);
-const Preact: ComponentRenderer = {
+const Preact: ComponentRenderer<ComponentType> = {
renderStatic(Component) {
return async (props, ...children) => renderToString(h(Component, props, ...children));
},
diff --git a/src/frontend/render/react.ts b/src/frontend/render/react.ts
index b9e55f1c9..56c6decb0 100644
--- a/src/frontend/render/react.ts
+++ b/src/frontend/render/react.ts
@@ -1,9 +1,9 @@
import type { ComponentRenderer } from '../../@types/renderer';
-import React from 'react';
+import React, { ComponentType } from 'react';
import ReactDOMServer from 'react-dom/server';
import { createRenderer } from './renderer';
-const ReactRenderer: ComponentRenderer = {
+const ReactRenderer: ComponentRenderer<ComponentType> = {
renderStatic(Component) {
return async (props, ...children) => ReactDOMServer.renderToString(React.createElement(Component, props, children));
},
diff --git a/src/frontend/render/renderer.ts b/src/frontend/render/renderer.ts
index f00569827..02caf145f 100644
--- a/src/frontend/render/renderer.ts
+++ b/src/frontend/render/renderer.ts
@@ -1,7 +1,7 @@
-import type { ComponentRenderer, DynamicRenderContext, DynamicRendererGenerator, StaticRendererGenerator } from '../../@types/renderer';
+import type { DynamicRenderContext, DynamicRendererGenerator, SupportedComponentRenderer, StaticRendererGenerator } from '../../@types/renderer';
/** Initialize Astro Component renderer for Static and Dynamic components */
-export function createRenderer(renderer: ComponentRenderer) {
+export function createRenderer(renderer: SupportedComponentRenderer) {
const _static: StaticRendererGenerator = (Component) => renderer.renderStatic(Component);
const _imports = (context: DynamicRenderContext) => {
const values = Object.values(renderer.imports ?? {})
diff --git a/src/frontend/render/svelte.ts b/src/frontend/render/svelte.ts
index 6549d1dde..fcb4ff24b 100644
--- a/src/frontend/render/svelte.ts
+++ b/src/frontend/render/svelte.ts
@@ -1,7 +1,8 @@
import type { ComponentRenderer } from '../../@types/renderer';
+import type { SvelteComponent } from 'svelte';
import { createRenderer } from './renderer';
-const SvelteRenderer: ComponentRenderer = {
+const SvelteRenderer: ComponentRenderer<SvelteComponent> = {
renderStatic(Component) {
return async (props, ...children) => {
const { html } = Component.render(props);
diff --git a/src/frontend/render/vue.ts b/src/frontend/render/vue.ts
index e28729542..628544775 100644
--- a/src/frontend/render/vue.ts
+++ b/src/frontend/render/vue.ts
@@ -1,9 +1,10 @@
import type { ComponentRenderer } from '../../@types/renderer';
+import type { Component as VueComponent } from 'vue';
import { renderToString } from '@vue/server-renderer';
import { createSSRApp, h as createElement } from 'vue';
import { createRenderer } from './renderer';
-const Vue: ComponentRenderer = {
+const Vue: ComponentRenderer<VueComponent> = {
renderStatic(Component) {
return async (props, ...children) => {
const app = createSSRApp({