From 0da3fd26fe726bd8d895881cbec31f5021bcf5e9 Mon Sep 17 00:00:00 2001 From: Peter Burns Date: Fri, 12 May 2017 13:19:53 -0700 Subject: [PATCH 1/2] node: pause() and resume() return `this` Readable streams and streamlike interfaces in node have pause() and resume() methods. They're defined to return `this` in the documentation: https://nodejs.org/api/stream.html#stream_readable_pause This is relevant when someone extends a stream, as the pause and resume methods on a subtype should return the subtype, not the super type. --- types/node/v6/index.d.ts | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/types/node/v6/index.d.ts b/types/node/v6/index.d.ts index ebc2b516d6..6e3ce46435 100644 --- a/types/node/v6/index.d.ts +++ b/types/node/v6/index.d.ts @@ -281,8 +281,8 @@ declare namespace NodeJS { readable: boolean; read(size?: number): string | Buffer; setEncoding(encoding: string | null): void; - pause(): ReadableStream; - resume(): ReadableStream; + pause(): this; + resume(): this; isPaused(): boolean; pipe(destination: T, options?: { end?: boolean; }): T; unpipe(destination?: T): void; @@ -301,10 +301,7 @@ declare namespace NodeJS { end(str: string, encoding?: string, cb?: Function): void; } - export interface ReadWriteStream extends ReadableStream, WritableStream { - pause(): ReadWriteStream; - resume(): ReadWriteStream; - } + export interface ReadWriteStream extends ReadableStream, WritableStream {} export interface Events extends EventEmitter { } @@ -1431,8 +1428,8 @@ declare module "readline" { setPrompt(prompt: string): void; prompt(preserveCursor?: boolean): void; question(query: string, callback: (answer: string) => void): void; - pause(): ReadLine; - resume(): ReadLine; + pause(): this; + resume(): this; close(): void; write(data: string | Buffer, key?: Key): void; @@ -1939,8 +1936,6 @@ declare module "net" { setEncoding(encoding?: string): void; write(data: any, encoding?: string, callback?: Function): void; destroy(): void; - pause(): Socket; - resume(): Socket; setTimeout(timeout: number, callback?: Function): void; setNoDelay(noDelay?: boolean): void; setKeepAlive(enable?: boolean, initialDelay?: number): void; @@ -3432,8 +3427,8 @@ declare module "stream" { _read(size: number): void; read(size?: number): any; setEncoding(encoding: string): void; - pause(): Readable; - resume(): Readable; + pause(): this; + resume(): this; isPaused(): boolean; pipe(destination: T, options?: { end?: boolean; }): T; unpipe(destination?: T): void; From e85e05d0b2f99fd2597ebeb7081e6607f453e7a0 Mon Sep 17 00:00:00 2001 From: Peter Burns Date: Tue, 23 May 2017 12:03:17 -0700 Subject: [PATCH 2/2] Add tests of types. --- types/node/v6/node-tests.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/types/node/v6/node-tests.ts b/types/node/v6/node-tests.ts index b2ca08898c..b405459b7e 100644 --- a/types/node/v6/node-tests.ts +++ b/types/node/v6/node-tests.ts @@ -542,6 +542,32 @@ function simplified_stream_ctor_test() { }) } +// Subclassing stream classes +{ + class SubclassedReadable extends stream.Readable {}; + + let subclassedReadable: SubclassedReadable = new SubclassedReadable(); + subclassedReadable = subclassedReadable.pause(); + subclassedReadable = subclassedReadable.resume(); + + class SubclassedTransform extends stream.Transform {}; + + let subclassedTransform: SubclassedTransform = new SubclassedTransform(); + subclassedTransform = subclassedTransform.pause(); + subclassedTransform = subclassedTransform.resume(); + + class SubclassedDuplex extends stream.Duplex {}; + + let subclassedDuplex: SubclassedDuplex = new SubclassedDuplex(); + subclassedDuplex = subclassedDuplex.pause(); + subclassedDuplex = subclassedDuplex.resume(); + + // assignability + let readable: stream.Readable = subclassedDuplex; + readable = subclassedTransform; + let duplex: stream.Duplex = subclassedTransform; +} + //////////////////////////////////////////////////////// /// Crypto tests : http://nodejs.org/api/crypto.html /// ////////////////////////////////////////////////////////