[Flight] Better compat with http.createServer (#17289)

This commit is contained in:
Dan Abramov 2019-11-06 17:10:26 +00:00 committed by GitHub
parent 3452706308
commit f50f39b55f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 5 deletions

View File

@ -9,7 +9,10 @@
import type {Writable} from 'stream';
type MightBeFlushable = {flush?: () => void};
type MightBeFlushable = {
flush?: () => void,
flushHeaders?: () => void, // Legacy
};
export type Destination = Writable & MightBeFlushable;
@ -21,13 +24,20 @@ export function flushBuffered(destination: Destination) {
// If we don't have any more data to send right now.
// Flush whatever is in the buffer to the wire.
if (typeof destination.flush === 'function') {
// By convention the Zlib streams provide a flush function for this purpose.
destination.flush();
// http.createServer response have flush(), but it has a different meaning and
// is deprecated in favor of flushHeaders(). Detect to avoid a warning.
if (typeof destination.flushHeaders !== 'function') {
// By convention the Zlib streams provide a flush function for this purpose.
destination.flush();
}
}
}
export function beginWriting(destination: Destination) {
destination.cork();
// Older Node streams like http.createServer don't have this.
if (typeof destination.cork === 'function') {
destination.cork();
}
}
export function writeChunk(destination: Destination, buffer: Uint8Array) {
@ -36,7 +46,10 @@ export function writeChunk(destination: Destination, buffer: Uint8Array) {
}
export function completeWriting(destination: Destination) {
destination.uncork();
// Older Node streams like http.createServer don't have this.
if (typeof destination.uncork === 'function') {
destination.uncork();
}
}
export function close(destination: Destination) {