diff options
author | 2021-04-02 21:01:57 -0600 | |
---|---|---|
committer | 2021-04-02 21:01:57 -0600 | |
commit | d9733e8d42662d8708b5fc3bcb5c6c4db75df043 (patch) | |
tree | 558c20bc1b58e0362cd1e3748168fa9a06b9ee80 /src/frontend/render | |
parent | 008ffc295133bb35d537dd3b8edfb31b808a423b (diff) | |
download | astro-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.ts | 5 | ||||
-rw-r--r-- | src/frontend/render/react.ts | 5 | ||||
-rw-r--r-- | src/frontend/render/renderer.ts | 23 | ||||
-rw-r--r-- | src/frontend/render/svelte.ts | 5 | ||||
-rw-r--r-- | src/frontend/render/vue.ts | 5 |
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({ |