Skip to content

Commit 2f7996e

Browse files
authored
fix: improve type safety of ssrContext and createRenderer (#73)
1 parent f080973 commit 2f7996e

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

src/runtime.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ export interface ModuleDependencies {
99
}
1010

1111
export interface SSRContext {
12-
renderResourceHints?: Function
13-
renderScripts?: Function
14-
renderStyles?: Function
12+
renderResourceHints?: (...args: unknown[]) => unknown
13+
renderScripts?: (...args: unknown[]) => unknown
14+
renderStyles?: (...args: unknown[]) => unknown
1515
// @vitejs/plugin-vue: https://vitejs.dev/guide/ssr.html#generating-preload-directives
1616
modules?: Set<string>
1717
// vue-loader (webpack)
1818
_registeredComponents?: Set<string>
1919
// Cache
2020
_requestDependencies?: ModuleDependencies
21-
[key: string]: any
21+
[key: string]: unknown
2222
}
2323

2424
export interface RenderOptions {
@@ -237,17 +237,22 @@ export function renderScripts (ssrContext: SSRContext, rendererContext: Renderer
237237
})).join('')
238238
}
239239

240-
export type RenderFunction = (ssrContext: SSRContext, rendererContext: RendererContext) => any
240+
export type RenderFunction = (ssrContext: SSRContext, rendererContext: RendererContext) => unknown
241241

242-
export function createRenderer (createApp: any, renderOptions: RenderOptions & { renderToString: Function }) {
242+
type CreateApp<App> = (ssrContext: SSRContext) => App | Promise<App>
243+
type ImportOf<T> = T | { default: T } | Promise<T> | Promise<{ default: T }>
244+
245+
type RenderToString<App> = (app: App, ssrContext: SSRContext) => string | Promise<string>
246+
247+
export function createRenderer<App> (createApp: ImportOf<CreateApp<App>>, renderOptions: RenderOptions & { renderToString: RenderToString<App> }) {
243248
const rendererContext = createRendererContext(renderOptions)
244249

245250
return {
246251
rendererContext,
247252
async renderToString (ssrContext: SSRContext) {
248253
ssrContext._registeredComponents = ssrContext._registeredComponents || new Set()
249254

250-
const _createApp = await Promise.resolve(createApp).then(r => r.default || r)
255+
const _createApp = await Promise.resolve(createApp).then(r => 'default' in r ? r.default : r)
251256
const app = await _createApp(ssrContext)
252257
const html = await renderOptions.renderToString(app, ssrContext)
253258

0 commit comments

Comments
 (0)