summaryrefslogtreecommitdiff
path: root/src/frontend/render
diff options
context:
space:
mode:
authorGravatar Drew Powers <1369770+drwpow@users.noreply.github.com> 2021-04-02 21:01:57 -0600
committerGravatar GitHub <noreply@github.com> 2021-04-02 21:01:57 -0600
commitd9733e8d42662d8708b5fc3bcb5c6c4db75df043 (patch)
tree558c20bc1b58e0362cd1e3748168fa9a06b9ee80 /src/frontend/render
parent008ffc295133bb35d537dd3b8edfb31b808a423b (diff)
downloadastro-d9733e8d42662d8708b5fc3bcb5c6c4db75df043.tar.gz
astro-d9733e8d42662d8708b5fc3bcb5c6c4db75df043.tar.zst
astro-d9733e8d42662d8708b5fc3bcb5c6c4db75df043.zip
Add type declarations (#59)
Diffstat (limited to 'src/frontend/render')
-rw-r--r--src/frontend/render/preact.ts5
-rw-r--r--src/frontend/render/react.ts5
-rw-r--r--src/frontend/render/renderer.ts23
-rw-r--r--src/frontend/render/svelte.ts5
-rw-r--r--src/frontend/render/vue.ts5
5 files changed, 17 insertions, 26 deletions
diff --git a/src/frontend/render/preact.ts b/src/frontend/render/preact.ts
index 8705c5504..3bc266735 100644
--- a/src/frontend/render/preact.ts
+++ b/src/frontend/render/preact.ts
@@ -1,11 +1,12 @@
-import { Renderer, createRenderer } from './renderer';
import { h, render } from 'preact';
import { renderToString } from 'preact-render-to-string';
+import type { ComponentRenderer } from '../../@types/renderer';
+import { createRenderer } from './renderer';
// This prevents tree-shaking of render.
Function.prototype(render);
-const Preact: Renderer = {
+const Preact: ComponentRenderer = {
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 bab1d582c..b9e55f1c9 100644
--- a/src/frontend/render/react.ts
+++ b/src/frontend/render/react.ts
@@ -1,8 +1,9 @@
-import { Renderer, createRenderer } from './renderer';
+import type { ComponentRenderer } from '../../@types/renderer';
import React from 'react';
import ReactDOMServer from 'react-dom/server';
+import { createRenderer } from './renderer';
-const ReactRenderer: Renderer = {
+const ReactRenderer: ComponentRenderer = {
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 cff82eea5..f00569827 100644
--- a/src/frontend/render/renderer.ts
+++ b/src/frontend/render/renderer.ts
@@ -1,18 +1,8 @@
-interface DynamicRenderContext {
- componentUrl: string;
- componentExport: string;
- frameworkUrls: string;
-}
-
-export interface Renderer {
- renderStatic(Component: any): (props: Record<string, any>, ...children: any[]) => Promise<string>;
- render(context: { root: string; Component: string; props: string; [key: string]: string }): string;
- imports?: Record<string, string[]>;
-}
+import type { ComponentRenderer, DynamicRenderContext, DynamicRendererGenerator, StaticRendererGenerator } from '../../@types/renderer';
/** Initialize Astro Component renderer for Static and Dynamic components */
-export function createRenderer(renderer: Renderer) {
- const _static: Renderer['renderStatic'] = (Component: any) => renderer.renderStatic(Component);
+export function createRenderer(renderer: ComponentRenderer) {
+ const _static: StaticRendererGenerator = (Component) => renderer.renderStatic(Component);
const _imports = (context: DynamicRenderContext) => {
const values = Object.values(renderer.imports ?? {})
.reduce((acc, v) => {
@@ -31,12 +21,9 @@ export function createRenderer(renderer: Renderer) {
const astroId = `${Math.floor(Math.random() * 1e16)}`;
return { ['data-astro-id']: astroId, root: `document.querySelector('[data-astro-id="${astroId}"]')`, Component: 'Component' };
};
- const createDynamicRender = (
- wrapperStart: string | ((context: ReturnType<typeof createContext>) => string),
- wrapperEnd: string | ((context: ReturnType<typeof createContext>) => string)
- ) => (Component: any, renderContext: DynamicRenderContext) => {
+ const createDynamicRender: DynamicRendererGenerator = (wrapperStart, wrapperEnd) => (Component, renderContext) => {
const innerContext = createContext();
- return async (props: Record<string, any>, ...children: any[]) => {
+ return async (props, ...children) => {
let value: string;
try {
value = await _static(Component)(props, ...children);
diff --git a/src/frontend/render/svelte.ts b/src/frontend/render/svelte.ts
index 2f67eb79f..6549d1dde 100644
--- a/src/frontend/render/svelte.ts
+++ b/src/frontend/render/svelte.ts
@@ -1,6 +1,7 @@
-import { Renderer, createRenderer } from './renderer';
+import type { ComponentRenderer } from '../../@types/renderer';
+import { createRenderer } from './renderer';
-const SvelteRenderer: Renderer = {
+const SvelteRenderer: ComponentRenderer = {
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 69c00e570..e28729542 100644
--- a/src/frontend/render/vue.ts
+++ b/src/frontend/render/vue.ts
@@ -1,8 +1,9 @@
+import type { ComponentRenderer } from '../../@types/renderer';
import { renderToString } from '@vue/server-renderer';
import { createSSRApp, h as createElement } from 'vue';
-import { Renderer, createRenderer } from './renderer';
+import { createRenderer } from './renderer';
-const Vue: Renderer = {
+const Vue: ComponentRenderer = {
renderStatic(Component) {
return async (props, ...children) => {
const app = createSSRApp({