|
@@ -3,11 +3,12 @@
|
|
|
import RenderStream from './render-stream'
|
|
import RenderStream from './render-stream'
|
|
|
import { createWriteFunction } from './write'
|
|
import { createWriteFunction } from './write'
|
|
|
import { createRenderFunction } from './render'
|
|
import { createRenderFunction } from './render'
|
|
|
|
|
+import { createPromiseCallback } from './util'
|
|
|
import TemplateRenderer from './template-renderer/index'
|
|
import TemplateRenderer from './template-renderer/index'
|
|
|
import type { ClientManifest } from './template-renderer/index'
|
|
import type { ClientManifest } from './template-renderer/index'
|
|
|
|
|
|
|
|
export type Renderer = {
|
|
export type Renderer = {
|
|
|
- renderToString: (component: Component, context: any, cb: any) => void;
|
|
|
|
|
|
|
+ renderToString: (component: Component, context: any, cb: any) => ?Promise<string>;
|
|
|
renderToStream: (component: Component, context?: Object) => stream$Readable;
|
|
renderToStream: (component: Component, context?: Object) => stream$Readable;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -52,30 +53,39 @@ export function createRenderer ({
|
|
|
renderToString (
|
|
renderToString (
|
|
|
component: Component,
|
|
component: Component,
|
|
|
context: any,
|
|
context: any,
|
|
|
- done: any
|
|
|
|
|
- ): void {
|
|
|
|
|
|
|
+ cb: any
|
|
|
|
|
+ ): ?Promise<string> {
|
|
|
if (typeof context === 'function') {
|
|
if (typeof context === 'function') {
|
|
|
- done = context
|
|
|
|
|
|
|
+ cb = context
|
|
|
context = {}
|
|
context = {}
|
|
|
}
|
|
}
|
|
|
if (context) {
|
|
if (context) {
|
|
|
templateRenderer.bindRenderFns(context)
|
|
templateRenderer.bindRenderFns(context)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // no callback, return Promise
|
|
|
|
|
+ let promise
|
|
|
|
|
+ if (!cb) {
|
|
|
|
|
+ ({ promise, cb } = createPromiseCallback())
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
let result = ''
|
|
let result = ''
|
|
|
const write = createWriteFunction(text => {
|
|
const write = createWriteFunction(text => {
|
|
|
result += text
|
|
result += text
|
|
|
return false
|
|
return false
|
|
|
- }, done)
|
|
|
|
|
|
|
+ }, cb)
|
|
|
try {
|
|
try {
|
|
|
render(component, write, context, () => {
|
|
render(component, write, context, () => {
|
|
|
if (template) {
|
|
if (template) {
|
|
|
result = templateRenderer.renderSync(result, context)
|
|
result = templateRenderer.renderSync(result, context)
|
|
|
}
|
|
}
|
|
|
- done(null, result)
|
|
|
|
|
|
|
+ cb(null, result)
|
|
|
})
|
|
})
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
- done(e)
|
|
|
|
|
|
|
+ cb(e)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ return promise
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
renderToStream (
|
|
renderToStream (
|