Skip to content

IncomingMessage should implement ReadableStream #170

@andersk

Description

@andersk

(Feel free to redirect me if this bug should be reported elsewhere.)

The definition of IncomingMessage (generated from https://github.com/electron/electron/releases/download/v9.1.0/electron-api.json) fails to reflect the documentation’s guarantee that “IncomingMessage implements the Readable Stream interface”:

  class IncomingMessage extends NodeEventEmitter {

    // Docs: http://electronjs.org/docs/api/incoming-message

    /**
     * Emitted when a request has been canceled during an ongoing HTTP transaction.
     */
    on(event: 'aborted', listener: Function): this;
    // …
    // more events
    // …
    removeListener(event: 'error', listener: Function): this;
    headers: Record<string, string[]>;
    httpVersion: string;
    httpVersionMajor: number;
    httpVersionMinor: number;
    statusCode: number;
    statusMessage: string;
  }

So working code like this fails to type check:

import { app, net } from "electron";
import getStream from "get-stream";

app.on("ready", () => {
  const request = net.request({url: "https://example.com"});
  request.on("response", async response => {
    if (true) {
      // error TS2345: Argument of type 'IncomingMessage' is not assignable to parameter of type 'Stream'.
      console.log(await getStream(response));
    } else {
      // error TS2495: Type 'IncomingMessage' is not an array type or a string type.
      for await (const chunk of response) {
        console.log(chunk.toString());
      }
    }
  });
  request.end();
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions