Skip to content

Commit dedc2f8

Browse files
committed
chore: inject Doctype by combineStream
1 parent 174f9db commit dedc2f8

File tree

10 files changed

+36
-12
lines changed

10 files changed

+36
-12
lines changed

example/ssr-with-antd/app/controller/page.js

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15-
ctx.res.write('<!DOCTYPE html>')
1615
ctx.body = stream
1716
} catch (error) {
1817
ctx.logger.error(`Page Controller renderToStream Error`, error)

example/ssr-with-dva/app/controller/page.js

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15-
ctx.res.write('<!DOCTYPE html>')
1615
ctx.body = stream
1716
} catch (error) {
1817
ctx.logger.error(`Page Controller renderToStream Error ${error}`)

example/ssr-with-js/app/controller/page.js

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15-
ctx.res.write('<!DOCTYPE html>')
1615
ctx.body = stream
1716
} catch (error) {
1817
ctx.logger.error(`Page Controller renderToStream Error`, error)

example/ssr-with-loadable/app/controller/page.js

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15-
ctx.res.write('<!DOCTYPE html>')
1615
ctx.body = stream
1716
} catch (error) {
1817
ctx.logger.error(`Page Controller renderToStream Error ${error}`)

example/ssr-with-mobx/app/controller/page.js

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15-
ctx.res.write('<!DOCTYPE html>')
1615
ctx.body = stream
1716
} catch (error) {
1817
ctx.logger.error(`Page Controller renderToStream Error`, error)

example/ssr-with-rax/app/controller/page.js

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15-
ctx.res.write('<!DOCTYPE html>')
1615
ctx.body = stream
1716
} catch (error) {
1817
ctx.logger.error(`Page Controller renderToStream Error`, error)

example/ssr-with-ts/src/app/controller/page.ts

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ export class Page {
2323
this.ctx.apiService = this.service.index // 将service挂载到上下文对象
2424
const config = Object.assign(this.ctx.app.config, ssrConfig)
2525
const stream = await renderToStream(this.ctx, config)
26-
this.ctx.res.write('<!DOCTYPE html>')
2726
this.ctx.body = stream
2827
} catch (error) {
2928
this.ctx.logger.error(`Page Controller renderToStream Error`, error)

packages/ykfe-utils/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ykfe-utils",
3-
"version": "3.4.0",
3+
"version": "3.5.0",
44
"description": "utils for ykfe",
55
"main": "lib/index.js",
66
"module": "es/index.js",

packages/ykfe-utils/src/renderToStream.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Context } from 'midway'
2-
import { getVersion } from './utils'
2+
import { getVersion, ReadableString, combineStream } from './utils'
33
import { renderLayout } from './renderLayout'
44
import { useCdn } from './useCdn'
55
import { Config } from './interface/config'
@@ -46,7 +46,8 @@ const renderToStream = async (ctx: Context, config: Config) => {
4646
defaultUnit: 'rpx'
4747
}) : global.renderToNodeStream(serverComponent)
4848

49-
return stream
49+
const doctypeStream = new ReadableString('<!DOCTYPE html>')
50+
return combineStream(doctypeStream, stream)
5051
}
5152

5253
export default renderToStream

packages/ykfe-utils/src/utils/index.ts

+32-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { resolve } from 'path'
2+
import { Readable, PassThrough } from 'stream'
23
import React from 'react'
34
import { renderToNodeStream } from 'react-dom/server'
45
import { Config } from '../interface/config'
@@ -26,10 +27,39 @@ const getVersion = (str: string) => {
2627
}
2728
}
2829

30+
class ReadableString extends Readable {
31+
str: string
32+
sent: boolean
33+
34+
constructor (str: string) {
35+
super()
36+
this.str = str
37+
this.sent = false
38+
}
39+
40+
_read () {
41+
if (!this.sent) {
42+
this.push(Buffer.from(this.str))
43+
this.sent = true
44+
} else {
45+
this.push(null)
46+
}
47+
}
48+
}
49+
50+
const combineStream = function () {
51+
const writeableStream = new PassThrough()
52+
Array.prototype.slice.call(arguments).forEach(readableStream => {
53+
readableStream.pipe(writeableStream)
54+
})
55+
return writeableStream
56+
}
57+
2958
export {
3059
resolveDir,
3160
logGreen,
3261
reactToStream,
33-
getVersion
34-
62+
getVersion,
63+
ReadableString,
64+
combineStream
3565
}

0 commit comments

Comments
 (0)